如何在微信小程序中发送订阅消息

发布时间:2022-04-20 14:15:10 作者:iii
来源:亿速云 阅读:214
# 如何在微信小程序中发送订阅消息

## 前言

微信小程序订阅消息是开发者实现服务通知能力的重要途径。与模板消息相比,订阅消息更注重用户主动授权,符合微信"用户主导"的产品理念。本文将详细介绍从申请模板到最终发送的全流程,包含代码示例和常见问题解决方案。

---

## 一、订阅消息基础概念

### 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'}的形式返回

2.3 服务端发送实现(Node.js示例)

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


三、高级技巧与优化

3.1 多场景授权策略

场景:下单时申请发货通知模板,支付完成时申请评价模板

// 根据场景动态申请不同模板
function sceneSubscribe(scene) {
  const templates = {
    order: ['SHIPPING_TMPL_ID'],
    payment: ['REVIEW_TMPL_ID', 'COUPON_TMPL_ID']
  };
  wx.requestSubscribeMessage({
    tmplIds: templates[scene] || []
  });
}

3.2 本地缓存优化

// 检查本地是否已有授权
function checkSubscribeCache(tmplId) {
  const cache = wx.getStorageSync('subscribeCache') || {};
  if (cache[tmplId] > Date.now()) {
    return true; // 7天内有效
  }
  return false;
}

3.3 服务端批量发送

// 使用云开发批量发送
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);
});

四、常见问题解决方案

4.1 授权被拒绝处理方案

  1. 引导文案优化
    
    wx.showModal({
     title: '开启通知',
     content: '开启后您将及时接收订单状态提醒',
     success(res) {
       if (res.confirm) requestSubscribe();
     }
    });
    
  2. 在设置页增加常驻入口

4.2 错误代码处理

错误码 含义 解决方案
43101 用户拒绝授权 优化引导文案
47003 模板参数错误 检查data字段与模板匹配度
41030 页面路径不存在 检查page字段是否已发布

4.3 性能优化建议

  1. 合并请求:将多个模板ID放在一次requestSubscribeMessage调用中
  2. 延迟加载:在用户完成核心操作后再申请授权
  3. 数据压缩:对data字段值进行精简(如用缩写代替长文本)

五、最佳实践案例

5.1 电商场景实现

流程: 1. 下单时申请「发货通知」模板 2. 发货后触发消息:

   {
     "character_string1": { "value": "SF123456" },
     "thing2": { "value": "商品名称" },
     "date3": { "value": "2023-07-21" }
   }

5.2 内容类小程序

策略: - 用户收藏内容时申请「更新通知」 - 采用「一次性订阅」+「长期订阅」组合


结语

正确实现订阅消息需要开发者同时关注技术实现和用户体验。建议: 1. 严格遵循微信官方规范 2. 设计清晰的授权引导流程 3. 建立消息发送日志系统 4. 定期分析用户授权率数据

通过本文介绍的方法,开发者可以构建高效、合规的消息通知体系,提升小程序用户活跃度。

附录: - 微信官方文档 - 消息模板审核规范 “`

注:实际使用时请将代码中的TEMPLATE_ID等占位符替换为实际值,微信接口可能有更新,建议以最新官方文档为准。

推荐阅读:
  1. 用java后端实现微信小程序订阅消息开发
  2. 小程序新版订阅消息模板消息

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

微信小程序

上一篇:怎么开发的第一个小程序

下一篇:微信小程序开发遇到的问题怎么解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》