赞
踩
首先申请一个公众号订阅号(个人测试账号)企业可申请服务号
在开发者工具里面申请一个测试账号
url 提供自己服务器地址+通信接口路由 或者在本人博客资源下载个natapp 内网穿透有工具 代理个http地址 我用的内网穿透
token 随便填一个主要用来跟微信服务器测试通信正常
//这个token要跟你填的一致
private static final String TOKEN = "1341321a2s1d23a1s454"
//下面方法就是上面url 里面的IP加路由
- @GetMapping("check/token")
- public String validate(String signature,String timestamp,String nonce,String echostr){
- // 1. 将token、timestamp、nonce三个参数进行字典序排序
- String[] arr = {timestamp, nonce, TOKEN};
- Arrays.sort(arr);
- // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
- StringBuilder sb = new StringBuilder();
- for (String temp : arr) {
- sb.append(temp);
- }
- // 这里利用了hutool的加密工具类
- String sha1 = SecureUtil.sha1(sb.toString());
- // 3. 加密后的字符串与signature对比,如果相同则该请求来源于微信,原样返回echostr
- if (sha1.equals(signature)){
- return echostr;
- }
- // 接入失败
- return null;
- }
连接成功后配置订阅用户及模板
扫描二维码会得到用户的openId 一会发送消息用到 模板分为固定内容跟模板内容 1为固定内容 23为动态参数内容
接下来代码接入
pom引入
<!--微信模版消息推送三方sdk--> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>3.3.0</version> </dependency>
//这个sdk比较方便方法 接口路由都封装更好的 用起来更方便
下面代码环节
1实体
授权实体 就是测试号的账号 跟key
- @Data
- public class WxAuthorization {
-
- private String appId;
-
- private String appSecret;
-
- }
2参数实体 就是发送需要的参数
- @Data
- public class WxMsgData {
- // 接收人openId
- private String receiver;
-
- // 消息模板code
- private String templateCode;
- // 跳转url
- private String url;
- // 模板参数
- private Map<String, Object> param;
-
- }
调用
- private void sendMsg(WxAuthorization wxAuthorization, WxMsgData wxMsgData) {
- WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
- wxStorage.setAppId(wxAuthorization.getAppId());
- wxStorage.setSecret(wxAuthorization.getAppSecret());
- WxMpService wxMpService = new WxMpServiceImpl();
- wxMpService.setWxMpConfigStorage(wxStorage);
- WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
- .toUser(wxMsgData.getReceiver())
- .templateId(wxMsgData.getTemplateCode())
- .url(wxMsgData.getUrl())
- .build();
- if (wxMsgData.getParam()!=null) {
- for (Map.Entry<String, Object> entry : wxMsgData.getParam().entrySet()) {
- templateMessage.addData(new WxMpTemplateData(entry.getKey(), (String) entry.getValue(), "#173177"));
- }
- }
- try {
- String s = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
- } catch (WxErrorException e) {
- e.printStackTrace();
- }
- }
测试调用
- @PostMapping("sendMessage")
- public String handleMessage(){
-
- WxAuthorization wxAuthorization = new WxAuthorization();
- wxAuthorization.setAppId("wxce11edb1b0c5e158");
- wxAuthorization.setAppSecret("62195d67ae1fa8b0b15aaaab47ce507c");
- WxMsgData wxMsgData = new WxMsgData();
- wxMsgData.setReceiver("oOM-e52ersdi7a4wZTOQHUQOwGuw");
- wxMsgData.setTemplateCode("AYZc280-hh7QeO5eM8Usl7SlD5wzQ_I8tQq1e9HlmhQ");
- wxMsgData.setUrl("https://www.baidu.com/");
- Map<String,Object> map = new HashMap<>();
- map.put("username","张三");
- map.put("projectName","世纪广场");
- map.put("deviceSN","10086");
- wxMsgData.setParam(map);
- sendMsg(wxAuthorization,wxMsgData);
- return "success";
- }
这个url ip 加端口必须是代理过的 或者服务器的 本地的不行
效果示例
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。