小程序订阅消息推送
2021/12/16 17:13:27
本文主要是介绍小程序订阅消息推送,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
近期写了个消息推送,代码挺简单的,分享一下!
前期准备工作:
- 我前面还写了一篇文章是关于小程序消息推送配置的,可以去查阅一下就不多说了
- 准备一下小程序的appid和secret
- 还有消息订阅的模板
直接上代码吧
实体类
@Data @Accessors(chain = true) public class WxPushMessageVo implements Serializable { /** * 推送用户openid */ private String touser; /** * 模板id */ private String template_id; /** * 小程序跳转页面 */ private String page; /** * 数据模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } } */ private Map<String,TemplateData> data; } @Data @Accessors(chain = true) public class TemplateData implements Serializable { private String value; }
业务代码
/** * 获取小程序access_token * appid和appsecret到小程序后台获取,当然也可以让小程序开发人员给你传过来 */ public String getAccess_token() { //获取access_token String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" + "&appid=" + "" + "&secret=" + ""; String json = restTemplate.getForObject(url, String.class); JSONObject jsonObject = JSON.parseObject(json); Object access_token = jsonObject.get("access_token"); return access_token.toString(); } public void wxPushMessage(String openid) { try { //建议把accessToken存到redis里,而且这个东西会过期的,我就不多赘述了 String accessToken = getAccess_token(); //发布订阅消息url路径 String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken; WxPushMessageVo wxPushMessageVo = new WxPushMessageVo(); wxPushMessageVo.setTouser(openid).setTemplate_id("模板id").setPage("index"); Map<String, TemplateData> data = new HashMap<>(2); TemplateData thing1 = new TemplateData(); //这里根据你们定义的模板字段来填写值,可以看一下文档的接口 thing1.setValue(""); data.put("thing1", thing1); TemplateData time2 = new TemplateData(); time2.setValue(DateUtils.getTime()); data.put("time2", time2); wxPushMessageVo.setData(data); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, wxPushMessageVo, String.class); System.out.println("小程序推送消息返回信息:" + responseEntity.getBody()); Map<String, Object> map = objectMapper.readValue(responseEntity.getBody(), Map.class); int errcode = (int) map.get("errcode"); //我这里做了一个返回结果的判断,主要是为了防止accessToken过期导致消息推送失败 if (errcode == 40001 || errcode == 42001) { log.info("消息订阅的accessToken到期了"); //可以自己写一个方法来重新生成新的accessToken,不多赘述 setGloAccessToken(); wxPushMessage(openid); } } catch (Exception e) { e.printStackTrace(); } }
基本上就可以了,测试一下就行,前提得是用户同意接收订阅消息哈!
这篇关于小程序订阅消息推送的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-13微信小程序如何封装接口域名?-icode9专业技术文章分享
- 2024-11-13如何在微信小程序中实现直传功能?-icode9专业技术文章分享
- 2024-11-13如何在小程序的地图组件中添加标记和文字?-icode9专业技术文章分享
- 2024-11-13在微信小程序的地图组件中如何实现自定义标记和气泡?-icode9专业技术文章分享
- 2024-11-01微信小程序教程:零基础入门到实战
- 2024-11-01微信小程序全栈教程:从入门到实践
- 2024-10-31微信小程序怎么实现关注公众号功能-icode9专业技术文章分享
- 2024-10-30微信小程序cover-view,支持bindtap吗-icode9专业技术文章分享
- 2024-10-30微信小程序的cover-image支持bindtap吗-icode9专业技术文章分享
- 2024-10-30微信小程序web-view怎么设置高度?-icode9专业技术文章分享