当前位置: 首页 > news >正文

小程序消息订阅的整个实现流程

以下是微信小程序消息订阅的完整实现流程,分为 5个核心步骤3个关键注意事项


一、消息订阅完整流程

步骤1:配置订阅消息模板
  1. 登录微信公众平台
  2. 进入「功能」→「订阅消息」
  3. 选择公共模板或申请自定义模板,获取模板ID(如 TEMPLATE_ID
    • 示例模板内容
      标题:会议提醒  
      内容:  
      {{thing1.DATA}}  
      时间:{{time2.DATA}}  
      地点:{{thing3.DATA}}
      
步骤2:前端发起订阅请求
// 小程序端代码(需用户主动触发,如按钮点击)
wx.requestSubscribeMessage({tmplIds: ['TEMPLATE_ID'], // 模板ID列表success(res) {if (res['TEMPLATE_ID'] === 'accept') {console.log('用户已授权');// 将授权结果发送至服务器保存wx.request({url: 'https://api.example.com/save-subscription',data: { openid: getApp().globalData.openid }});}},fail(err) {console.error('授权失败', err);}
});
步骤3:服务端存储订阅关系
// 服务端示例(Node.js)
const saveSubscription = async (openid) => {// 1. 校验用户身份// 2. 存储关联关系:openid + 模板ID + 授权状态await db.collection('subscriptions').updateOne({ openid },{ $set: { 'templates.TEMPLATE_ID': true } },{ upsert: true });
};
步骤4:触发消息发送
// 服务端发送消息(需access_token)
const sendSubscribeMessage = async (openid) => {const accessToken = await getAccessToken(); // 获取接口调用凭证const result = await axios.post(`https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=${accessToken}`,{touser: openid,template_id: 'TEMPLATE_ID',page: 'pages/index/index', // 点击消息跳转页面data: {thing1: { value: '项目评审会' },time2: { value: '2023-10-01 14:00' },thing3: { value: 'A栋201会议室' }}});// 处理发送结果(成功/失败)
};
步骤5:消息状态监控
// 接收微信推送的发送结果(需配置消息推送)
router.post('/message-callback', (req, res) => {const { MsgID, Status } = req.body;console.log(`消息ID: ${MsgID} 状态: ${Status}`);// 更新数据库中的发送状态res.send('success');
});

二、关键注意事项

  1. 授权时效性

    • 用户授权一次仅可发送 1条消息(一次性订阅)
    • 长期订阅需特殊资质(政务、医疗等民生类目)
  2. 触发限制

    • 必须由用户主动操作触发(如点击按钮)
    • 禁止页面加载自动弹出授权窗口
  3. 内容规范

    • 禁止营销类内容(如促销、广告)
    • 字段值需与模板匹配,示例:
      "data": {"thing1": { "value": "文本内容(长度≤20)" },"number2": { "value": 123 }
      }
      

三、调试工具与错误码

工具/方法用途
微信开发者工具「订阅消息」面板模拟授权与消息发送
真机调试验证实际授权流程
错误码 43101用户拒绝授权,需引导重新触发

通过以上流程可实现合规的消息订阅功能,建议结合业务场景设计友好的授权引导界面,并监控消息到达率优化用户体验。

相关文章:

  • TOGAF 企业架构介绍(4A架构)
  • ADV7842KBCZ - 5 富利威长期稳定供应
  • 代理ARP与传统ARP在网络通信中的应用及区别研究
  • Linux快速入门
  • C++ - 函数重载
  • 深入解析多线程与多进程:从理论到Python实践
  • C语言—指针3
  • 若依定制pdf生成实战
  • gradle3.5的安装以及配置环境变量
  • PX4开始之旅(二)通过自定义 MAVLink 消息与 QGroundControl (QGC) 通信
  • 力扣题解:21.合并两个有序链表(C语言)
  • 2025数维杯数学建模C题完整分析参考论文(共36页)(含模型、可运行代码、数据)
  • 赛季7靶场 - Environment
  • Android 移动应用开发:页面跳转与数据传递功能
  • Android屏蔽通话功能和短信功能
  • MySQL(4)如何查看MySQL数据库的版本?
  • 『不废话』之Python 3.14 Beta版新特性
  • 【传感器】代码——DHT11温湿度传感器
  • 从0开始学linux韦东山教程第一三章问题小结(1)
  • 4.2java包装类
  • 夜读丨喜马拉雅山的背夫
  • 视频丨习近平同普京在主观礼台出席红场阅兵式
  • 明星同款撕拉片,为何能炒到三四百一张?
  • A股三大股指低收:银行股再度走强,两市成交11920亿元
  • 国家发改委:美芯片药品等领域关税影响全球科技发展,损害人类共同利益
  • 国博馆刊|北朝至唐初夏州酋豪李氏家族的发展与身份记忆