当前位置:   article > 正文

微信公众号 - Java推送小程序订阅消息给用户_java 通过微信公众号发送订阅通知

java 通过微信公众号发送订阅通知

不啰嗦,我们直接开始!

本文使用体验版小程序进行调试。

一、开发前小程序准备:

1、登录微信公众平台

点开下面链接,使用微信扫码

微信公众平台

然后选择一个小程序并登录

2、在小程序后台找到Appid、AppSecret、Token、EncodingAESKey等参数

AppSecret忘记了可以自行重置

往下翻,在消息推送这儿能看到Token、EncodingAESKey、数据格式

 3、选用订阅消息模板,找到模板ID

在"公共模板库"选用一个模板

"公共模板库"没有合适的话,可以在最后一页进行申请,这里就不进行申请了

 选用模板后可以自行勾选关键词,没有合适的关键词也可以申请

 选好模板后在“我的模板”中就能看到了,同时记住模板ID

 二、小程序上添加授权弹窗

官方文档

注意低版本订阅消息api必须在点击事件中触发,一般可做成显示一个按钮,友好的提示用户,然后再让用户点击按钮去手动触发订阅。

我这里就随便找了个页面在一个点击事件上添加了授权弹窗,不要纠结命名,页面是前端做的(疯狂甩锅ing)。

事件定义

 微信开发者工具中的效果

真机效果

 三、引用第三方sdk,集成订阅消息推送

 我这儿是集成订阅消息推送到已有的系统消息中,通过配置是否发送订阅消息进行分发,具体实现各工程不一样,我这儿就不展示了。

1、pom引入第三方sdk

引入第三方sdk,我们就只需要封装好消息发送的核心代码,微信相关的token及其他信息的维护就交给sdk,我们不用关注(但是原理要知道)。

sdk的作者:GitHub

 <!--微信小程序三方sdk-->
<dependency>
    <groupId>com.github.binarywang</groupId>
    <artifactId>weixin-java-miniapp</artifactId>
    <version>4.1.0</version>
</dependency>

 2、核心代码(有注释)

  1. import cn.binarywang.wx.miniapp.api.WxMaService;
  2. import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
  3. import cn.binarywang.wx.miniapp.bean.WxMaSubscribeMessage;
  4. import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
  5. import com.coyee.core.log.Logger;
  6. import org.springframework.stereotype.Component;
  7. import java.util.ArrayList;
  8. @Component
  9. public class WeChatMessageHelperTest {
  10. private static WxMaService wxMaService = new WxMaServiceImpl();
  11. /**
  12. * 发送小程序订阅消息
  13. * @param appletsSubType 小程序类型(developer为开发版、trial为体验版、formal为正式版)
  14. * @param appSubTempId 订阅消息模板id
  15. * @param appSubPagePath 跳转小程序地址
  16. * @param appletsAppid 小程序appId
  17. * @param appletsSecret 小程序secret
  18. * @param appletsSubToken 小程序token
  19. * @param appletsSubAesKey 小程序EncodingAESKey
  20. * @param appletsSubDataFormat 数据格式
  21. * @param wxMaSubMsgList 消息列表
  22. * @param userIds 接收用户id
  23. * @return void
  24. * @version V1.0
  25. * modify history
  26. */
  27. public static void sendWechatAppSubMessage(String appletsSubType, String appSubTempId, String appSubPagePath, String appletsAppid, String appletsSecret, String appletsSubToken, String appletsSubAesKey, String appletsSubDataFormat, ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubMsgList, String... userIds) throws Exception {
  28. /*
  29. // wxMaSubMsgList组装示例,在业务里组装好,再调用系统消息发送工具,系统消息判断是否需要发送小程序订阅消息进行分发,此处不做展示
  30. ArrayList<WxMaSubscribeMessage.MsgData> wxMaSubscribeData = new ArrayList<>();
  31. WxMaSubscribeMessage.MsgData characterString1 = new WxMaSubscribeMessage.MsgData();
  32. characterString1.setName("character_string1");
  33. characterString1.setValue("DR15325419846198615651");
  34. wxMaSubscribeData.add(characterString1);
  35. WxMaSubscribeMessage.MsgData thing3 = new WxMaSubscribeMessage.MsgData();
  36. thing3.setName("thing3");
  37. thing3.setValue("请XXXXXXXX");
  38. wxMaSubscribeData.add(thing3);
  39. WxMaSubscribeMessage.MsgData time5 = new WxMaSubscribeMessage.MsgData();
  40. time5.setName("time5");
  41. time5.setValue(DateUtil.format(new Date(),DateUtil.DATE_TIME_FORMAT));
  42. wxMaSubscribeData.add(time5);
  43. */
  44. WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
  45. // 小程序appId
  46. config.setAppid(appletsAppid);
  47. // 小程序secret
  48. config.setSecret(appletsSecret);
  49. // 小程序token
  50. config.setToken(appletsSubToken);
  51. // 小程序EncodingAESKey
  52. config.setAesKey(appletsSubAesKey);
  53. // 数据格式
  54. config.setMsgDataFormat(appletsSubDataFormat);
  55. wxMaService.setWxMaConfig(config);
  56. for (String userId : userIds) {
  57. // TODO:根据用户id获取OpenId,测试时写死
  58. WxMaSubscribeMessage subscribeMessage = new WxMaSubscribeMessage();
  59. // 要推送的用户openid
  60. subscribeMessage.setToUser("openId");
  61. // 小程序类型(developer为开发版、trial为体验版、formal为正式版),默认为formal(正式版)
  62. subscribeMessage.setMiniprogramState(appletsSubType);
  63. // 订阅消息模板id
  64. subscribeMessage.setTemplateId(appSubTempId);
  65. // 跳转小程序地址
  66. subscribeMessage.setPage(appSubPagePath);
  67. // 消息列表(组装示例请看方法开始注释部分)
  68. subscribeMessage.setData(wxMaSubMsgList);
  69. try {
  70. // 发送订阅消息
  71. wxMaService.getMsgService().sendSubscribeMsg(subscribeMessage);
  72. } catch (Exception e) {
  73. Logger.error("微信小程序订阅消息推送失败,接收userId: " + userId, e);
  74. }
  75. }
  76. }
  77. }

订阅消息每个参数都有相关限制,具体以官网的为准:订阅消息参数值内容限制说明

3、触发消息推送,查看推送结果

点击“进入小程序查看”即可进入代码里配置的小程序的内置页面

 官方文档:发送微信小程序订阅消息

参考文章:

不啰嗦,文章结束,期待三连!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/330279
推荐阅读
相关标签
  

闽ICP备14008679号