一、问题背景
这两天被问了这么一个问题,所以才开启了这个话题。问题如下:
支付中心一般都是由交易系统和支付系统两大系统构成,其中交易系统主要是处理跟商户或用户的请求,创建相关订单并发起支付,支付系统主要是处理跟支付通道的对接,将支付请求转给支付通道并处理响应。正常用户发起支付请求,交易系统创建交易订单,给到支付系统,支付系统创建支付单,并记录跟交易订单的关系,给到支付通道。但是如果遇到退款或者拒付的情况,想问一下,对于这种逆向订单,交易系统和支付系统还要创建新的逆向单号么
二、问题解决
1. 正向支付(正常支付流程)
-
交易系统
-
面向商户和用户,负责生成业务层面的 交易订单号(Trade Order ID),一般是平台唯一订单标识。
-
订单状态:待支付、支付中、支付成功、支付失败。
-
主要职责:记录交易请求、订单金额、商品、商户信息。
-
-
支付系统
-
面向支付通道(银行、Google Pay、Apple Pay、银联等)。
-
负责生成 支付单号(Payment ID),与交易订单一一或一对多关联。
-
订单状态:已受理、支付中、成功、失败。
-
主要职责:处理支付路由、下发支付请求、接收通道回调、通知交易系统。
-
正向链路举例:
用户下单 → 交易系统生成交易单 T202509090001
→ 请求支付系统 → 支付系统生成支付单 P202509090001
→ 调用 Google Pay / Apple Pay → 通道返回结果 → 支付系统更新支付单 → 交易系统更新交易单。
2. 逆向订单(退款 / 拒付场景)
为什么需要新的逆向单号?
-
审计 & 幂等性:退款/拒付不是简单修改原单状态,而是一个新的资金流向,必须有独立编号。
-
对账:正向支付与逆向交易需要分开记录,以便资金对账清晰。
-
风控:拒付、退款可能原因复杂(欺诈、用户发起、银行撤销等),单独单号便于跟踪溯源。
-
通道要求:支付通道(如银行、Google、Apple)通常要求每笔退款/拒付有唯一的 Refund ID/Dispute ID,不能直接复用支付单号。
3. 逆向订单在系统中的处理
-
交易系统
-
会生成 退款单号 / 拒付单号(Trade Refund ID)。
-
与原始交易订单关联(例如
T202509090001-R01
表示交易单T202509090001
的第一次退款)。 -
状态:退款申请中、退款中、退款成功、退款失败;拒付处理中、拒付成功、拒付失败。
-
-
支付系统
-
同样需要生成 支付退款单 / 支付拒付单(Payment Refund ID / Payment Dispute ID)。
-
与支付单绑定(例如
P202509090001-R01
)。 -
状态:受理、处理中、成功、失败。
-
记录与支付通道(如 Google Pay API、Apple Pay API)的交互流水号(Refund Txn ID / Chargeback ID)。
-
4. Google Pay 的处理逻辑
-
Google Pay 本身并不直接做资金清算,而是作为 代扣渠道。
-
商户集成 Google Pay API 后,实际交易和退款要通过 网关/收单行/处理器。
-
对退款:
-
商户系统必须生成 Refund ID 并调用收单行的退款 API;
-
Google Pay 只会作为支付授权入口,退款状态依赖收单行返回;
-
退款单号在 交易系统和支付系统都需要单独记录,因为对账和风控都要追溯。
-
5. Apple Pay 的处理逻辑
-
Apple Pay 类似,它是 支付凭证(Tokenized Card)提供方,不做清算。
-
商户发起退款时:
-
必须生成 Refund ID,调用网关/收单行的退款接口;
-
Apple Pay 不会帮你生成退款单,商户/支付系统必须自行生成并追踪;
-
对于拒付(chargeback),通常由发卡行触发,商户会收到异议单(Dispute/Chargeback ID),需要在支付系统和交易系统中挂载独立单号处理。
-
6. 设计对比总结
系统角色 | 正向支付(订单/支付单) | 逆向交易(退款/拒付单) |
---|---|---|
交易系统 | 生成交易订单号(Trade Order ID) 记录商品/金额/商户信息 |
生成退款单号 / 拒付单号(Trade Refund/Dispute ID) 关联原交易单,追踪用户维度请求 |
支付系统 | 生成支付单号(Payment ID) 与交易单对应,调通道 |
生成退款/拒付支付单号(Payment Refund/Dispute ID) 与原支付单对应,调通道退款接口 |
Google Pay | 提供支付授权 & Token,商户生成支付单 | 不生成退款单,商户需生成退款单号并调收单行退款 API |
Apple Pay | 提供支付 Token,商户生成支付单 | 不生成退款单,商户需生成退款单号并调网关/收单行退款 API |
✅ 结论:
无论是退款还是拒付,交易系统和支付系统都需要生成新的逆向单号,分别记录在交易层和支付层。
-
交易系统:关注业务维度、用户/商户可见。
-
支付系统:关注资金维度、通道可见。
-
Google Pay / Apple Pay:本身不管理逆向单,依赖商户/支付中心自行生成并与收单行交互。