类型 | 特点 | 适用场景 |
---|---|---|
一次性订阅 | 用户授权后仅能发送1次消息,适用于时效性强的通知 | 订单支付成功提醒、活动报名确认 |
长期订阅 | 用户授权后可多次发送消息,需特定行业资质(政务/医疗/交通等) | 航班动态更新、设备故障预警 |
设备订阅 | 特殊长期订阅类型,需设备接入能力 | 智能硬件耗材不足提醒 |
二、核心开发流程
步骤1:获取消息模板ID
登录微信公众平台
进入「订阅消息」→「选用」或「新建模板」
搜索关键词(如“支付成功通知”)选择官方模板
示例:物流通知模板可能包含字段 {{快递公司}}、{{运单号}}
模板审核与记录
提交自定义模板需等待审核(通常1-3个工作日)
记录模板ID(如 hD-ixGOhYmUfjOnI8MCzQMPshzGVeux_2vzyvQu7O68)
步骤2:配置消息推送服务
启用消息推送接口
在「开发 → 接口设置」中配置服务器地址和Token
验证消息推送配置(通过微信调试工具发送测试请求)
事件订阅监听
// 接收用户订阅状态变更事件(XML/JSON格式) app.on('subscribe_msg_popup_event', (msg) => { console.log('用户订阅状态:', msg.SubscribeStatusString); });
// 调用订阅接口(支持同时请求多个模板) wx.requestSubscribeMessage({ tmplIds: ['模板ID1', '模板ID2'], success(res) { const acceptedIds = Object.keys(res).filter(k => res[k] === 'accept'); console.log('用户同意的模板:', acceptedIds); }, fail(err) { console.error('授权失败:', err.errMsg); } });
HTTP请求示例(Node.js)
const axios = require('axios'); const access_token = '获取的access_token'; // 通过appid和secret换取 axios.post('https://api.weixin.qq.com/cgi-bin/message/subscribe/send', { touser: '用户openid', template_id: '模板ID', page: 'pages/index/index', // 点击消息跳转页面 data: { thing1: { value: '订单编号123' }, // 字段需与模板严格匹配 time2: { value: '2025-04-06 14:30' } } }, { params: { access_token } });
三、进阶开发技巧
用户授权状态管理
// 检查历史授权状态 wx.getSetting({ withSubscriptions: true, success(res) { const status = res.subscriptionsSetting['模板ID']; if(status === 'accept') sendMessage(); } });