云计算百科
云计算领域专业知识百科平台

《一文搞懂微信小程序 + 公众号消息推送(后端实现)》

一、先搞清楚:微信有几种“推送”?

很多人一开始就混乱。

其实微信消息推送主要分两类:

类型使用场景
小程序订阅消息 用户触发行为后推送
公众号模板消息 公众号粉丝通知

注意:

  • 小程序不再支持“无限模板消息”

  • 必须使用「订阅消息」

  • 用户必须主动授权一次

二、小程序订阅消息推送流程

1️⃣ 整体流程图(逻辑)

小程序端点击按钮         ↓ wx.requestSubscribeMessage         ↓ 用户同意         ↓ 前端把 openid 传给后端         ↓ 后端获取 access_token         ↓ 调用微信接口推送

2️⃣ Java 获取 access_token

接口地址:

https://api.weixin.qq.com/cgi-bin/token

Java 示例

public String getAccessToken() {
String url = "https://api.weixin.qq.com/cgi-bin/token"
+ "?grant_type=client_credential"
+ "&appid=" + appId
+ "&secret=" + secret;

RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);

JSONObject jsonObject = JSON.parseObject(result);
return jsonObject.getString("access_token");
}

⚠ access_token 有效期 7200 秒 ⚠ 必须缓存到 Redis

3️⃣ 推送订阅消息

接口地址:

https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN

请求体结构:

{
"touser": "OPENID",
"template_id": "模板ID",
"data": {
"thing1": {
"value": "订单创建成功"
}
}
}

Java 发送示例:

public void sendSubscribeMessage(String openid) {

String accessToken = getAccessToken();

String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;

Map<String, Object> body = new HashMap<>();
body.put("touser", openid);
body.put("template_id", "你的模板ID");

Map<String, Object> data = new HashMap<>();
data.put("thing1", Map.of("value", "订单创建成功"));
body.put("data", data);

RestTemplate restTemplate = new RestTemplate();
restTemplate.postForObject(url, body, String.class);
}

三、公众号模板消息推送

适用于:

  • 订单通知

  • 物流通知

  • 会员提醒

接口地址:

https://api.weixin.qq.com/cgi-bin/message/template/send

区别:

小程序公众号
subscribe/send template/send
必须用户触发 只要关注即可

四、企业级优化方案

1️⃣ access_token 必须缓存

redisTemplate.opsForValue().set(
"wechat:access_token",
token,
7000,
TimeUnit.SECONDS
);

不要每次都请求微信接口。

2️⃣ 封装成统一微信工具类

WechatService
├── getAccessToken()
├── sendMiniProgramMsg()
├── sendOfficialAccountMsg()

3️⃣ 异步发送(避免接口阻塞)

@Async
public void sendMessageAsync(…) {

}

五、常见错误汇总

错误码原因
40001 access_token 过期
43101 用户未授权订阅
47003 模板参数错误

六、总结

实现微信推送其实就三步:

  • 获取 access_token

  • 获取 openid

  • 调用接口发送消息

  • 真正难的是:

    • 授权流程

    • 模板配置

    • 缓存管理

    • 重试机制

    很多人觉得微信推送“难”,其实难的不是代码,而是对流程的理解,当你真正搞懂:

    • access_token 的生命周期

    • 用户授权机制

    • 模板参数结构

    • 服务端缓存与安全控制

    你会发现,整个对接流程其实非常清晰。

    技术成长的本质不是写多少代码,而是理解背后的机制。希望这篇文章能帮你少踩几个坑,在对接 微信公众平台 时更加从容。

    我们下篇继续拆解更多企业级实战场景。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 《一文搞懂微信小程序 + 公众号消息推送(后端实现)》
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!