您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 如何在微信小程序中发送订阅消息
## 前言
微信小程序订阅消息是开发者实现服务通知能力的重要途径。与模板消息相比,订阅消息更注重用户主动授权,符合微信"用户主导"的产品理念。本文将详细介绍从申请模板到最终发送的全流程,包含代码示例和常见问题解决方案。
---
## 一、订阅消息基础概念
### 1.1 什么是订阅消息
订阅消息允许开发者在用户**主动授权**后,在7天内向用户发送1-3条服务通知。主要特点包括:
- 需要用户明确授权(不再像模板消息默认勾选)
- 每条消息独立授权
- 长期订阅需特殊资质(仅限政务、医疗等领域)
### 1.2 与模板消息的区别
| 特性 | 订阅消息 | 模板消息(已下线) |
|------------|----------------|----------------|
| 授权方式 | 每次发送前需授权 | 一次授权长期有效 |
| 有效期 | 7天 | 无限制 |
| 发送限制 | 1-3条/次授权 | 无明确限制 |
---
## 二、完整实现流程
### 2.1 准备工作
1. **开通能力**:登录[微信公众平台](https://mp.weixin.qq.com/) → 开发 → 开发设置 → 消息推送
2. **申请模板**:在「功能」→「订阅消息」中添加模板,记录模板ID
### 2.2 前端授权实现
```javascript
// 获取订阅授权
async function requestSubscribe() {
const tmplIds = ['TEMPLATE_ID']; // 替换为实际模板ID
try {
const res = await wx.requestSubscribeMessage({
tmplIds: tmplIds,
success(res) {
if (res[tmplIds[0]] === 'accept') {
console.log('用户已授权');
}
}
});
} catch (err) {
console.error('授权失败:', err);
}
}
关键参数说明:
- tmplIds
:需要申请的模板ID数组
- 用户授权结果会以{模板ID: 'accept'/'reject'}
的形式返回
const cloud = require('wx-server-sdk');
cloud.init();
exports.main = async (event, context) => {
try {
const result = await cloud.openapi.subscribeMessage.send({
touser: event.openid, // 用户openid
templateId: 'TEMPLATE_ID', // 模板ID
page: 'pages/index/index', // 点击消息跳转页面
data: { // 模板内容
thing1: { value: '订单提醒' },
time2: { value: '2023-07-20 14:00' }
}
});
return result;
} catch (err) {
return err;
}
};
参数规范:
- data
字段需与模板内容严格匹配
- 字段类型需符合微信要求(如time
类型必须为yyyy-MM-dd HH:mm
)
场景:下单时申请发货通知模板,支付完成时申请评价模板
// 根据场景动态申请不同模板
function sceneSubscribe(scene) {
const templates = {
order: ['SHIPPING_TMPL_ID'],
payment: ['REVIEW_TMPL_ID', 'COUPON_TMPL_ID']
};
wx.requestSubscribeMessage({
tmplIds: templates[scene] || []
});
}
// 检查本地是否已有授权
function checkSubscribeCache(tmplId) {
const cache = wx.getStorageSync('subscribeCache') || {};
if (cache[tmplId] > Date.now()) {
return true; // 7天内有效
}
return false;
}
// 使用云开发批量发送
const batchUsers = ['openid1', 'openid2'];
const sendTasks = batchUsers.map(openid => {
return cloud.openapi.subscribeMessage.send({
touser: openid,
templateId: 'TEMPLATE_ID',
data: {...}
});
});
Promise.all(sendTasks).then(results => {
console.log('批量发送完成', results);
});
wx.showModal({
title: '开启通知',
content: '开启后您将及时接收订单状态提醒',
success(res) {
if (res.confirm) requestSubscribe();
}
});
错误码 | 含义 | 解决方案 |
---|---|---|
43101 | 用户拒绝授权 | 优化引导文案 |
47003 | 模板参数错误 | 检查data字段与模板匹配度 |
41030 | 页面路径不存在 | 检查page字段是否已发布 |
requestSubscribeMessage
调用中流程: 1. 下单时申请「发货通知」模板 2. 发货后触发消息:
{
"character_string1": { "value": "SF123456" },
"thing2": { "value": "商品名称" },
"date3": { "value": "2023-07-21" }
}
策略: - 用户收藏内容时申请「更新通知」 - 采用「一次性订阅」+「长期订阅」组合
正确实现订阅消息需要开发者同时关注技术实现和用户体验。建议: 1. 严格遵循微信官方规范 2. 设计清晰的授权引导流程 3. 建立消息发送日志系统 4. 定期分析用户授权率数据
通过本文介绍的方法,开发者可以构建高效、合规的消息通知体系,提升小程序用户活跃度。
注:实际使用时请将代码中的TEMPLATE_ID
等占位符替换为实际值,微信接口可能有更新,建议以最新官方文档为准。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。