微信小程序消息通知怎么做?订阅消息的申请、授权与发送流程
微信小程序消息通知怎么做?订阅消息的申请、授权与发送流程
微信小程序消息通知,目前主要通过“订阅消息”来实现:开发者先在小程序后台选用消息模板,用户在小程序里点击并同意接收,服务端再在合适的时机调用发送接口,消息就会出现在用户微信的“服务通知”里。整个过程可以概括为“选模板、要授权、发消息”三件事。本文按这个顺序讲清楚每一步该怎么做,以及开发中容易踩的坑。
一、先分清订阅消息的两种类型
订阅消息分为一次性订阅和长期订阅,两者的授权逻辑不同,开通条件也不同:
| 对比项 | 一次性订阅消息 | 长期订阅消息 |
|---|---|---|
| 授权次数与发送次数 | 用户每授权一次,通常只能收到一条 | 用户授权后可在一段时间内多次接收 |
| 适用范围 | 绝大多数小程序都可使用 | 仅向特定行业、特定类目开放 |
| 典型场景 | 订单状态、预约结果、审核通知 | 公共服务类、线下办事类场景 |
| 申请难度 | 在公共模板库选用即可 | 需要满足平台规定的类目和资质要求 |
对大多数商户和企业小程序来说,一次性订阅消息就是日常使用的方式;长期订阅是否可用,需要以微信公众平台当前的开放规则为准。
二、步骤1:在后台选用或申请消息模板
模板是消息的“格式”,决定了消息里能出现哪些字段。流程大致是:
- 登录微信公众平台,进入小程序管理后台。
- 找到“订阅消息”相关功能,进入公共模板库。
- 按所属类目搜索适合的模板,比如“订单状态通知”“预约成功通知”。
- 勾选需要展示的字段(关键词),保存后得到一个模板 ID。
- 如果公共模板库没有合适的,可以按规则申请自定义模板,通常需要审核。
选择模板时要注意:
- 字段数量和类型有限制:不同模板的字段名称、类型和字数上限不同,以后台模板详情为准。
- 模板与类目绑定:小程序所选的服务类目决定可用的模板范围。
- 内容必须真实:消息只能用于通知用户已发生的业务,不能夹带营销推广内容。
三、步骤2:让用户授权订阅
用户不同意,就收不到消息,所以授权环节是整个流程的关键。前端使用 wx.requestSubscribeMessage 接口发起授权,示例如下:
wx.requestSubscribeMessage({
tmplIds: ['你的模板ID'],
success(res) {
// res 中以模板ID为键,值为 accept / reject / ban 等
if (res['你的模板ID'] === 'accept') {
// 用户同意,可以把订阅状态告诉后端
}
},
fail(err) {
// 调用失败,比如基础库版本过低或未由用户点击触发
}
})
使用时有几个要点:
- 必须由用户点击触发:授权弹窗需要在用户的点击等主动操作中调用,不能在页面加载时自动弹出。
- 一次可请求多个模板:
tmplIds是数组,但可同时请求的数量有上限,以官方文档为准。 - 要处理三种结果:同意、拒绝、被后台封禁,不同结果对应不同的后续处理。
- 用户可以勾选“总是保持以上选择”:之后不再弹窗,行为由用户之前的选择决定,开发者需要兼容。
- 授权时机要自然:放在“提交订单”“预约”等有明确意图的按钮上,比让用户莫名其妙地点一个“开启通知”要有效得多。
四、步骤3:服务端发送订阅消息
授权完成后,真正发消息要由服务端完成,不能直接在小程序前端发送。基本流程如下:
- 保存用户标识:用户登录时服务端获得该用户在本小程序下的 openid,需要与业务数据(订单、预约等)关联保存。
- 获取接口调用凭证:服务端通过小程序的 AppID 和密钥换取 access_token,注意要缓存并在过期前刷新,不要每次发送都重新获取。
- 组装并调用发送接口:向微信的订阅消息发送接口提交请求,主要参数包括:
- 接收者的 openid;
- 模板 ID;
- 用户点击消息后跳转的页面路径;
- 模板内容数据,字段名与后台所选模板的字段一一对应;
- 小程序类型(开发版、体验版或正式版)等可选参数。
- 处理返回结果:返回成功不代表用户一定已读,失败时要根据错误码判断原因。
下面是一段服务端请求的示意(字段细节以官方文档为准):
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=1001",
"data": {
"字段名1": { "value": "内容1" },
"字段名2": { "value": "内容2" }
}
}
这里的“字段名”需要换成后台模板里实际生成的名称,不同模板的字段名不同,不要照抄示例,也不要自己臆造。
五、常见错误与排查思路
发送失败时,按下面的顺序排查通常能快速定位:
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 提示用户拒绝接收或未订阅 | 用户未授权,或一次性授权已用完 | 确认是否发起过授权、是否重复发送 |
| 提示模板参数错误 | 字段名或内容格式与模板不符 | 对照后台模板字段、内容长度和类型 |
| 提示凭证无效或过期 | access_token 失效 | 检查缓存与刷新逻辑 |
| 点击消息打不开页面 | page 路径不存在或带参数不对 | 确认路径在已发布的小程序中存在 |
| 开发阶段收不到消息 | 小程序类型参数不匹配 | 区分开发版、体验版和正式版 |
具体错误码含义较多,建议开发时直接对照微信官方文档的错误码表,不要凭记忆判断。
六、设计消息通知时的业务建议
技术能跑通只是基础,通知体验同样重要:
- 只在关键节点发送:下单成功、发货、预约确认、审核结果、到期提醒,这些是用户真正需要的。
- 文案简洁明确:谁、什么事、什么时间、下一步要做什么,一眼能看懂。
- 避免骚扰:不要为了提高打开率而频繁触发授权弹窗,用户反感后会选择“拒绝并不再提示”。
- 做好降级方案:用户没授权时,可以通过小程序内的消息中心、短信或公众号模板消息作为补充,具体渠道需符合各平台规则。
- 记录发送日志:保存发送时间、模板、结果和失败原因,方便客服核对和后续优化。
- 测试要覆盖多种情况:同意、拒绝、重复授权、token 过期、用户未登录等情形都要走一遍。
七、开发所需的时间与成本考虑
订阅消息功能本身不算复杂,但它通常嵌在订单、预约、会员等业务流程中,所需工作量取决于业务节点的多少:只做一两个节点的通知,开发较轻;涉及多角色、多种通知、失败重试和日志后台,则需要更完整的设计。小程序整体的费用按功能模块评估,以实际需求报价为准,不同需求差异较大,不宜一概而论。
常见问题
小程序一定要用订阅消息才能通知用户吗? 小程序内的消息主要靠订阅消息;此外也可以结合公众号、短信、企业微信等渠道,但这些需要各自的账号和授权基础。
用户授权一次,可以一直给他发消息吗? 一次性订阅通常授权一次对应发送一条,不能无限次发送;长期订阅仅限特定类目,且以平台规则为准。
为什么前端调用授权接口没有弹窗? 常见原因是没有在用户点击事件里调用、基础库版本过低、模板 ID 填写有误,或用户此前勾选了“总是保持选择”。
开发版小程序能测试订阅消息吗? 可以测试,但发送接口里的小程序类型参数要与实际版本一致,否则可能收不到。
如果您的小程序需要接入订单通知、预约提醒等功能,欢迎联系广州万户网络,咨询电话 13535321113,我们可以根据业务流程为您规划小程序消息通知的触发节点和实现方案。
需要网站建设、软件开发或爬虫定制?
模板建站1280元起,价格公开不加价。电话/微信 13535321113
