微信小程序订阅消息推送
一、后台配置模板消息:
首先打开微信后台https://mp.weixin.qq.com/,找到订阅消息那里进行模板配置:
点击选用按钮,选择指定的模板,选择字段,确定后可以看到下面的信息:
复制上面的模板ID,这个在模板消息推送时要用的。点击详情,可以看到下面的信息:
这里面的模板ID和详细内容是需要记录下来的,推送消息时都要传递进去的。
1 uni.requestSubscribeMessage({ 2 tmplIds: ['你的消息模板ID], 3 success (res) { 4 console.log(res); 5 } 6 })
点击调用了上述方法的按钮,就会弹出如下页面,选择允许后,就可以接收后端推送的通知消息了:
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 }