文章目录
微信支付结果通知是商户系统接收支付完成信息的核心环节。微信通过数据流形式将支付结果发送到商户的指定地址,商户需正确处理通知内容,并按要求返回应答。本文将详细解读微信支付结果通知的工作机制、通知参数及常见注意事项。参考官方:支付结果通知
一、支付结果通知的概述
1. 功能介绍
微信支付结果通知是支付完成后的重要环节,主要用于将支付结果及用户信息发送给商户系统。商户需要通过后台接口接收这些信息,并基于业务需求进行处理。例如:
- 更新订单状态
- 发放优惠券或积分
- 向用户发送支付成功的确认消息
2. 工作流程
微信支付结果通知的主要工作流程如下:
- 用户完成支付后,微信向商户提供的
notify_url
发送通知。 - 商户接收通知并校验签名和金额。
- 商户处理支付结果,并返回应答(如成功处理,返回
SUCCESS
)。 - 如果商户未按时返回或应答无效,微信会重新发送通知,直到成功或通知次数上限。
二、通知的机制和特点
1. 重复通知的处理
支付结果通知可能会多次发送,因此商户系统必须能够正确处理重复通知。建议的做法是:
- 在业务数据中记录每个通知的唯一标识(如订单号
out_trade_no
)。 - 检查订单状态是否已更新为成功,若已更新直接返回应答,无需重复处理。
2. 通知失败的重试策略
当商户应答超时或不符合规范时,微信会判定通知失败并重新发送。通知频率如下:
15s/15s/30s/3m/10m/20m/30m/30m/30m/60m/3h/3h/3h/6h/6h(总计 24 小时 4 分钟)
注意:即使经过多次重试,微信仍不保证最终通知成功。
3. 主动查询订单状态
如果商户在订单状态不明的情况下没有收到通知,可以通过 查询订单API 主动确认订单状态,避免遗漏支付信息。
三、通知参数详解
1. 通信标识与交易标识
支付结果通知的通信标识由字段 return_code
表示,但交易结果的判断需参考 result_code
:
return_code
:通信状态,取值为SUCCESS
或FAIL
。result_code
:交易状态,取值为SUCCESS
或FAIL
。
2. 通知的字段解析
以下是支付结果通知的主要参数及其意义:
字段名 | 描述 | 示例值 |
---|---|---|
appid | 微信分配的小程序ID | wx8888888888888888 |
mch_id | 微信支付分配的商户号 | 1900000109 |
nonce_str | 随机字符串,防止重放攻击 | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS |
sign | 签名,确保通知内容完整性 | C380BEC2BFD727A4B6845133519F3AD6 |
result_code | 交易结果状态 | SUCCESS 或 FAIL |
openid | 用户标识,唯一对应用户 | wxd930ea5d5a258f4f |
total_fee | 订单总金额(单位:分) | 100 |
transaction_id | 微信支付订单号 | 1217752501201407033233368018 |
out_trade_no | 商户订单号 | 1212321211201407033568112322 |
time_end | 支付完成时间,格式 yyyyMMddHHmmss | 20141030133525 |
四、支付结果通知的处理要点
1. 签名验证
商户系统需验证通知内容的签名,确保通知未被篡改。签名验证的步骤包括:
- 将通知参数按 ASCII 字典序排序。
- 拼接商户的密钥。
- 计算签名(默认使用 MD5 或 HMAC-SHA256 算法)。
2. 金额校验
通知返回的订单金额 total_fee
必须与商户系统的订单金额保持一致。若不一致,应当拒绝处理通知。
3. 并发控制与状态校验
为避免并发请求引发的状态混乱,商户应采用以下策略:
- 在处理通知前检查订单状态,防止重复处理。
- 对订单数据操作加锁,确保线程安全。
五、应答格式及示例
1. 应答字段
商户处理成功后,需要同步返回微信以下格式的应答信息:
字段名 | 描述 | 示例值 |
---|---|---|
return_code | 通信标识,SUCCESS 表示通知成功接收 | SUCCESS |
return_msg | 返回信息,可为空 | OK |
2. 应答示例
XML 格式返回示例如下:
<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>
3. 返回注意事项
- 应答必须采用 UTF-8 编码。
- 微信收到
SUCCESS
才会认为通知完成。
推荐: