小程序消息推送配置的核心不是“装个插件就能发”,而是先在微信公众平台申请订阅消息模板,再让用户点击按钮授权,最后通过后端接口在允许的额度内触达用户。 基础流程免费、接口公开、调试门槛不高,但多数失败都发生在授权时机、模板字段和一次性额度三个环节。
配置前先分清:订阅消息、统一服务消息、客服消息到底用哪个
很多开发者一上来就找“消息推送”按钮,结果把三个功能混在一起。订阅消息是当前小程序最常用的主动触达方式,用户在小程序内点击授权后,你可以通过接口向该用户发送一条模板消息。统一服务消息主要用来向同一用户关注的公众号下发模板消息,不是直接推送到小程序内部。客服消息则是在用户进入客服会话后48小时内,可以推送有限条数。
订阅消息推送怎么开通
这个环节不需要写代码,但必须先把后台配置做对。
第一步,登录微信公众平台,进入小程序管理后台。
第二步,在左侧菜单找到“功能”下的“订阅消息”。
第三步,点击“公共模板库”,按你的服务类目筛选模板,例如做电商就找“订单支付成功通知”“发货提醒”,做预约就找“预约成功通知”。
第四步,添加模板后,系统会生成一串模板ID,类似wxxxxxxxxxxxxxxxx,这个模板ID要写进前端和后端代码里。
注意:个人主体小程序可选模板较少,企业主体类目覆盖更全,如果类目不对,模板库里根本搜不到想要的字段,这时候先去“设置-基本设置”里确认服务类目。
小程序订阅消息和公众号模板消息区别
这两者经常被拿来对比,但底层逻辑完全不同,用表格看得更清楚:
| 对比项 | 小程序订阅消息 | 公众号模板消息 |
|---|---|---|
| 触达位置 | 微信“服务通知” | 公众号会话列表 |
| 是否需关注 | 不需关注公众号 | 必须关注公众号 |
| 授权方式 | 用户在小程序内点击按钮授权 | 用户关注即默认接收,可拒收 |
| 下发额度 | 一次性订阅授权对应一条下发额度 | 长期可发,但受模板场景限制 |
| 长期推送 | 仅政务、民生等特定行业 | 支持,但需符合模板用途 |
| 主要用途 | 订单、预约、结果通知 | 会员、营销、服务提醒 |
简单说:小程序订阅消息更克制,用户主动授权一次才有一条;公众号模板消息更适合长期运营,但小程序场景里不能直接替代。 2020年后公众号模板消息逐步向订阅通知迁移,新接入的小程序基本都走订阅消息。
从后台到接口:完整配置步骤按顺序走一遍
第1步:后端先准备access_token
小程序消息推送接口需要access_token,access_token不是前端能拿的,必须后端用AppID和AppSecret请求:
GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
返回的access_token有效期约7200秒,后端要缓存并提前刷新,据微信官方文档说明,频繁刷新会被限制频率,不要每次发送都去拿一次。
第2步:前端埋点,必须在用户点击后请求订阅
订阅消息最核心的规则:只能在用户点击某个按钮后触发授权弹窗,不能在页面加载时自动弹,也不能在onLoad里直接调。
以订单页“开启发货通知”按钮为例:
wx.requestSubscribeMessage({
tmplIds: ['模板ID'],
success(res) {
if (res['模板ID'] === 'accept') {
// 用户同意,把openid和模板ID传给后端保存
}
},
fail(err) {
console.log(err);
}
})
用户点击“允许”后,前端需要把用户openid和对应模板ID传到后端,后端不能只靠前端传参,最好通过微信登录接口获取openid,避免被篡改。
第3步:后端调subscribeMessage.send发送
拿到用户授权后,后端调用发送接口:
POST https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN
{
"touser": "用户openid",
"template_id": "模板ID",
"page": "pages/order/detail?id=123",
"data": {
"character_string1": {"value": "20260801"},
"thing2": {"value": "商品已发出"},
"time3": {"value": "2026-08-01 10:30:00"}
}
}
返回errcode:0表示发送成功,同时该条授权额度消耗掉。如果发送成功后再想发第二条,必须用户再次授权。 这是大多数运营端觉得“为什么发着发着就发不出去了”的原因。
小程序消息推送不生效怎么办?先从这五处查起
查授权状态与一次性配额

用户如果当时点了“拒绝”或关闭了“总是保持以上选择”,后端发送会返回43101,此时不是代码问题,是用户侧关闭了入口,你需要重新设计触发点,让用户再次主动点击授权。
一次性订阅模板发过一次就失效,后端要记录每个用户每个模板的授权状态和剩余次数,不要把历史授权当成永久可用。
查模板字段与参数格式
模板里的字段类型有thing、character_string、time、amount等,每个字段有最大长度,超出会直接报错,比如thing字段一般限制20个汉字,发送前先截断或做长度校验。page路径要写成pages/order/detail?id=123,别带.html后缀,也别写错参数名。
查access_token与IP白名单
如果你用的是第三方服务或云函数,可能多个环境同时刷新access_token,导致旧token失效,公众号有IP白名单,小程序没有,但access_token接口有频率限制,建议缓存并设置提前5分钟刷新,避免临期发送失败。
查用户openid来源
前端传的openid如果和后端数据库里的不一致,会返回40003,确保openid来自同一AppID下的微信登录流程,不要拿公众号openid直接发小程序订阅消息。
查类目与模板匹配
类目不对会导致模板库里没有对应模板,或者发送时提示违规,比如做医疗咨询却申请了电商的发货通知模板,审核阶段就会被驳回,先把类目改准确,再重新选模板。
不同业务场景下的配置侧重点
电商小程序消息推送配置:订单状态与发货提醒最优先
电商场景里,支付成功通知、发货通知、退款结果通知是三个最值得配的模板,触发点放在:
- 支付回调成功后,直接发“订单支付成功”
- 后台点击“发货”时,触发“发货提醒”
- 退款审核完成,发“退款结果通知”
不建议在电商场景里做营销推送,用户对订单信息容忍度高,对促销推送容忍度低,一旦感受到打扰,会直接关闭“服务通知”,后续所有关键通知都收不到。先保证交易链路通知稳定,再考虑其他触达。
本地生活小程序消息推送配置:预约与到店提醒更看重及时性
本地生活类小程序常见场景是美容、健身、家政、餐饮预约,用户预约完成后,如果没有任何提醒,到店率会明显下降。
建议配置“预约成功通知”和“服务前提醒”两个模板,预约成功通知在用户提交预约后立刻发;服务前提醒可以在预约时间前1-2小时由后端定时任务触发。

因为一次性订阅授权只能发一次,需要用户每次预约时都点一次授权,或者在授权页同时申请两个模板。
这类场景下,稳定到达比文案花哨更重要,模板内容写清楚时间、地址、服务项目,别塞营销链接。
小程序消息推送价格与额度:免费但限制严格
这是搜索量很高的问题。微信官方的小程序订阅消息接口本身不收费,申请模板、调用发送接口都不需要额外付费,所谓的“价格”主要来自两块:
- 服务器资源:你需要一台能定时刷新access_token并发送请求的服务器,云函数按调用量计费,轻量服务器按月几十元起步,取决于你的发送量。
- 第三方工具:部分服务商提供可视化模板管理、授权状态统计、定时发送等功能,按年或按月收费,行业共识认为,官方接口不收费,收费的是工具和服务,不要被“无限推送”话术误导。
额度方面记住三句话:
- 一次性订阅授权对应一条下发额度,发完即止
- 长期订阅仅开放给政务、民生等特定行业
- 客服消息只在用户进入会话后48小时内可发有限条数
没有花钱买额度的官方渠道,如果有人承诺“充值就能无限推”,基本可以判断是不合规操作。
小程序消息推送配置常见问题
小程序消息推送配置需要服务器吗?
需要,前端不能安全保存AppSecret,也没法在用户授权后自动发消息,必须有一个服务端或云函数来获取access_token、保存授权状态、调用发送接口,纯前端方案在正式环境中不可行。
小程序消息推送价格包含模板申请费用吗?
不包含,模板申请免费,发送接口免费,你只需要承担服务器或云开发资源费用,如果使用第三方平台,费用按其套餐计算,和微信官方无关。
订阅消息授权一次能发几条?
一次性订阅模板每授权一次只能发一条;长期订阅模板一次授权可发多条,但仅限特定行业,用户勾选“总是保持以上选择”不代表无限发送,只代表下次触发同样操作时不再弹窗确认,每次触发仍消耗一条授权额度。
核心结论再强化一次:把订阅消息当“用户主动要一条通知”,而不是“我可以随便推”。 授权入口放在合理操作点,模板字段严格匹配,后端记录好剩余额度,这套配置才能长期稳定跑通。

