评论

使用JAVA代码实现发送订阅消息

使用java发送订阅消息

1、微信小程序

1、使用Java发送订阅消息

效果图

分为以下几个步骤:

  1. 登录微信公众平台点击订阅消息,然后申请模板
  2. 在微信小程序端代码中编写申请模板的代码
  3. 编写后端代码

1、申请模板

2、小程序端代码

以下是一段简单获取模板授权的代码,想要方法的详细介绍可以参考官网

 shouquan() {
                 wx.requestSubscribeMessage({
                     tmplIds: ['Y-jNq6iDA3o6bn89Ulrp7YNReBxtJhOBGQ-CiD9t6vs'],
                     success(res) {
                         console.log("授权成功", res)
                     },
                     fail(res) {
                         console.log("授权失败", res)
                     }
                 })
             },

3、后端代码部分

这里只是简单记录基本的操作流程,后期还要优化代码结构

  1. 首先推荐使用开源的SDK(com.github.binarywang),它的GitHub网址,里面封装的方法十分好用。
  2. 去微信公众平台获取你的appid和密钥
  3. 接下来就开始编写后端代码的流程
1、导入maven
  <dependency>
             <groupId>com.github.binarywang</groupId>
             <artifactId>weixin-java-miniapp</artifactId>
             <version>4.4.0</version>
         </dependency>

这里我是创建了一个controller来响应请求,发送订阅消息

2、获取access_token

使用WxMaDefaultConfigImpl创建一个对象,然后给对象赋上appId和appSecret,再调用wxMaService.setWxMaConfig()设置配置信息。此时wxMaService对象里就有我们需要的access token

小提示:

我在使用@Autowired注入wxMaService对象时,idea提示我没有wxMaService对象。所以我们要去自定义bean,然后让spring容器加载它。代码如下(可以在spring boot启动类中定义)

  @Bean
     public WxMaService wxMaService() {
         return new WxMaServiceImpl();
     }

官方文档获取access token

         //注入wxMaService对象
         @Autowired
         private WxMaService wxMaService;
 ​
         String appId = "your appid";
         String appSecret = "your appSecret";
 ​
         //开始获取 access token
         WxMaDefaultConfigImpl wxMaDefaultConfig1 = new WxMaDefaultConfigImpl();
         wxMaDefaultConfig1.setAppid(appId);
         wxMaDefaultConfig1.setSecret(appSecret);
         wxMaService.setWxMaConfig(wxMaDefaultConfig1);
 ​
         try {
             // 获取 access token
              accessToken = wxMaService.getAccessToken();
             if (accessToken != null) {
                 System.out.println("Access token: " + accessToken);
             } else {
                 System.out.println("Failed to fetch access token.");
             }
         } catch (WxErrorException e) {
             e.printStackTrace();
         }
3、编写发送的模板信息

这里发送的文本是一对key-value的形式,key要和微信公众平台中的key一致,例如我的是这样

         ArrayList<WxMaSubscribeMessage.MsgData> list = new ArrayList<>();
 ​
         WxMaSubscribeMessage.MsgData msgData1 = new WxMaSubscribeMessage.MsgData();
         msgData1.setName("character_string1");
         msgData1.setValue("R202102260012");
 ​
         WxMaSubscribeMessage.MsgData msgData2 = new WxMaSubscribeMessage.MsgData();
         msgData2.setName("thing2");
         msgData2.setValue("测试设备A");
 ​
         WxMaSubscribeMessage.MsgData msgData3 = new WxMaSubscribeMessage.MsgData();
         msgData3.setName("thing3");
         msgData3.setValue("xx市xx区xx路xx号");
 ​
         WxMaSubscribeMessage.MsgData msgData4 = new WxMaSubscribeMessage.MsgData();
         msgData4.setName("thing4");
         msgData4.setValue("张三(13333333333)");
 ​
         list.add(msgData1);
         list.add(msgData2);
         list.add(msgData3);
         list.add(msgData4);
 ​
         WxMaSubscribeMessage wxMaSubscribeMessage = new WxMaSubscribeMessage();
         wxMaSubscribeMessage.setData(list);
         //设置为中文字体
         wxMaSubscribeMessage.setLang(WxMaConstants.MiniProgramLang.ZH_CN);
         //点击后要跳转的页面
         wxMaSubscribeMessage.setPage("pages/work/application/application");
         //订阅的模板id
         wxMaSubscribeMessage.setTemplateId("Y-jNq6iDA3o6bn89Ulrp7YNReBxtJhOBGQ-CiD9t6vs");
         //用户的openid
         wxMaSubscribeMessage.setToUser("openid");
4、发送消息

在执行发送消息的代码之前,我们需要将第二步中获取的access_token给到 wxMaService对象

    //设置wxMaService对象的属性
         WxMaDefaultConfigImpl wxMaDefaultConfig = new WxMaDefaultConfigImpl();
         wxMaDefaultConfig.setAppid(appId);
         wxMaDefaultConfig.setSecret(appSecret);
         wxMaDefaultConfig.setToken(accessToken);
 ​
         wxMaService.addConfig(appId,wxMaDefaultConfig);
 ​
  //发送订阅消息
         wxMaService.getMsgService().sendSubscribeMsg(wxMaSubscribeMessage);
5、完整代码

controller层

 @RestController
 @RequestMapping("/send")
 public class SendMessage {
 ​
     @Autowired
     private WxMaService wxMaService;
 ​
     //保存 access token
     private String accessToken;
 ​
     @PostMapping("/mes")
     public void sendMes() throws WxErrorException {
         String appId = "your appId";
         String appSecret = "your appSecret";
 ​
         //开始获取 access token
         WxMaDefaultConfigImpl wxMaDefaultConfig1 = new WxMaDefaultConfigImpl();
         wxMaDefaultConfig1.setAppid(appId);
         wxMaDefaultConfig1.setSecret(appSecret);
         wxMaService.setWxMaConfig(wxMaDefaultConfig1);
 ​
         try {
             // 获取 access token
              accessToken = wxMaService.getAccessToken();
             if (accessToken != null) {
                 System.out.println("Access token: " + accessToken);
             } else {
                 System.out.println("Failed to fetch access token.");
             }
         } catch (WxErrorException e) {
             e.printStackTrace();
         }
 ​
 ​
 ​
         //设置wxMaService对象的属性
         WxMaDefaultConfigImpl wxMaDefaultConfig = new WxMaDefaultConfigImpl();
         wxMaDefaultConfig.setAppid(appId);
         wxMaDefaultConfig.setSecret(appSecret);
         wxMaDefaultConfig.setToken(accessToken);
 ​
         wxMaService.addConfig(appId,wxMaDefaultConfig);
 ​
 ​
 ​
         ArrayList<WxMaSubscribeMessage.MsgData> list = new ArrayList<>();
 ​
         WxMaSubscribeMessage.MsgData msgData1 = new WxMaSubscribeMessage.MsgData();
         msgData1.setName("character_string1");
         msgData1.setValue("R202102260012");
 ​
         WxMaSubscribeMessage.MsgData msgData2 = new WxMaSubscribeMessage.MsgData();
         msgData2.setName("thing2");
         msgData2.setValue("测试设备A");
 ​
         WxMaSubscribeMessage.MsgData msgData3 = new WxMaSubscribeMessage.MsgData();
         msgData3.setName("thing3");
         msgData3.setValue("xx市xx区xx路xx号");
 ​
         WxMaSubscribeMessage.MsgData msgData4 = new WxMaSubscribeMessage.MsgData();
         msgData4.setName("thing4");
         msgData4.setValue("张三(13333333333)");
 ​
         list.add(msgData1);
         list.add(msgData2);
         list.add(msgData3);
         list.add(msgData4);
 ​
         WxMaSubscribeMessage wxMaSubscribeMessage = new WxMaSubscribeMessage();
         wxMaSubscribeMessage.setData(list);
         //设置为中文字体
         wxMaSubscribeMessage.setLang(WxMaConstants.MiniProgramLang.ZH_CN);
         //点击后要跳转的页面
         wxMaSubscribeMessage.setPage("pages/work/application/application");
         //订阅的模板id
         wxMaSubscribeMessage.setTemplateId("Y-jNq6iDA3o6bn89Ulrp7YNReBxtJhOBGQ-CiD9t6vs");
         //用户的openid
         wxMaSubscribeMessage.setToUser("openid");
 ​
 ​
         //发送订阅消息
         wxMaService.getMsgService().sendSubscribeMsg(wxMaSubscribeMessage);
 ​
     }
 }


点赞 0
收藏
评论
登录 后发表内容