夏有木工作室夏有木工作室夏有木工作室
  • 首页
  • 博客
  • 关于我们
  • 联系我们
夏有木工作室夏有木工作室夏有木工作室
全部文章/
微信小程序

微信小程序订阅消息设计

EricEric
2024/12/15
·4 分钟阅读 (1,307 字)·

订阅消息是一种需要用户主动授权的单向消息推送方式

目录

  • 什么是订阅消息
  • 使用场景
  • 实现流程
  • 01 在微信公众平台申请模板
  • 02 配置启动消息推送功能
  • 03 在前端请求用户订阅
  • 04 服务端发送订阅消息
  • 总结
  • 附录
  • 小程序系列精选阅读

随着微信小程序的普及,开发者需要一种高效的方式向用户传递重要信息。订阅消息作为一种官方推送机制,可以在用户授权的前提下主动发送消息。本文将详细解析微信小程序订阅消息的使用场景、实现流程及注意事项,帮助开发者高效利用这一能力。

什么是订阅消息

订阅消息是一种无需用户主动触发即可发送的单向消息推送方式。不同于服务通知,订阅消息需要用户明确授权,开发者可以在特定场景下向用户发送事先约定的信息。

特点:

  1. 单向推送:消息从开发者单向发送给用户。
  2. 需用户授权:每次发送前必须获得用户的订阅授权。
  3. 消息限制:单次订阅只能发送一次消息。

使用场景

订阅消息适用于以下常见场景:

  • 物流通知:提醒用户包裹的配送状态。
  • 服务预约:通知用户服务时间的变更。
  • 活动提醒:向用户推送活动报名成功或即将开始的通知。
  • 订单状态更新:更新用户订单的支付、发货等状态。

实现流程

订阅消息的实现流程主要包括以下几个步骤:

01 在微信公众平台申请模板

在小程序管理后台:

  1. 进入 "基础功能 -> 订阅消息",选择 "选用"。
  2. 搜索或创建符合需求的消息模板。
  3. 保存模板后,记录模板ID,后续开发中需要用到。

可以选用已经审核通过的,也可以自行配置然后等待审核。

订阅消息模板

选用模板关键词:

模板选用编辑

02 配置启动消息推送功能

在小程序管理后台:

  1. 进入 "开发 -> 接口设置",开启 消息推送 功能。
  2. 设置消息推送的 推送地址 和 Token,该地址用于接收微信服务器推送的事件通知。
  3. 验证推送配置是否成功,例如可以通过接收微信推送的测试消息确认配置无误。

为什么需要配置消息推送?

消息推送功能为小程序提供了事件通知能力,比如用户授权订阅、模板消息的发送结果等。当用户完成订阅或消息发送失败时,微信服务器会主动推送事件到配置的推送地址,帮助开发者实时监控消息状态并进行相应处理。

消息推送后端接口配置

可以在配置之前,通过微信开放平台调试工具中验证你的 api 接口,图中右侧有验证的结果。地址:https://developers.weixin.qq.com/apiExplorer

消息推送验证

03 在前端请求用户订阅

调用 wx.requestSubscribeMessage 接口,向用户请求订阅。

示例代码:

/**
 * 向用户请求订阅消息
 */
export function requestSubscribeMessage(templateIds: string[]) {
  return new Promise((resolve, reject) => {
    wx.requestSubscribeMessage({
      tmplIds: templateIds,
      success(res) {
        // 筛选出状态为 accept 的 templateId
        const acceptedTemplateIds = Object.entries(res)
          .filter(([_, status]) => status === 'accept')
          .map(([templateId, _]) => templateId);

        resolve(acceptedTemplateIds); // 返回 accept 的模板 ID 数组
      },
      fail(err) {
        console.error('订阅请求失败:', err);
        reject(err); // 处理失败情况
      }
    });
  });
}

注意:

  • 用户可以选择“总是保持以上选择,不再询问”,此后微信前端不再唤起弹框,让用户选择。
  • 模板ID必须提前在管理后台申请并启用。

04 服务端发送订阅消息

通过小程序的服务器接口 https://api.weixin.qq.com/cgi-bin/message/subscribe/send 向用户发送消息。

设计要点:

  1. 每次用户选择的模板 ID 列表需要和具体的订单号进行绑定,因为用户可以在前端每次都选择不同的模板,后端如果没有记录直接发送,那么会被微信服务器拒绝。
  2. 订阅消息是一次性的,使用完成后,如果用户没有再次进行授权的话,无法进行消息的发送。
  3. 很多订阅消息是后置的,是用户在选择接收的模板后,后续订单出现状态变化时,进行触发的。
  4. 在订单状态发送变化后,发送异步事件通知,在 EventListener 中进行统一处理
  5. 异步事件发送微信订阅消息,记得设置在数据库事务提交之后,按需加入一致性保障,一般失败可以丢弃或者立即重试几次。
  6. 最后,需要确保发送的字段与模板字段一一对应,否则会报错。

例如:签到微信订阅消息通知部分代码实例:

@Async
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void onAppointmentSigned(AppointmentSignedEvent event) {
  try {
    AppointmentOrderDetailDTO appointmentOrderDetail =
            appointmentOrderQueryExecutor.getDetail(event.getOrderId());
    UserAccountDTO userAccountDTO =
            userAccountQueryExecutor.getDetail(Long.valueOf(appointmentOrderDetail.getUserId()));

    WxSubscribeSignAppointmentCmd subscribeSignAppointmentCmd = WxSubscribeSignAppointmentCmd.builder()
            .openId(userAccountDTO.getOpenId())
            .orderNo(event.getOrderId())
            .userName(userAccountDTO.getAccountName())
            .coachName(appointmentOrderDetail.getCoachName())
            .courseName(appointmentOrderDetail.getCourseName())
            .signTime(appointmentOrderDetail.getSignTime()
                    .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")))
            .build();
    messageCmdExecutor.sendAppointmentSignMessage(subscribeSignAppointmentCmd);
  } catch (Exception e) {
      log.warn("发送预约签到订阅消息失败!", e);
  }
}

总结

订阅消息作为小程序的重要能力,可以帮助开发者提升用户体验。然而,在实现过程中需严格遵守微信的接口规范和用户隐私保护要求,以保证功能的稳定性和用户的信任感。希望本文能为开发者提供清晰的指导,助力开发高效实用的小程序功能。

附录

查看微信小程序订阅的消息模板

订阅消息接收列表

小程序系列精选阅读

如果你对小程序开发系列文章感兴趣,可以浏览我的更多专题文章。

  • 从 0 到 1 开发一个小程序所需要准备的资质
  • 个人微信小程序注册和备案
  • 微信小程序企业主体注册和备案
  • 微信小程序原生框架开发
  • 微信小程序静默登录设计
  • 微信小程序双 Token 登录设计
  • 微信小程序接入隐私协议
  • 微信小程序分包实战总结
  • 微信小程序审核:这些措施能让你的小程序快速过审!
  • 微信小程序上线审核技巧与踩坑总结
  • 微信小程序虚拟支付接入实战
上一篇

良好的异常处理设计:系统稳定性的基础保障

下一篇

微信小程序双 Token 登录设计

更多文章

微信小程序虚拟支付接入实战

微信小程序虚拟支付接入实战

深入解析微信虚拟支付与普通 V3 微信支付的核心区别,覆盖商户资质、道具直购模式、签名参数、发货通知确认与异步退款全链路实战。

EricEric
2026/08/17
微信小程序上线审核技巧与踩坑总结

微信小程序上线审核技巧与踩坑总结

基于 80+ 次小程序上线审核实战经验,总结持续迭代版本的自查清单、提审模板规范与常见驳回应对策略。

EricEric
2026/06/15
微信小程序分包实战总结

微信小程序分包实战总结

微信小程序分包实战总结,包括分包的基本概念、分包的实现步骤、分包的注意事项等

EricEric
2025/10/20
夏有木工作室夏有木工作室夏有木工作室

专业软件开发技术伙伴,帮助客户快速构建出高质量的软件产品。

GitHubGitHubEmail
Built with夏有木工作室夏有木工作室夏有木

川公网安备51012202002478号|蜀ICP备2025156031号-1

产品
  • 夏有木进销存
工具
  • 夏有木微信公众号排版
资源
  • 博客
  • 更新日志
公司
  • 关于我们
  • 联系我们
法律
  • Cookie政策
  • 隐私政策
  • 服务条款
© 2026 夏有木工作室 All Rights Reserved.