当前位置:   article > 正文

微信公众号发送消息 Java_java微信公众号发消息给用户

java微信公众号发消息给用户

首先申请一个公众号订阅号(个人测试账号)企业可申请服务号

在开发者工具里面申请一个测试账号

  url 提供自己服务器地址+通信接口路由  或者在本人博客资源下载个natapp 内网穿透有工具 代理个http地址 我用的内网穿透

token 随便填一个主要用来跟微信服务器测试通信正常

//这个token要跟你填的一致

private static final String TOKEN = "1341321a2s1d23a1s454"

//下面方法就是上面url 里面的IP加路由

  1. @GetMapping("check/token")
  2. public String validate(String signature,String timestamp,String nonce,String echostr){
  3. // 1. 将token、timestamp、nonce三个参数进行字典序排序
  4. String[] arr = {timestamp, nonce, TOKEN};
  5. Arrays.sort(arr);
  6. // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
  7. StringBuilder sb = new StringBuilder();
  8. for (String temp : arr) {
  9. sb.append(temp);
  10. }
  11. // 这里利用了hutool的加密工具类
  12. String sha1 = SecureUtil.sha1(sb.toString());
  13. // 3. 加密后的字符串与signature对比,如果相同则该请求来源于微信,原样返回echostr
  14. if (sha1.equals(signature)){
  15. return echostr;
  16. }
  17. // 接入失败
  18. return null;
  19. }

连接成功后配置订阅用户及模板

扫描二维码会得到用户的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

  1. @Data
  2. public class WxAuthorization {
  3. private String appId;
  4. private String appSecret;
  5. }

2参数实体 就是发送需要的参数

  1. @Data
  2. public class WxMsgData {
  3. // 接收人openId
  4. private String receiver;
  5. // 消息模板code
  6. private String templateCode;
  7. // 跳转url
  8. private String url;
  9. // 模板参数
  10. private Map<String, Object> param;
  11. }

调用

  1. private void sendMsg(WxAuthorization wxAuthorization, WxMsgData wxMsgData) {
  2. WxMpInMemoryConfigStorage wxStorage = new WxMpInMemoryConfigStorage();
  3. wxStorage.setAppId(wxAuthorization.getAppId());
  4. wxStorage.setSecret(wxAuthorization.getAppSecret());
  5. WxMpService wxMpService = new WxMpServiceImpl();
  6. wxMpService.setWxMpConfigStorage(wxStorage);
  7. WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
  8. .toUser(wxMsgData.getReceiver())
  9. .templateId(wxMsgData.getTemplateCode())
  10. .url(wxMsgData.getUrl())
  11. .build();
  12. if (wxMsgData.getParam()!=null) {
  13. for (Map.Entry<String, Object> entry : wxMsgData.getParam().entrySet()) {
  14. templateMessage.addData(new WxMpTemplateData(entry.getKey(), (String) entry.getValue(), "#173177"));
  15. }
  16. }
  17. try {
  18. String s = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
  19. } catch (WxErrorException e) {
  20. e.printStackTrace();
  21. }
  22. }

测试调用

  1. @PostMapping("sendMessage")
  2. public String handleMessage(){
  3. WxAuthorization wxAuthorization = new WxAuthorization();
  4. wxAuthorization.setAppId("wxce11edb1b0c5e158");
  5. wxAuthorization.setAppSecret("62195d67ae1fa8b0b15aaaab47ce507c");
  6. WxMsgData wxMsgData = new WxMsgData();
  7. wxMsgData.setReceiver("oOM-e52ersdi7a4wZTOQHUQOwGuw");
  8. wxMsgData.setTemplateCode("AYZc280-hh7QeO5eM8Usl7SlD5wzQ_I8tQq1e9HlmhQ");
  9. wxMsgData.setUrl("https://www.baidu.com/");
  10. Map<String,Object> map = new HashMap<>();
  11. map.put("username","张三");
  12. map.put("projectName","世纪广场");
  13. map.put("deviceSN","10086");
  14. wxMsgData.setParam(map);
  15. sendMsg(wxAuthorization,wxMsgData);
  16. return "success";
  17. }

这个url ip 加端口必须是代理过的 或者服务器的 本地的不行

效果示例

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

闽ICP备14008679号