)
2)重复支付+退款接口
如果重复支付的订单尚未与第三方支付平台结算,则:
在用户支付成功后,商户系统是可以判断是否为重复支付,商户系统可以自动调用退款接口,对判定为重复支付的订单发起退款请求(商户平台订单号+支付平台支付流水号)。
也可以由商户运营人员在运营后台发起退款请求(本质上也是调用退款接口)。
(郑昀注:电商平台的支付中心必须能够判定重复支付,并自动发起原路退返。
举个例子,
10点01分:订单001,应付金额10元,用户选择支付宝发起支付,out_trade_no=XX_001_0001,用户登录支付宝后产生了应付账单,但未付款;
10点02分:订单001,用户修改购买份数,应付金额变更为5元,用户选择支付宝发起支付,out_trade_no=XX_001_0002;
10点03分:用户把XX_001_0001和XX_001_0002都付款成功了;
10点03分10秒:XX_001_0001的支付成功通知到达。电商平台的支付中心标记该交易支付成功,但因该交易关闭而不再路由给订单中心,订单状态不会发生变化。有专门的定时任务处理这种异常交易,T+N 天后如果用户仍没有处理,那么系统会自动发起原路退返,退到用户支付宝账户10元;
10点03分20秒:XX_002_0002的支付成功通知到达。电商平台标记订单为已付款状态,同时标记该订单有重复支付,用户如果登录到商城,会收到站内消息通知,个人中心页面也有提示。
)
3)批量代付退款
如果重复支付的订单已经与第三方支付平台已经结算(第三方支付与银行也完成对账、结算),则:
对在线支付,一般采用批量代付的方案,将重复支付订单退款与提现、转账等业务以批量文件方式提交给代付渠道代付出去。
如果是POS收单,可以采用冲正、消费撤销、退货等命令,对重复支付的订单进行反向交易。在线支付一般较少采用冲正方式。
另外在商户端,为避免重复支付,在业务逻辑上也可以做一些处理,包括:
1、保证交易订单号的唯一性。很多商户系统开发能力有限,经常出现交易订单号不唯一的情况。
2、在发起支付请求后,更改订单状态,避免用户再次发起支付请求。(慎用,只不过在一些业务场合会也会采用此种方案)。
3、对因掉单等原因引起的订单状态未知的情况,先调用第三方支付接口的查询接口确认订单的支付状态。
(出处2)