# 如何在微信小程序中發送訂閱消息
## 前言
微信小程序訂閱消息是開發者實現服務通知能力的重要途徑。與模板消息相比,訂閱消息更注重用戶主動授權,符合微信"用戶主導"的產品理念。本文將詳細介紹從申請模板到最終發送的全流程,包含代碼示例和常見問題解決方案。
---
## 一、訂閱消息基礎概念
### 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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。