/api/v1/order/refund、/api/v1/refund/inquiry、退款订单通知)。
同一笔订单可以退款多次吗?
取决于支付方式和您的合同配置:- 支持多次部分退款——每次退款都会校验
已退款 + 处理中 + 本次请求 ≤ 原支付金额。生产环境
单笔订单最多允许 50 次退款;超出后返回
错误
A0027。Sandbox 和测试环境的上限更低,所以在那里 仅几次退款后就遇到A0027是正常现象,不是 bug。每个退款响应都包含remainingRefundAmount,方便您 跟踪仍可退款的金额。 - 不支持——订单完成一次退款后,任何 后续退款请求都会被拒绝。
refundStatus)置为 ORDER_PARTIALLY_REFUNDED;只有当成功退款的总金额等于
订单金额时才变为 ORDER_FULLY_REFUNDED。订单的 orderStatus 本身不会因退款而改变——
已全额退款的订单仍然显示 PAY_SUCCESS。
我的退款为什么被拒绝了?
退款请求必须通过以下所有前置条件:
有效期和多次退款支持
取决于合同——请在商户 Portal 中查看您的合同,或联系
集成支持了解您的确切配置。
我的退款请求超时了,可以安全地重发吗?
可以。refundRequestId 是幂等键:
- 用相同 ID 和相同金额重发会返回当前退款 状态;如果退款仍处于中间状态,会推进处理。
- 用相同 ID 但不同金额重发会被拒绝。
refundRequestId。
跨币种退款金额是怎么计算的?
当用户以不同于您订单币种的币种支付时,您提交的 退款金额(订单币种)会换算为用户的 币种。适用两条规则:- 向下取整——换算后的退款金额始终向下取整,因此 退款总额永远不会超过用户实际支付的金额。
- 最后一笔补齐——多次部分退款时,汇率取整可能
让退款总额略低于支付金额。耗尽剩余余额的最后一笔
退款会返还全部余额,因此
全额退款的订单确实能到达
ORDER_FULLY_REFUNDED。
finalDealAmount 是用户以其币种
实际收到的金额。
我取消了订单,但用户说已经付款了
取消只对仍处于中间状态的订单有效。如果 用户实际上已完成支付,取消请求会失败, 订单按支付成功继续——您会收到支付成功 通知。此时要退回资金,请使用退款 API;不要 重试取消。退款要多久?状态一直是处理中
退款是异步的。/api/v1/order/refund 调用成功表示
请求已被接受(REFUND_IN_PROGRESS),不表示已完成。随后 Waffo
与支付方式处理退款,并对可恢复的失败自动重试,
直到到达最终状态。
- 提供
refundNotifyUrl以通过退款 订单通知接收最终结果,或轮询/api/v1/refund/inquiry。 - 只有在
ORDER_PARTIALLY_REFUNDED、ORDER_FULLY_REFUNDED或ORDER_REFUND_FAILED时退款才是最终态——请把REFUND_IN_PROGRESS视为待处理,而不是失败。
所有支付方式都支持 API 退款吗?
不是,并且有两种不同的情形。 **不允许退款。**两个错误码,两种含义。A0017(“payment channel
not supported”)表示支付方式本身无法承载退款——无论全额还是
部分。A0014(“refund rules”)表示该方式可以退款,但您
协议的退款形态不允许这一次请求:在仅允许全额退款的行上发起
部分退款,或在仅允许一次退款时发起第二次退款。请求
超过剩余可退金额则是第三种情形——普通的
A0003 参数错误。见
各支付方式退款限制。
**需要额外字段的退款。**有些退款需要额外的用户
信息,例如银行账户信息,因为资金是通过
转账退回而不是在原支付上冲正。**需要哪些字段
按通道配置,所以不要在您自己的代码中根据支付
方式来判断。**先提交退款;如果缺少字段,API
返回 A0003 并附上缺失字段名列表,您补齐这些字段后
重发即可。
对于某些支付方式,退款在 Waffo 侧通过 Payout 通道执行——
您的 API 契约保持不变。
我可以一次提交很多笔退款吗?
可以——Portal 交易模块下的批量退款页面。它 按商户账户启用,所以如果该页面不存在,说明尚未为您 开通;请联系支持团队。模板和上传按钮仅对 已能发起单笔退款的角色可见。 流程是:导出批量退款模板(CSV),填写,上传, 确认汇总对话框(记录数、总金额、币种),然后 Waffo 创建一个 Refund Batch ID,格式为BRP + MID + YYYYMMDD + 6 位
序号——例如 BRP<your merchant ID>20260225000001。
我整个批量文件被拒了,为什么?
上传校验是全有或全无:一行出错就拒绝整个文件, 您修正后重新上传即可。校验内容:- 文件——必须是导出的 CSV 模板,恰好包含其四 列且无多余列;未损坏、未加密、非空;最多 2,000 条记录和 2 MB;且不是之前已上传过的文件 (重复通过文件内容而非文件名检测)。
- 币种——整个文件只能有一个退款币种,且必须等于 每笔原订单的币种。
- 每一行——原订单存在、已支付且尚未全额 退款、其支付方式允许退款、仍在退款 有效期内、金额大于零且不超过剩余可退 金额,且该订单没有正在处理中的退款。
- 重复——同一订单不能在一个批次中出现两次。
- 批次总额——文件总额必须能被您上传时的 待结算余额加退款备用金余额覆盖。
提交批次后怎么跟踪?
各行独立处理:失败的行会标注原因, 其余继续——一行失败不会停止整个批次。
批次列表显示总数 / 成功 / 失败 / 处理中的计数、批次
金额和币种,以及创建和更新时间。每笔退款都带有
其 Refund Batch ID,因此您可以按批次筛选退款列表,照常打开任何
单笔退款的详情,并导出包含
失败原因的批次结果。批次没有重试操作——请把失败的
行放到新文件中重新提交,或逐笔退款。