1、微信小程序
1、使用Java发送订阅消息
效果图
分为以下几个步骤:
- 登录微信公众平台点击订阅消息,然后申请模板
- 在微信小程序端代码中编写申请模板的代码
- 编写后端代码
1、申请模板
2、小程序端代码
以下是一段简单获取模板授权的代码,想要方法的详细介绍可以参考官网
shouquan() {
wx.requestSubscribeMessage({
tmplIds: ['Y-jNq6iDA3o6bn89Ulrp7YNReBxtJhOBGQ-CiD9t6vs'],
success(res) {
console.log("授权成功", res)
},
fail(res) {
console.log("授权失败", res)
}
})
},
3、后端代码部分
这里只是简单记录基本的操作流程,后期还要优化代码结构
- 首先推荐使用开源的SDK(com.github.binarywang),它的GitHub网址,里面封装的方法十分好用。
- 去微信公众平台获取你的appid和密钥
- 接下来就开始编写后端代码的流程
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();
}
//注入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);
}
}