vo类
package cn.eangaie.appcloud.entity.config;
/**
* @Author Ean
* @Description 公众号消息模板id配置类
* @Date 2021/11/1
*/
public class ConfigGZH {
public static String miniAppId="wx1868eca79c502fdf";
public static String gzhAppId="wx114f4fd146d9d315";
}
package cn.eangaie.appcloud.entity.vo;
import lombok.Data;
/**
* @ClassName MpTemplateMsg
* @Author Eangaie
* 公众号模板消息相关的信息,可以参考公众号模板消息接口;有此节点并且没有weapp_template_msg节点时,发送公众号模板消息
* DATE 2021/5/24 0024 11:32
* @Version 1.0
**/
@Data
public class MpTemplateMsg {
/*公众号appid,与小程序互相绑定*/
String appid;
/*公众号模板id*/
String template_id;
/*公众号模板消息所要跳转的url*/
String url;
/*公众号模板消息所要跳转的小程序,小程序的必须与公众号具有绑定关系*/
JSONObject miniprogram;
/*公众号模板消息的数据*/
JSONObject data;
}
服务实现类
package cn.eangaie.appcloud.service.impl;
import cn.eangaie.appcloud.entity.config.ConfigGZH;
import cn.eangaie.appcloud.entity.vo.MpTemplateMsg;
import cn.eangaie.appcloud.service.WechatService;
import cn.eangaie.appcloud.util.AccessTokenUtil;
import cn.eangaie.appcloud.util.HttpClientUtil;
import cn.eangaie.appcloud.util.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.spec.AlgorithmParameterSpec;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName WechatServiceImpl
* @Author Eangaie
* DATE 2021/5/18 0018 17:41
* @Version 1.0
**/
@Service
@Slf4j
public class WechatServiceImpl implements WechatService {
@Autowired
AccessTokenUtil accessTokenUtil;
String uniformMessageUrl = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send";
/**
* @return java.lang.String
* @Author Ean
* @Description "{\"keyword1\":{\"value\":\"339208499\"},\"keyword2\":{\"value\":\"2015年01月05日12:30\"},\"keyword3\":{\"value\":\"腾讯微信总部\"},\"keyword4\":{\"value\":\"广州市海珠区新港中路397号\"}}"
* @Date 9:47 2021/8/24 0024
* @Param [openid, templateId, data]
**/
@Override
public String sendSubscribe(String openid, String templateId, String data) {
data = data.trim();
String token = accessTokenUtil.getACCESS_TOKEN().getAccess_token();
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + token;
JSONObject param = new JSONObject();
param.put("touser", openid);//接收者(用户)的 openid
param.put("template_id", templateId);//所需下发的订阅模板id
param.put("page", "pages/index/index");
param.put("data", JSONObject.parseObject(data));
String res = HttpUtil.doPostJson(url.trim(), param.toString());
log.info("订阅消息发送返回{}", res);
return res;
}
/**
* @param template_id
* @param url
* @param miniprogram
* @param data
* @return java.lang.String
* @Author Ean
* @Description 发送消息
* @Date 13:30 2021/5/24 0024
* https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/uniform-message/uniformMessage.send.html
* "{ \"appid\":\""+ConfigGZH.miniAppId+"\", \"pagepath\":\"pages/home/home\" }"
* "{ \"first\": { \"value\": \"恭喜,您的分销成员成功消费分销产品,你获得分销佣金\", \"color\": \"#173177\" }, \"keyword1\": { \"value\": \"巧克力\", \"color\": \"#173177\" }, \"keyword2\": { \"value\": \"39.8元\", \"color\": \"#173177\" }, \"keyword3\": { \"value\": \"2014年9月22日\", \"color\": \"#173177\" }, \"keyword4\": { \"value\": \"2014年9月22日\", \"color\": \"#173177\" }, \"remark\": { \"value\": \"因资金通道原因,目前提现仅支持手动提现,支付宝转账。后期升级可一键提现。因此带来的不便敬请谅解!\", \"color\": \"#173177\" } }"
* @Param [template_id, url, miniprogram, data]
*/
@Override
public String uniformMessage(String openid, String template_id, String url, String miniprogram, String data) {
try {
String reqUrl = uniformMessageUrl;
reqUrl = reqUrl + "?access_token=" + accessTokenUtil.getACCESS_TOKEN().getAccess_token();
MpTemplateMsg mpTemplateMsg = new MpTemplateMsg();
mpTemplateMsg.setAppid(ConfigGZH.gzhAppId);
mpTemplateMsg.setTemplate_id(template_id);
mpTemplateMsg.setUrl(url);
mpTemplateMsg.setMiniprogram(JSONObject.parseObject(miniprogram));
mpTemplateMsg.setData(JSONObject.parseObject(data));
String res = null;
Map<String, Object> param = new HashMap<>();
param.put("touser", openid);
param.put("mp_template_msg", mpTemplateMsg);
Gson gson = new Gson();
res = HttpUtil.doPostJson(reqUrl, gson.toJson(param));
return res;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* @return java.lang.String
* @Author Ean
* @Description 解析微信手机号码
* @Date 9:39 2021/7/15 0015
* @Param [sessionKey1, ivData1, encrypData1]
*/
@Override
public String decrypt(byte[] key, byte[] iv, byte[] encData) {
AlgorithmParameterSpec ivSpec = new IvParameterSpec(iv);
String data = null;
try {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
data = new String(cipher.doFinal(encData), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
//解析解密后的字符串
return data;
}
}