微信小程序订阅消息推送

一、后台配置模板消息:

首先打开微信后台https://mp.weixin.qq.com/,找到订阅消息那里进行模板配置:

 点击选用按钮,选择指定的模板,选择字段,确定后可以看到下面的信息:

 复制上面的模板ID,这个在模板消息推送时要用的。点击详情,可以看到下面的信息:

这里面的模板ID和详细内容是需要记录下来的,推送消息时都要传递进去的。

 

二、前端小程序获取用户授权:

在小程序中获取用户订阅消息的授权:在小程序中,你需要调用wx.requestSubscribeMessage接口获取用户的订阅消息授权。用户同意授权后,你可以得到用户的订阅消息订阅状态:

1 uni.requestSubscribeMessage({
2  tmplIds: ['你的消息模板ID],
3   success (res) {
4       console.log(res);
5   }
6 })

点击调用了上述方法的按钮,就会弹出如下页面,选择允许后,就可以接收后端推送的通知消息了:

三、后端获取Token:

复制代码
 1 private TokenObj getAccessToken() {
 2     Map<String, Object> params = new HashMap<>();
 3     params.put("grant_type", "client_credential");
 4     params.put("appid", appletsConfig.getWxAppId());
 5     params.put("secret", appletsConfig.getWxAppSecret());
 6     String wxAppletDomain = "https://api.weixin.qq.com/cgi-bin/token";
 7     String res = HttpClientUtils.get(HttpClientUtils.getDefaultPoolClient(),wxAppletDomain,params);
 8     TokenObj obj = null;
 9     if (StringUtils.hasText(res)) {
10         obj = JSON.parseObject(res, TokenObj.class);
11     }
12     if (obj == null || StringUtils.isEmpty(obj.getAccess_token())) {
13         throw new BusinessException("获取token失败:" + res);
14     }
15     return obj;
16 }
复制代码

四、后端发送消息:

复制代码
 1 public String sendMsg(HttpServletRequest request){    
 2     //请求 微信接口 获取 accessToken
 3     String accessToken = getAccessToken();
 4     String openid = "接收消息的微信用户的openId";
 5     String templateId = "微信订阅消息模板";
 6     String page = "点击消息的跳转路径";
 7     // 构建订阅消息内容的JSON对象
 8     // 构建订阅消息内容的JSON对象
 9     JSONObject messageData = new JSONObject();
10     messageData.put("name2", createDataItem("张三"));
11     messageData.put("name3", createDataItem("李四"));
12     messageData.put("time4", createDataItem("2023-06-30"));
13     // 将订阅消息内容转换为JSON字符串
14     String jsonData = messageData.toJSONString();
15     pushMessage(accessToken,openid,templateId,page,jsonData);
16     return "success";
17 }
18 private static Map<String, Object> createDataItem(String value) {
19     Map<String, Object> item = new HashMap<>();
20     item.put("value", value);
21     return item;
22 }
23 
24 public void pushMessage(String accessToken, String openId, String templateId, String page, Map<String, Map<String,Object>> jsonData) {
25     try {
26         Map<String, Object> params=new HashMap<>();
27         params.put("touser",openId);
28         params.put("data", jsonData);
29         if(StringUtils.hasText(page)){
30             params.put("page",page);
31         }
32         params.put("miniprogram_state", "trial");
33         params.put("template_id",templateId); 
34         String pushUrl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=%s";
35         String result= HttpClientUtils.post(HttpClientUtils.getDefaultPoolClient(), String.format(pushUrl, accessToken), params);
36         logger.info("【微信推送】微信推送返回结果 ,{}",result);        
37     } catch (Exception e) {        
38         logger.error("【微信推送】微信推送请求失败", e);
39     }
40 }
复制代码

 

posted on   小夏coding  阅读(2368)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示