做微信小程序开发时,订阅消息是提升用户互动、推送重要信息的关键功能,但很多开发者刚接触时一头雾水:订阅消息咋申请权限?代码咋写?用户关了订阅还能再唤起吗?今天就把微信小程序订阅消息开发里的核心问题拆明白,从基础到实操一次讲透。
简单说,订阅消息是用户主动点「允许」后,小程序才能给用户发通知,和早年已下线的“模板消息”相比,订阅消息更强调**用户授权**——没经过用户同意,想发也发不出去,而且订阅消息分两种:
一种是一次性订阅,用户授权后只能发1条对应场景的消息(比如用户下单后授权,只能发这次订单的物流通知,下次下单得重新授权);另一种是长期性订阅,授权一次能发多次,但只有政务、医疗、交通等特定行业能申请(需提交资质给微信审核),普通电商、工具类小程序只能用一次性。
举个例子:做外卖小程序,用户点餐后授权订阅,只能发这次订单的“商家接单”“骑手取餐”通知;但如果是政务小程序(比如社保查询),申请长期订阅后,用户授权一次,后续每月社保到账都能发通知。
开发订阅消息第一步,咋选模板?
得先登录微信公众平台(小程序后台),左侧菜单找「订阅消息」→「模板库」,选模板时得盯紧业务场景:
比如做电商,就搜“订单支付成功”“物流状态变更”;做线下美甲预约,就找“预约成功通知”“服务提醒”,选好模板后,还要看模板里的关键词——比如某个模板要求传“订单号”“商品名称”“物流时间”,开发时给用户发消息必须把这几个字段填对,少一个用户收到的消息就缺信息,体验直接崩。
同一个业务场景可能有多个模板,优先选关键词匹配度高的,比如物流通知,有的模板关键词是“快递公司+快递单号”,有的是“物流进度+预计送达时间”,得选和你系统里数据能对应上的,别硬凑。
用户端咋触发订阅授权?代码咋写?
用户得主动点按钮(允许接收通知”),前端用wx.requestSubscribeMessage
这个API触发授权弹窗,举个实际代码例子:
Page({ // 按钮绑定的事件 handleSubscribe() { wx.requestSubscribeMessage({ // 模板id列表,从公众平台复制 tmplIds: ['模板id1', '模板id2'], success(res) { // res里每个模板的状态:accept(允许)、reject(拒绝)、ban(被微信拦截,比如模板违规) console.log('授权结果:', res) // 把授权结果传给后端,存起来后续发消息用 if (res['模板id1'] === 'accept') { // 可以给用户弹个提示:“已开启订单通知” } }, fail(err) { console.log('授权失败原因:', err) // 比如用户点了取消,或者小程序没权限用订阅消息 } }) } })
注意哈,不能强制用户授权——比如用户不点“允许”就不让下单,这属于违规,微信会处罚,得让用户自愿选,比如在按钮旁边加行小字:“订阅后能及时收到物流提醒,随时可在设置关闭”。
后端咋发订阅消息?API咋调用?
发消息得调用微信的订阅消息发送接口(https://api.weixin.qq.com/cgi-bin/message/subscribe/send
),步骤分这几步:
拿
access_token
:这是小程序调用接口的“通行证”,得用appid
和appsecret
去换(接口是https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxx&secret=xxx
),注意access_token
有效期是2小时,得定时刷新,不然发消息会失败。组装请求参数:必须传的字段有
touser
(用户的openid
)、template_id
(选好的模板id)、page
(用户点消息跳转到小程序的哪个页面,比如“pages/order/detail?orderId=123”
)、data
(模板里的关键词数据)。
举个data
的例子,假设模板关键词是“订单号”“配送时间”,参数得这么写:
{ "touser": "用户的openid", "template_id": "模板id", "page": "pages/order/detail", "data": { "keyword1": { "value": "OD20240901" }, // 订单号 "keyword2": { "value": "2024-09-01 18:00" } // 配送时间 } }
要是用云开发,更简单,直接调wx.cloud.openapi.subscribeMessage.send
,参数差不多,不用自己管access_token
,云开发帮你处理了。
用户第一次拒接订阅,还能再唤起授权吗?
能,但得讲究方法:
如果用户点了“拒绝”,下次调用wx.requestSubscribeMessage
时,授权弹窗不会自动弹出(除非用户在小程序设置里重新打开权限),所以得做引导逻辑:
前端检测到用户拒接(比如
res
里某个模板状态是reject
),给用户弹个提示:“想及时收到物流/订单通知?可以去设置里打开订阅~”用户点提示后,调用
wx.openSetting
跳转到小程序设置页,让用户自己手动开权限。
举个代码片段:
wx.requestSubscribeMessage({ tmplIds: ['xxx'], success(res) { if (res['xxx'] === 'reject') { wx.showModal({ title: '订阅通知', content: '关闭订阅会收不到订单提醒哦~是否去设置打开?', success(modalRes) { if (modalRes.confirm) { wx.openSetting() // 跳转到设置页 } } }) } } })
注意哈,不能频繁弹这个提示,不然用户烦了直接删小程序,一般在用户完成关键操作后(比如下单成功)引导一次就行。
能同时申请多个订阅模板授权吗?
可以!tmplIds
数组里能放多个模板id,用户点授权时,弹窗里会逐个显示每个模板的用途,让用户选要不要订阅,比如电商小程序,同时申请“订单支付通知”和“物流变更通知”的授权,用户可以分别选允许或拒绝。
但别贪心塞太多模板——一次放5、6个,用户看都看晕了,大概率全拒,建议按业务优先级选2 - 3个核心模板,比如订单+物流,其他非核心的(比如促销通知)可以单独做按钮,让用户后续自愿开。
订阅消息开发里的合规坑有哪些?
微信对订阅消息管得很严,踩坑会被限制功能,甚至封号,这几个红线千万别碰:
诱导授权:不订阅就不让下单”“不订阅不给优惠”,这属于强制,违规。
:模板选的是“物流通知”,结果发广告“xx商品降价了”,内容和模板/业务不匹配,违规。
滥用长期性订阅:普通商家别碰长期性模板,只有政务、医疗等特殊行业能申请,而且得提交资质审核,要是偷偷用,发消息时会被拦截。
消息太骚扰:比如用户只下了1单,你发5条重复通知,用户投诉多了也会被处罚。
想避坑,得仔细读微信开放平台的《订阅消息运营规范》,里面把能发啥、不能发啥写得明明白白。
咋优化订阅消息的用户接受率?
用户愿不愿意点“允许”,全看你场景和文案给不给力:
选对时机:在用户完成关键操作后弹授权,比如下单成功、预约完成时,用户此时最关心后续进展,接受度高。
讲清楚好处:授权按钮旁边加提示,订阅后,物流更新实时通知,不用反复查订单”。
要有用:别堆废话,比如物流通知只写“快递已到站点,预计1小时后配送”,别加“xx商品今日特价”这类广告。
允许用户随时关:在小程序个人中心加个“通知设置”按钮,让用户能自主开关订阅,减少抵触感。
举个成功案例:某生鲜小程序,用户下单后弹窗写“订阅后,配送员到店、送货上门时会及时通知,避免错过生鲜配送~现在订阅,首单再减3元”(虽然不能强制,但用优惠引导+讲清价值,接受率提升了40%)。
测试阶段咋模拟订阅消息发送?
分两步走:
用开发者工具+测试号:在微信公众平台申请测试模板(模板库旁边有“申请测试模板”入口),然后用测试用户的
openid
(可以用自己的微信小号,在开发者工具里看openid
),后端调用发送接口,看手机通知栏有没有收到消息。覆盖多设备测试:iOS和Android的通知展示不一样(iOS在通知中心,Android在状态栏),得用不同系统的手机测,确保消息能正常弹出、跳转页面没错。
要是用云开发,还能直接在云函数里写测试代码,传测试参数,看云开发控制台的日志,排查“参数格式错”“access_token过期”这些问题。
微信小程序订阅消息开发核心是“用户授权为前提,模板匹配要精准,代码调用守规则,体验优化抓场景”,从选模板、写前端授权逻辑,到后端发消息、避合规坑,每一步都得贴合业务需求和用户体验,只要把这些环节吃透,订阅消息就能成为小程序和用户之间的“有效连接器”,既合规又能提升留存和互动~要是你开发时还有具体问题,比如某行业咋申请长期订阅,或者模板参数总传错,评论区留言,咱再细拆!
网友回答文明上网理性发言 已有0人参与
发表评论: