springboot整合微信公众号实现模版消息推送

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

🎏:你只管努力,剩下的交给时间

🏠 :小破站

前言

在如今的互联网时代,微信已成为人们日常生活中不可或缺的一部分。微信公众号作为企业与用户互动的重要渠道,模版消息推送功能更是提升用户体验的关键之一。然而,对于很多开发者来说,如何将这一功能集成到现有的Spring Boot项目中,可能是一大挑战。本文将带你一步步实现这一目标,让你在实际开发中得心应手。

前提工作

1 、首先保证你的公众号认证为服务号,而非订阅号

image-20240704144921293

2、白名单中加入了自己平台的ip

image-20240704145012860

3 、已经设置了模版消息

image-20240704145108614

整合springboot

配置

对于公众号的相关信息,可以存到数据库中的相关配置表中,也可以放到yaml中

# application.yml
wechat:
  app-id: 你的微信公众号appid
  app-secret: 你的微信公众号secret
  token-url: https://api.weixin.qq.com/cgi-bin/token
  token-grant-type: client_credential
  xcx-app-id: 你的小程序appid
  template_id: 模版id
  template_url: https://api.weixin.qq.com/cgi-bin/message/template/send

实现逻辑

基础

因为项目实现属于gs项目,所以没法贴代码,这里给大家提供一个基本的思路

这里我们仅仅使用了http工具进行调用,简单的例子说明

/**
* description: 获取公众号access_token
*
* @return java.lang.String
*/
public static String getWechatAccessToken() {
		// 这里参数代码省略
  try {
    // 如果redis中有,那么直接从redis拿
    if (haveToken) {
      accessToken = JedisUtil.getJson(tokenKey);
    } else {
      // 获取access_token
      HttpResponse execute = HttpRequest.get(tokenRequestUrl).form(map).execute();
      JSONObject jsonObject = JSON.parseObject(execute.body());
      String returnAccessToken = jsonObject.getString("access_token");

      if (StrUtil.isBlank(returnAccessToken)) {
        throw new CustomException("获取微信公众号access_token失败");
      }
      JedisUtil.setJson(tokenKey, returnAccessToken, 7100);
      accessToken = returnAccessToken;
    }
  } catch (Exception e) {
    throw new CustomException("获取微信公众号access_token失败");
  }
  return accessToken;
}

上面的获取access_token使用了hutool工具类中的HttpRequest,对于get类型,最后的form中我们只需要加入参数map即可

1、要获取access_token

获取access_token官方文档
image-20240704150723758

代码中实现注意点

1、对于获取access_token来说因为它的返回是有过期时间的,所以我们没必要每次都去调用,比如可以把他放到redis中,可以少去频繁的调用

2、好多操作的前置操作都是获取这个token,所以可以把它作为一个通用方法

3、在本地环境调用的时候,会出现白名单问题,所以日志的输出还是很有必要性(本地ip会频繁变化)

2、推送模版信息给用户

推送模版信息给用户官方文档

入参说明:

{
  "touser":"OPENID",
  "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
  "url":"http://weixin.qq.com/download",  
  "miniprogram":{
    "appid":"xiaochengxuappid12345",
    "pagepath":"index?foo=bar"
  },
  "client_msg_id":"MSG_000001",
  "data":{

    "keyword1":{
      "value":"巧克力"
    },
    "keyword2": {
      "value":"39.8元"
    },
    "keyword3": {
      "value":"2014年9月22日"
    }
  }
}

image-20240704154556997

注意点📢:

1、当前版本不可以再设置字体颜色

2、当前版本不可以自定变量名称,也就是在当时设置模版的时候会自动生成参数。

3、对于data中的参数要注意,每一种参数都会有一定的标签,所谓的标签比如字符限制,时间类型

4、pagepath为跳转到的小程序页面。后端在推送的时候可以拼接路由+id

5、常见报错为47003==》errmsg:argument invalid! data.thing11.value is empty,参数问题,首先看类型,其次看值。

6、涉及到日期的时候,可以直接用阿里的json转JSON.toJSONStringWithDateFormat(pullMap, "yyyy-MM-dd HH:mm:ss");

3、用户在公众号点击跳转到小程序
要集成微信公众号消息推送功能,可以使用Spring Boot和WeChat SDK。以下是一些步骤: 1. 在微信公众平台上创建一个公众号,并获得AppID和AppSecret。 2. 在Spring Boot项目中添加WeChat SDK依赖项。 3. 创建一个Controller类来处理微信服务器发送过来的请求,比如验证URL有效性和处理用户消息。 4. 配置服务器URL和Token,并在微信公众平台上进行验证。 5. 使用SDK提供的方法实现消息的回复和推送。 以下是一个简单的代码示例: ```java @RestController @RequestMapping("/wechat") public class WeChatController { @Autowired private WxMpService wxMpService; @GetMapping(produces = "text/plain;charset=utf-8") public String validate(@RequestParam(name = "signature") String signature, @RequestParam(name = "timestamp") String timestamp, @RequestParam(name = "nonce") String nonce, @RequestParam(name = "echostr") String echostr) { if (wxMpService.checkSignature(timestamp, nonce, signature)) { return echostr; } return "error"; } @PostMapping(produces = "application/xml; charset=UTF-8") public String handleMessage(@RequestBody String requestBody, @RequestParam(name = "signature") String signature, @RequestParam(name = "timestamp") String timestamp, @RequestParam(name = "nonce") String nonce, @RequestParam(name = "openid") String openid) { // 处理用户发送的消息 WxMpXmlMessage wxMessage; try { wxMessage = WxMpXmlMessage.fromXml(requestBody); } catch (Exception e) { return "error"; } // 构造回复消息 WxMpXmlOutMessage outMessage = WxMpXmlOutMessage.TEXT() .content("你好,欢迎关注我的公众号!") .fromUser(wxMessage.getToUser()) .toUser(wxMessage.getFromUser()) .build(); return outMessage.toXml(); } } ``` 在上面的代码中,我们首先验证了微信服务器发送过来的请求是否有效。如果有效,我们返回echostr作为响应。接下来,我们处理用户发送的消息,并构造一个回复消息。最后,我们将回复消息作为响应返回给微信服务器。 请注意,我们使用了WxMpService类提供的方法来验证签名、解析消息和构造回复消息。要使用这个类,我们需要在Spring Boot项目的配置文件中添加以下内容: ``` # WeChat SDK wx.mp.appId=<your app ID> wx.mp.secret=<your app secret> wx.mp.token=<your token> wx.mp.aesKey=<your AES key> ``` 在上面的代码中,我们使用了WxMpXmlOutMessage.TEXT()方法来构造文本消息的回复。如果你需要回复其他类型的消息,比如图文消息或音频消息,请查看WeChat SDK的文档。 最后,我们需要在微信公众平台上配置服务器URL和Token。可以在公众号的基本配置页面中找到这些设置。在配置完成后,我们可以向公众号发送消息,然后观察是否收到了回复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只牛博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值