一、登录微信公众平台开通微信订阅消息
申请开通一个订阅模板
二、小程序端订阅消息
(是去微信服务器订阅 订阅之后并且同意后 才能接受到)
下面我己做成一个方法 ,在你需要触发的地方调用即可,也可以加自己的业务逻辑
代码是uniapp方式 ,原生小程序同理
userNotice(){
uni.requestSubscribeMessage({
tmplIds: ['TOQgWtlLMwKCYORrXY07D6QeHmtPpmxGtdFw0A4dFMQ'],//微信公众平台申请的模板
success (res) {
console.info("订阅消息成功")
}
})
},
三、根据模板构造请求提
(一样 是后端发送给微信服务器 再转发给小程序具体用户,我这边使用的是Java,参考代码如下)
/**
* 微信消息通知工具类
* @author xingsfdz
* xingsfdz@163.com
* 2022-11-27 17:30
*/
@Slf4j
@Component
public class WxMsgNocUtils {
@Value("${appid}")
private String appid;//配置文件里面的appid 小程序appid
@Value("${secret}")
private String secret;//配置文件里面自己配置 小程序secret
private static final String tmpId = "TOQgWtlLMwKCYORrXY07D6QeHmtPpmxGtdFw0A4dFMQ";//微信公众平台申请的模板Id
/**
* 1.构造请求体
* 2.
* @return
*/
public void orderSuccess(WxMsgVo bean) {
try {
JSONObject body=new JSONObject();
body.set("touser", bean.getTouser());
body.set("template_id", tmpId);
JSONObject json=new JSONObject();
json.set("character_string1", new JSONObject().set("value", bean.getCharacter_string1()));//订单号
json.set("thing6", new JSONObject().set("value", bean.getThing6()));//支付人
json.set("thing4", new JSONObject().set("value", bean.getThing4()));//产品名
json.set("amount3", new JSONObject().set("value",bean.getAmount3()));//价格
json.set("date2", new JSONObject().set("value", DateUtils.getStrHMS(bean.getDate2())));//时间 自己转换成字符即可
body.set("data", json);
//发送
String accessToken= this.getWxAccessToken();
String res = cn.hutool.http.HttpUtil.post("https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken, body.toString());
log.info("res=============================>:" + res);
} catch (Exception e) {
log.info("=================>订阅消息发送异常");
}
}
//获取微信用户acessToken
public String getWxAccessToken() {
String result = cn.hutool.http.HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret);
cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(result);
return jsonObject.getStr("access_token");
}
}
四、测试
需要先小程序端订阅,然后后台不管什么时候触发,就能发送一条订阅消息到用户,消息将会展示在服务通知里面:
效果如下:
详情: