项目做成了小程序,原有公众号推送消息失效。
原因:
小程序的appid、secret与公众号的不一致;
小程序的opneid和微信公众号的openid不一致;
解决办法:
直接使用小程序openid( 此处是用户对小程序的openid,不是公众号openid )从公众号推送模板消息给用户。
操作步骤:
1.微信公众号关联小程序。
2.调用小程序统一消息服务向公众号发送模板消息。
所需主要参数:
小程序appid、secret ;
微信公众号appid、secret;
用户openid(本实现采用用户对小程序的openid);
消息模板id;
具体实现:
1.微信公众号关联小程序。(这一步太简单了) 公众号关联小程序
2.调用统一服务消息接口
请求地址:(注意尾部的access_token)
https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN
参数说明:
参数 | 类型 | 必须 | 说明 |
---|---|---|---|
access_token | string | 是 | 使用小程序appid、secret获取 |
touser | string | 是 | 用户openid,本文使用对小程序的openid |
mp_template_msg | Object | 是 | 公众号模板消息相关内容 |
mp_template_msg 参数说明:
参数 | 类型 | 必须 | 说明 |
---|---|---|---|
appid | string | 是 | 公众号appid |
template_id | string | 是 | 公众号模板消息id |
data | string | 是 | 公众号模板消息的数据 |
url | string | 否 | 公众号模板消息所要跳转的url(微信开发文档中写这个url为必须,但是实际使用中没有要跳转的url,所以不传这个参数也可以) |
miniprogram | string | 否 | 公众号模板消息所要跳转的小程序(微信开发文档中写这个miniprogram为必须,实际不传这个参数也可以) |
代码:
public void sendWxTemMsg(String openId, ClaimDO claimDO, String handTime, String statusDescRemake) {
//获取小程序accessToken
String string = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + XCX_APPID+ "&secret=" + XCX_SECRET);
JSONObject returnJSON = JSONObject.parseObject(string);
String accessToken = returnJSON.get("access_token") + "";
//小程序统一消息推送
String path = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=" + accessToken;
//封装参数
JSONObject jsonData = new JSONObject();
jsonData.put("touser", XCX_OPENID); // 小程序openid
JSONObject jsonObject = new JSONObject();
jsonObject.put("appid", GZH_OPENID);// 公众号id
jsonObject.put("template_id", XXMBID);// 公众号消息模板id
//公众号消息数据封装
JSONObject data = new JSONObject();
JSONObject first = new JSONObject();
first.put("value", "您的目前状态为:已结案");
first.put("color", "#173177");
JSONObject keyword1 = new JSONObject();
keyword1.put("value", "2487610552");
keyword1.put("color", "#173177");
JSONObject keyword2 = new JSONObject();
keyword2.put("value", "2020-08-27");
keyword2.put("color", "#173177");
JSONObject remark = new JSONObject();
remark.put("value", "欢迎下次使用");
remark.put("color", "#173177");
data.put("first", first);
data.put("keyword1", keyword1);
data.put("keyword2", keyword2);
data.put("remark", remark);
jsonObject.put("data", data);
jsonData.put("mp_template_msg", jsonObject);
HttpUtil.post(path, jsonData.toJSONString());
}
调用截图:
微信文档参考:统一消息服务
补充:文档中还可以使用工种号openid,对应发送参数由mp_template_msg转换为weapp_template_msg,详情需要关注文档具体内容。