官方文档 统一下发消息
注意事项
mp_template_msg.appid为公众号的appid。
mp_template_msg.url不能为空,那么怕写个xxx。
如果要小程序,则miniprogram下填充小程序的appid和page。
统一服务消息的发送位置为公众号。
公众号的小程序一定要关联以下哦(不需要开放平台关联
传递的openId 可以是小程序的 但是access_token获取也必须是小程序的
如果传递公众号openId access_token应该也需要用公众号对应的appid和secret获取
DEMO
//wxMpProperties 公众号配置
//WxTemplateMessageType 公众号模版消息
//miniProgramProperties 小程序参数
public void sendWxMessage() {
String accessToken = getAccessToken();
HashMap<String, Object> params = new HashMap<>();
List<String> openIds = new ArrayList<>();
openIds.add("*************"); //小程序 里昂
// openIds.add("**************");//公众号 里昂
if (openIds != null && openIds.size() > 0) {
for (String openId : openIds) {
params.put("touser", openId);
HashMap<String, Object> mp_template_msg = new HashMap<>();
mp_template_msg.put("appid", wxMpProperties.getAppId());
mp_template_msg.put("template_id", WxTemplateMessageType.ORDER_COMPLETION_AFTER_SALES.getTemplateId());
mp_template_msg.put("url", "http://weixin.qq.com/download");
HashMap<String, Object> miniprogram = new HashMap<>();
miniprogram.put("appid", miniProgramProperties.getAppId());
miniprogram.put("pagepath", "index?foo=bar");
mp_template_msg.put("miniprogram", miniprogram);
HashMap<String, Object> data = new HashMap<>();
HashMap<Object, Object> first = new HashMap<>();
first.put("value", "您好,您的订单已完成售后");
HashMap<String, Object> keyword1 = new HashMap<>();
keyword1.put("value", "0.01");
HashMap<String, Object> keyword2 = new HashMap<>();
keyword2.put("value", "测试");
HashMap<String, Object> keyword3 = new HashMap<>();
keyword3.put("value", "4545131");
HashMap<String, Object> keyword4 = new HashMap<>();
keyword4.put("value", "2020-12-12 12:12:12");
HashMap<Object, Object> remark = new HashMap<>();
remark.put("value", "感谢您的支持,欢迎再次购买!");
data.put("first", first);
data.put("keyword1", keyword1);
data.put("keyword2", keyword2);
data.put("keyword3", keyword3);
data.put("keyword4", keyword4);
data.put("remark", remark);
mp_template_msg.put("data", data);
params.put("mp_template_msg", mp_template_msg);
log.info("发送微信消息" + JSONUtil.toJsonPrettyStr(params));
HttpResponse execute = HttpRequest.post(String.format(SEND_MESSAGE_URL, accessToken))
.body(JSONUtil.toJsonStr(params))
.contentType("application/json")
.execute();
String body = execute.body();
log.info("订单售后完成,订单退款到账通知" + body);
}
}
}
//miniProgramProperties 小程序参数
String accessToken = null;
//先从缓存中获取
accessToken = (String) redisTemplate.opsForValue().get(PREFIX + miniProgramProperties.getAppId());
if (StrUtil.isEmpty(accessToken)) {
//获取小程序全局唯一后台接口调用凭据(access_token)
String token_url = String.format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", miniProgramProperties.getAppId(), miniProgramProperties.getAppSecret());
JSONObject jsonObject = JSON.parseObject(HttpRequest.get(token_url).execute().body());
accessToken = jsonObject.getString("access_token");
redisTemplate.opsForValue().set(PREFIX + miniProgramProperties.getAppId(), accessToken, 7000, TimeUnit.MINUTES);
}
return accessToken;
}