一、先搞清楚:微信有几种“推送”?
很多人一开始就混乱。
其实微信消息推送主要分两类:
| 小程序订阅消息 | 用户触发行为后推送 |
| 公众号模板消息 | 公众号粉丝通知 |
注意:
-
小程序不再支持“无限模板消息”
-
必须使用「订阅消息」
-
用户必须主动授权一次
二、小程序订阅消息推送流程
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 的生命周期
-
用户授权机制
-
模板参数结构
-
服务端缓存与安全控制
你会发现,整个对接流程其实非常清晰。
技术成长的本质不是写多少代码,而是理解背后的机制。希望这篇文章能帮你少踩几个坑,在对接 微信公众平台 时更加从容。
我们下篇继续拆解更多企业级实战场景。
网硕互联帮助中心








评论前必须登录!
注册