对于新版本消息订阅 ,与之前有些区别,之前的写法就不列举了。有兴趣的可以从网上浏览。
一、 封装消息的类
@Data
public class TemplateData {
private String value;
}
二、封装入参的类
@Data
public static class WxMssVo {
private String access_token;
private String touser;
private String template_id;
private String page;
private Map data;
}
三、获取access_token
private String getAccessToken() {
//获取access_token
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
"&appid=" + "小程序Id" + "&secret=" + "小程序秘钥";
RestTemplate restTemplate = new RestTemplate();
String json = restTemplate.getForObject(url, String.class);
JSonObject myJson = JSONObject.parseObject(json);
return myJson.get("access_token").toString();
}
四、发送消息
public String sendMessage(String templateId) {
String accessToken = getAccessToken();
String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;
WxMssVo wxMssVo = new WxMssVo();
wxMssVo.setTouser("openid");
wxMssVo.setTemplate_id(templateId);
Map dataVoMap = new HashMap<>();
TemplateData key1 = new TemplateData();
TemplateData key2 = new TemplateData();
TemplateData key3 = new TemplateData();
key1.setValue("张一一");
key2.setValue("乒乓球");
key3.setValue("报名成功");
//这里的key 为选用的模版的对应的key 可在选用的模版的详情中查看 切必须为这些,否则会报 参数错误提示
dataVoMap.put("name11", key1);
dataVoMap.put("thing5", key2);
dataVoMap.put("thing7", key3);
wxMssVo.setData(dataVoMap);
HttpHeaders headers = new HttpHeaders();
//设置编码 不设置转码 可能会出现 乱码问题
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
// 请勿轻易改变此提交方式,大部分的情况下,提交方式都是表单提交
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
if (restTemplate == null) {
restTemplate = new RestTemplate();
}
String string = JSONObject.toJSonString(wxMssVo);
HttpEntity requestEntity = new HttpEntity(string, headers);
ResponseEntity stringResponseEntity = restTemplate.postForEntity(url, requestEntity, String.class);
return stringResponseEntity.getBody();
}
这里的 name11 thing5 thing7 对应文中 map key
效果图
注意:代码中注释 很重要 请认真阅读 有什么不理解的欢迎提问。



