> 技术文档 > 小程序消息订阅的整个实现流程

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

以下是微信小程序消息订阅的完整实现流程,分为 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 用户拒绝授权,需引导重新触发

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