自用微信小程序使用公众号发送模板消息代码记录
实体model
@Data
public class NewGzhTemplateData {
Map<String, NewValue> map;
public void putValue(String name, NewValue value) {
if (this.map == null) {
this.map = new HashMap<>();
}
this.map.put(name, value);
}
@Data
public static class NewValue {
@JSONField(name = "value")
String valueStr;
String color;
public NewValue(String valueStr) {
this.valueStr = valueStr;
}
public NewValue(String valueStr, String color) {
this.valueStr = valueStr;
this.color = color;
}
}
}
@Data
public class GzhTemplateMiniprogram {
private String appid;
private String pagepath;
}
@Data
public class NewMpTemplateMsg {
@JSONField(name = "touser")
private String touser;
@JSONField(name = "template_id")
private String templateId;
@JSONField(name = "appid")
private String appId;
private String url;
@JSONField(name = "miniprogram")
private GzhTemplateMiniprogram miniprogram;
@JSONField(serialize = false)
private NewGzhTemplateData datas;
@JSONField(name = "data")
public Map<String, NewGzhTemplateData.NewValue> getData(){
if(datas==null){
return new HashMap<>();
}
return datas.getMap();
}
}
请求类
public ApiResponse<JSONObject> pushGzhTemplate(NewMpTemplateMsg template) {
if (template == null) {
return new ApiResponse<>(URLCodeConst.PARAM_ERROR, "模板参数为空!");
}
String templateJson = JSON.toJSONString(template);
String url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + getToken();
Map<String, String> header = new HashMap<>();
String s = HttpTool.doPost(url, header, templateJson);
JSONObject jsonObject = JSON.parseObject(s);
try {
pushWxTemplateLogServiceStatic.save(template.getTemplateId(),jsonObject.getString(SystemBizConst.ERRCODE),JSON.toJSONString(jsonObject),template.getTouser(),templateJson);
}catch (Exception e){
e.printStackTrace();
}
return new ApiResponse<>(jsonObject);
}
public String getToken() {
String accTokenKey = "ACCESS_TOKEN:" + appConfig.getAppid();
Object o = redisUtil.get(accTokenKey);
if (o == null) {
String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token";
Map<String, String> map = new TreeMap<>();
map.put(SystemBizConst.WX_GRANT_TYPE, "client_credential");
map.put(SystemBizConst.WX_APPID, appConfig.getAppid());
map.put(SystemBizConst.WX_SECRET, appConfig.getAppSecret());
String s = HttpTool.doGet(tokenUrl, map);
JSONObject object = JSON.parseObject(s);
if (object.getString(SystemBizConst.ACCESS_TOKEN) != null) {
String accessToken = object.getString(SystemBizConst.ACCESS_TOKEN);
boolean set = redisUtil.set(accTokenKey, accessToken, 7100);
if(set){
return accessToken;
}else {
logger.error(object.toJSONString());
throw new MyException("获取token失败!");
}
} else {
logger.error(object.toJSONString());
throw new MyException("获取token失败!");
}
}
return (String) o;
}
使用
NewGzhTemplateData gzhTemplateData = new NewGzhTemplateData();
gzhTemplateData.putValue("character_string1", new NewGzhTemplateData.NewValue(""));
gzhTemplateData.putValue("thing14", new NewGzhTemplateData.NewValue(""));
gzhTemplateData.putValue("phrase11", new NewGzhTemplateData.NewValue(""));
GzhTemplateMiniprogram gzhTemplateMiniprogram = new GzhTemplateMiniprogram();
gzhTemplateMiniprogram.setAppid("和公众号绑定的小程序APPID");
gzhTemplateMiniprogram.setPagepath("自己小程序的跳转路径");
NewMpTemplateMsg mpTemplateMsg = new NewMpTemplateMsg();
mpTemplateMsg.setTouser("公众号用户的openID");
mpTemplateMsg.setAppId("公众号APPID");
mpTemplateMsg.setDatas(gzhTemplateData);
mpTemplateMsg.setMiniprogram(gzhTemplateMiniprogram);
mpTemplateMsg.setTemplateId("公众号绑定的模板消息");
ApiResponse<JSONObject> apiResponse = new WxApiUtils(appConfig).pushGzhTemplate(mpTemplateMsg);