微信小程序订单通知怎么做?订阅消息+短信兜底完整实现方案

举报
yd_264102447 发表于 2026/10/23 15:57:07 2026/10/23
【摘要】 微信小程序订单通知怎么做?订阅消息+模板消息+短信兜底完整实现方案做商城小程序最容易被忽略的一个问题:用户下单后,如果没有任何通知,商家不知道有新订单,用户也不知道订单状态变化。本文按真实下单链路,给出订阅消息、模板消息、短信兜底三层完整实现,附后端代码和踩坑记录。一、为什么需要订单通知?不做会怎样?先看一个真实场景:用户晚上11点在小程序下了一单,商家手机没收到任何提醒,第二天早上才看到订...

微信小程序订单通知怎么做?订阅消息+模板消息+短信兜底完整实现方案

做商城小程序最容易被忽略的一个问题:用户下单后,如果没有任何通知,商家不知道有新订单,用户也不知道订单状态变化。本文按真实下单链路,给出订阅消息、模板消息、短信兜底三层完整实现,附后端代码和踩坑记录。

一、为什么需要订单通知?不做会怎样?

先看一个真实场景:用户晚上11点在小程序下了一单,商家手机没收到任何提醒,第二天早上才看到订单,用户已经取消退款了。这种事在刚起步的小商城里几乎每天都在发生。

订单通知要解决两个方向:

• **商家端**:新订单进来了,要赶紧备货/发货

• **用户端**:订单付款成功、已发货、已退款,要让用户知道状态变了

很多人以为接个微信支付就完事了,其实支付成功后通知这一环才是真正留住复购的关键。

二、微信小程序通知有哪几种方式?对比一下

| 通知方式 | 到达率 | 成本 | 需要用户授权 | 适合场景 |

|---|---|---|---|---|

| 订阅消息(一次性) | 高 | 免费 | 需用户点授权 | 下单成功、发货提醒 |

| 订阅消息(长期) | 高 | 免费 | 需特定类目 | 物流进度、售后进度 |

| 模板消息(已下线) | - | - | - | 微信已废弃,别用 |

| 短信通知 | 极高 | 0.03~0.05元/条 | 不需要 | 兜底、商家端告警 |

| 站内消息 | 中 | 免费 | 不需要 | 用户下次打开时看到 |

| 公众号推送 | 高 | 免费 | 需关注公众号 | 已绑定公众号的商城 |

核心结论:主力用订阅消息,短信做兜底(订阅消息发送失败时补发短信),站内消息做历史记录。

三、订阅消息怎么接?完整步骤

第1步:在小程序后台开通订阅消息

登录 mp.weixin.qq.com,进入小程序后台,左侧菜单「订阅消息」→「公共模板库」,选一个合适的模板。

常用模板:

• 「订单支付成功通知」

• 「订单发货通知」

• 「退款成功通知」

• 「取件码通知」

选模板后会得到一个模板ID(tmplId),后端发消息时要用。

第2步:前端在关键节点请求授权

关键代码(小程序端):

```javascript

// 用户点击"提交订单"按钮时

wx.requestSubscribeMessage({

tmplIds: ['你的模板ID'],

success(res) {

if (res['你的模板ID'] === 'accept') {

// 用户同意了,可以发一次

console.log('授权成功,本次可发一条');

}

},

fail(err) {

console.error('授权失败', err);

}

});

```

关键点:一次性订阅消息,用户点一次授权只能发一条。所以要在用户每次下单时都弹一次授权,不能只授权一次就一直发。

第3步:后端调用微信接口下发

后端拿到用户的 openId 和模板ID,调用微信订阅消息接口:

```java

// 伪代码,实际用WxJava或自己封装

String accessToken = getAccessToken(); // 从微信获取,2小时有效期

String url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + accessToken;

JSONObject body = new JSONObject();

body.put("touser", openId); // 用户openId

body.put("template_id", "模板ID");

body.put("page", "pages/order/detail?id=" + orderId); // 点击消息跳转页

JSONObject data = new JSONObject();

data.put("character_string1", buildOrderNo(orderId)); // 订单号

data.put("amount2", "¥" + payAmount); // 金额

data.put("thing3", "商家已接单,请等待发货"); // 状态

body.put("data", data);

String result = httpPost(url, body.toString());

```

踩坑点:

• access_token 要全局缓存,2小时刷新一次,别每次发消息都重新获取

• 模板里的字段名(character_string1、amount2、thing3)要和你选的模板一一对应,错一个就报47003错误

• 用户拒绝授权的,发送会返回43101错误,这种就走短信兜底

四、商家端怎么通知?不能只靠用户端

上面说的都是通知用户。但商家端也需要知道"有新订单了",这个更紧急。

商家端通知方案:

方案1:小程序客服消息(适合单店)

商家自己的小程序绑定一个客服微信,新订单通过客服消息推给商家微信。

方案2:短信通知(最稳)

新订单直接给商家手机发短信,内容包括订单号、金额、商品名。一条短信3分钱,一天10单才3毛钱,非常便宜。

方案3:企业微信群机器人

如果商家用企业微信,加一个群机器人webhook,新订单直接推到群里,店长客服都能看到。

```python

Python示例:企业微信群机器人推送

import requests, json

def notify_merchant(order):

webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key"

msg = {

"msgtype": "text",

"text": {"content": f"新订单:{order['no']}\n金额:¥{order['amount']}\n商品:{order['items']}"}

}

requests.post(webhook, json=msg)

```

五、完整通知链路怎么设计?

画一下完整时序:

```

用户下单 → 前端请求订阅消息授权 → 用户同意 → 提交订单到后端

↓

后端创建订单 → 调微信支付 → 支付成功回调

↓

后端触发通知:

① 给用户发订阅消息(订单支付成功)

② 给商家发短信/企业微信(新订单告警)

↓

发货时 → 后端再给用户发订阅消息(订单已发货)

↓

退款时 → 给用户发订阅消息 + 短信兜底

```

失败兜底逻辑:

• 订阅消息发送失败(用户拒收/过期)→ 自动补一条短信

• 短信也失败 → 记录到日志,商家在后台看告警列表

• 不要因为通知失败就卡住订单流程,通知是异步的

六、常见报错怎么排查?

| 错误码 | 含义 | 解决办法 |

|---|---|---|

| 47003 | 模板字段不匹配 | 检查data里的字段名和模板定义是否一致 |

| 43101 | 用户拒绝接收 | 用户没授权或已删除小程序,走短信兜底 |

| 40001 | access_token无效 | 重新获取token,检查缓存逻辑 |

| 41030 | page路径不存在 | 检查小程序里这个页面是否真的存在 |

| 45009 | 接口调用超上限 | 订阅消息有日限额,超限走短信 |

七、成本估算:一个月通知花多少钱?

假设一个小商城一天30单:

• 订阅消息:免费,一天60条(用户端+发货)

• 短信兜底:假设10%失败率,一天3条短信,约0.15元

• 企业微信机器人:免费

一个月总成本:5块钱以内。 这个钱真不该省,通知不到位流失的订单远比这个多。

结尾FAQ

Q:微信小程序订单提醒怎么做?

A:用订阅消息(前端wx.requestSubscribeMessage授权,后端调subscribe/send接口),配短信做兜底,商家端用企业微信机器人或短信告警。

Q:订阅消息一次授权能发几次?

A:一次性订阅模板,用户点一次授权只能发一条。要在用户每次下单时都弹授权。

Q:模板消息为什么不能用了?

A:微信已经下线旧版模板消息,统一改成订阅消息。老教程里的template/send接口已经失效。

Q:用户没授权订阅消息怎么办?

A:走短信兜底,或者引导用户关注公众号,用公众号推送通知。

Q:商家怎么第一时间知道新订单?

A:企业微信群机器人webhook推群、商家手机短信告警、小程序客服消息,三种任选。

---

*本文基于真实商城项目整理,模板字段和接口参数以微信官方最新文档为准。上线前务必做1分钱测试单验证全链路。*

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。