Stripe Connect 退回平台转账与退款给买家有什么区别
先给结论:在 separate charges and transfers 模式下,退款给买家(refund)和退回平台转账(transfer reversal)是两个独立动作。退款不会自动撤销关联的转账,平台需要自己决定是减少后续转账金额,还是单独发起 transfer reversal 把资金从关联账户收回。如果只做了退款、没有处理转账,平台需自行通过减少后续转账或 reversal 对账,否则这部分资金缺口留在平台侧。
两个动作各自改变什么
- 退款给买家:对平台上的 charge 发起 refund,资金退还给买家。这一步只影响这笔收款,对已经转到关联账户的 transfer 没有影响。
- 退回平台转账:对已创建的 transfer 发起 reversal,可以全额或按 amount 部分退回。退回的金额加回平台可用余额,同时扣减关联账户的可用余额。
也就是说,退款解决“买家拿回钱”,transfer reversal 解决“这笔钱从关联账户回到平台”。两件事要分别核对。
可执行的核对动作
平台在发起退款前,建议按顺序确认三件事:
- 查清这笔 charge 关联了哪些 transfer、各自金额是多少;
- 判断退款金额是否已经超过留在平台侧的余额;
- 决定差额是靠减少后续转账抵扣,还是对指定 transfer 发起 reversal。
如果选择 reversal,还要确认关联账户的可用余额足够覆盖退回金额。按文档,只有当关联账户可用余额大于 reversal 金额(等于不满足),或启用了 connected reserves 时,才可能完成退回;若退回涉及货币转换,且转换后余额归零,会返回错误。另外,文档明确:对关联账户关闭退款功能,不会阻止 transfer reversal 的执行。
一个可复算的例子
假设平台收买家 100 元,随后向关联账户 A 转账 70 元,平台留存 30 元。该分配为示意,不代表 Stripe 默认抽成或费率,仅用于演示机制。
- 买家申请全额退款 100 元:平台执行 refund,100 元退给买家。此时那 70 元仍在关联账户 A,平台侧少了 70 元的覆盖。
- 平台对这笔 transfer 发起全额 reversal:70 元从 A 的可用余额回到平台可用余额。平台再用这 70 元补上退款缺口,两边账才对平。
- 若只发起部分 reversal 40 元:平台收回 40 元,剩余 30 元缺口仍需通过减少后续转账或再次 reversal 处理。
这个例子只说明资金流向,不涉及具体费率或结算时间。
异步支付方式要多一步
使用 ACH Debit、SEPA Debit 这类异步支付方式时,文档要求等 charge.succeeded 事件后再创建 transfer。与 destination charges 不同,Stripe 不会因为关联的异步支付失败而自动撤销 transfer。如果先创建了 transfer、支付随后失败,平台余额会被扣掉 transfer 金额,需要手动 reversal 才能追回资金。因此接入异步支付时,要额外实现失败管理逻辑。
容易混淆的边界
transfer reversal 的使用范围,文档限定为与这笔 charge 相关的退款或争议,或修正转账错误,不应用于其他普通调账。另外,文档提到的 funds segregation 属于 private preview 功能,不在本文讨论的通用流程内,不要按正式能力依赖。
一句话记住:退款对买家,reversal 对关联账户,两个动作分开做、分开核对。