支付宝同一订单多次退款时手续费何时退回?
支付老李
结论
同一笔支付宝订单分多次退款时,手续费通常会在每次退款成功后,按照本次退款金额占原订单金额的比例退回,无需等到整笔订单全部退完。
手续费会随每次退款累计返还。当累计退款金额达到原订单的可退款金额时,分次计算或四舍五入产生的尾差通常会在最后一次退款时处理。
手续费是否返还、返还比例和到账时间,取决于商户签约产品、费率协议、退款类型及支付宝当期规则。特殊费率、营销补贴、跨境支付等场景可能不适用上述规则,具体应以支付宝商家中心账单和签约协议为准。
手续费如何计算
通常可以用下面的公式估算:
本次应退手续费 ≈ 原交易手续费 × 本次退款金额 ÷ 原订单金额
例如:
原订单金额:100.00 元
原交易手续费:0.60 元
第一次退款:30.00 元
预计退回手续费:0.60 × 30 ÷ 100 = 0.18 元
第二次退款:20.00 元
预计退回手续费:0.60 × 20 ÷ 100 = 0.12 元
两次共退款 50.00 元,预计累计退回手续费 0.30 元。
实际金额以支付宝账单为准。金额精度、舍入方式和费率优惠都可能导致分次计算结果与上述公式相差几分钱。
处理时点
手续费返还通常与退款结果同步处理:
- 商户提交退款请求。
- 支付宝处理退款。
- 退款成功后,系统生成退款及相应的手续费返还账务。
- 商户在资金账单或财务明细中核对实际入账结果。
支付宝显示”退款成功”,不代表款项已经到达消费者的银行卡。退款退至银行卡、余额或其他支付渠道时,到账时间可能不同。商户侧判断手续费是否调整,应以支付宝退款成功状态和账务入账记录为准。
如果退款仍在处理,或者退款失败、请求被拒绝,通常不会返还相应的手续费。
多次退款的正确处理方式
调用 alipay.trade.refund 时,每次退款都应使用不同的 out_request_no。该字段用于标识独立的退款请求,也可避免网络重试导致重复退款。
{
"out_trade_no": "ORDER_202609090001",
"refund_amount": "30.00",
"out_request_no": "ORDER_202609090001_REFUND_01",
"refund_reason": "部分商品退款"
}
第二次退款需要更换退款请求号:
{
"out_trade_no": "ORDER_202609090001",
"refund_amount": "20.00",
"out_request_no": "ORDER_202609090001_REFUND_02",
"refund_reason": "剩余商品部分退款"
}
应用侧应分别保存每次退款的请求号、金额和处理结果,不能只记录订单的累计退款金额。
BigDecimal orderAmount = new BigDecimal("100.00");
BigDecimal originalFee = new BigDecimal("0.60");
BigDecimal refundAmount = new BigDecimal("30.00");
BigDecimal estimatedRefundFee = originalFee
.multiply(refundAmount)
.divide(orderAmount, 2, RoundingMode.HALF_UP);
System.out.println(estimatedRefundFee); // 仅用于内部预估
这段代码只能用于财务预估,不能替代支付宝的实际账单。最终返还的手续费金额应通过商家中心或账单接口核对。
如何核对手续费是否退回
可以按以下顺序排查:
- 确认每次
alipay.trade.refund请求是否成功。 - 核对各次退款使用的
out_request_no是否唯一。 - 检查累计退款金额是否超过订单剩余可退款金额。
- 在支付宝商家中心查看资金账单、业务账单和手续费明细。
- 关联原支付流水、各次退款流水及手续费返还流水。
- 如果退款已经成功,但账单长期没有手续费调整,可携带支付宝交易号、商户订单号和退款请求号,向支付宝技术支持核实。
注意事项
- 判断手续费是否返还时,应查看商户账单,不要以消费者的到账时间为准。
- 手续费通常退回商户的支付宝结算账户,或以账务冲抵的形式体现,不一定会形成单独的银行卡入账。
- 多次退款的累计金额不能超过原订单剩余可退款金额。
- 支付手续费、营销费用、分账费用和跨境费用属于不同费用类型,退款规则可能不同。
- 对于已经结算、发生分账或包含优惠补贴的订单,账务处理可能还有额外步骤。
- 对账程序应支持手续费分次返还和尾差调整,不应要求每次返还金额都与简单比例计算结果完全一致。
备注:内容仅供参考。
