uni.requestSubscribeMessage仅获取授权,消息发送必须由后端调用微信接口,且需有效access_token、准确openid及严格合规的data结构。

不能只在前端调用 uni.requestSubscribeMessage 就算完事——它只负责“拿授权”,不负责“发消息”。真正把通知推到用户微信“服务通知”里,必须由后端调用微信接口 https://api.weixin.qq.com/cgi-bin/message/subscribe/send,且依赖有效的 access_token 和准确的 openid。
uni.requestSubscribeMessage 必须在 button 点击中第一行同步执行
微信硬性拦截所有非真实点击链路的调用。哪怕加一个 await 或 setTimeout,都会报 fail can only be invoked by user TAP gesture。
- 错误写法:放在
uni.login回调里、onLoad里、或@click函数中先查登录态再调用 - 正确写法:
<button open-type="subscribeMessage">开启物流实时更新</button>,且handleSubscribe函数体第一行就是uni.requestSubscribeMessage({ tmplIds: ['YOUR_TEMPLATE_ID'] }) - 必须是原生
<button></button>,open-type="subscribeMessage"属性不可省(uni-app 3.0+ 才支持) - 不要试图“优化体验”提前预加载或延迟弹窗——5 秒内未触发即静默失败,控制台可能无任何提示
检查订阅状态必须传 withSubscriptions: true
不传这个参数,uni.getSetting 返回结果里压根没有 subscriptionsSetting 字段,等于白查。
name wechat-article-writer-pro description 微信公众号文章完整生成技能(专业版)。输入主题即自动完成:信息调研、文章撰写(含章节配图)、5个备选爆款标题、封面图生成、带格式排版的DOCX文档输出。触发词:写公众号文章、生成公众号内容、做微信推文、公众号文章完整版。 agent_created true 微信公众号文章完整生成技能(专业版) 概述 本技能提供微信公众号文章从主题到成品的完整生成流程,在基础版之上增加:章节配图、DOCX 格式输出(含彩色重点文字和表格
-
res.subscriptionsSetting.mainSwitch在 iOS 上恒为true,不能当授权依据;安卓上关了也只表示系统总开关关闭 - 关键看
res.subscriptionsSetting.itemSettings['YOUR_TEMPLATE_ID']的值:'accept'(已同意)、'reject'(明确拒绝)、undefined(从未触达,此时才该拉起弹窗) - 字段名大小写、拼写必须和微信后台模板详情页里的
name完全一致(如thing1,不是THING1或keyword1) - 若返回
'reject',再次调用uni.requestSubscribeMessage不会弹窗,必须走uni.openSetting({ withSubscriptions: true })引导手动开启
.NET 或 Spring Boot 后端发消息时 data 结构必须严格合规
90% 的 {"errcode":47001,"errmsg":"data format error hint"} 错误,不是模板 ID 写错,而是字段结构不满足微信要求。
-
data必须是对象,每个字段必须是{ "value": "xxx" }形式,不能直接写"thing1": "xxx" -
touser必须是当前小程序用户的openid(不是 unionid,不是公众号 openid) -
template_id必须是微信公众平台审核通过的完整字符串,不能截断、不能带空格 - 请求 URL 必须带有效
access_token参数:https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=xxx -
access_token需缓存并校验有效期(2 小时),硬编码或每次重取会导致errcode: 40001
最容易被忽略的是:前端拿到 'accept' 只代表用户点了“允许”,不代表后端能立刻发成功。access_token 过期、openid 错位、字段名大小写偏差、甚至模板字段少填一个 value 键,都会让消息静默消失——微信不报错,但用户收不到。


















