只要在接口传入这个地址,当支付成功之后,页面最终就会跳转到这个传入的地址,商户侧就可以在地址显示订单是否支付成功。
上面我们提到,用户有可能会使用浏览器回退功能,跳转到支付页,从而导致重复付款。
对于这种情况,我们可以在其回退支付页时,首先向后台查询这笔订单支付结果,如果已支付成功,那就直接显示成功页面。
第二种优化,对于这种重新打开一个页面跳转到银行网站,我们可以在页面加入弹窗提示,询问用户是否已支付完成。
比如上面这种处理方式,当用户点击确认完成充值,可以马上向后台发起查询订单状态。
下面来聊聊事后的解决办法,其实解决办法很简单,发起内部退款,将多余支付的一笔反向退款回去。
支付系统内部可以有个定时任务,定时扫描支付单下有多条成功渠道订单的记录,然后选择将重复支付渠道订单发起退款。
这种方式是支付公司系统内部的操作,不需要商户侧发起指令。
订单失效异常 异常场景这种场景一般常见于电商购物,秒杀等购物场景。当用户下单之后,页面将会开始倒计时,用户需要在有效期内支付成功。
假设用户点击跳转到支付宝,但是其没有立刻支付,而是停留了很久,在订单最后一秒时间内完成了支付,但是这个时候订单早已因为时间到期而被自动取消。
这样就发生用户扣款已经成功,但是订单却是失败或关闭的场景的。
另外还有一种情况,用户在有效期内支付成功,但是因为网络、内部应用等问题,支付结果的异步通知过了很久才收到,这时内部订单的早因为时间到期而被取消。
解决办法第一种解决办法,上送有效期给支付渠道。
一般支付接口都会有一个支付有效期的字段,表明这笔支付最晚可以支付的时间。如果超时未支付,这笔支付将会被关闭。
当然一般情况下,如果未上送,这个字段内部一般会有个默认的有效期,比如 3 天,这个时间就比较长了。
所以当调用支付接口时,可以将订单剩余有效期传入支付接口。这样用户如果在超时时间内未完成支付,支付将会失败。
第二种解决办法,内部发起退款。
这个解决办法依然事后托底的解决办法,对于支付订单已关闭,但是支付却成功的情况,发起内部退款,将钱退给用户。
内部可以有个定时任务,定时扫描支付订单已关闭但是支付却成功的情况,然后发起退款指令。
最后最后用思维导图方式帮大家总结一下支付系统可能会碰到的异常。
对了,文末文章现在已经支持连续阅读了,想查看小黑哥之前写的关于支付其他文章,直接点击下一篇看个爽~
欢迎关注我的公众号:程序通事,获得日常干货推送。如果您对我的专题内容感兴趣,也可以关注我的博客:studyidea.cn