专业的短链接生成工具
链接域名
短网址有效期
产品重复付款异常到底该如何解决?
更新时间:2025-5-4 09:13:24 作者:爱短链
这是一个反复扣除的异常,对于被扣除的用户来说,这是一个非常糟糕的用户体验,所以我们应该避免这种情况。
本文将对此进行分析,希望能对您有所帮助。
在今天的文章中,我们继续讨论支付系统的异常解决方案。
在上一篇文章中「支付单异常解决方案」,我们主要提到的是在支付过程中下单的场景。
用户显然成功支付,银行卡被扣除,但订单仍显示要支付。
在今天的文章中,我们将讨论重复支付的异常情况,即同一订单扣除用户两笔钱。
此外,我们还将提到另一个异常场景,用户扣除成功,但订单支付失败。
对于被扣除的用户来说,上述两种异常的使用体验非常差他们支付了更多的钱,但订单并不成功。
所以如果你不及时处理这两种异常,那就真的在等待投诉。
一、重复付款异常 1. 异常场景 网银支付、微信支付、支付宝等需要跳转到支付网关页面(网银支付)或者跳转到钱包 APP(支付宝、微信),从而异步完成扣款支付场景。
网银支付流程 在这种支付场景下,支付结果只能通过接受异步通知来知道,我们通常称之为异步支付。
PS:有了异步支付,什么是同步支付? 事实上,同步支付是指在调用支付接口后,可以立即返回支付结果。
例如,银行卡快速/代扣等支付是同步支付。
当然,也有一些奇怪的银行卡支付渠道,同步支付结果成功接受,只能接受异步通知或查询返还支付结果。
由于银行卡支付需要返回明确的支付结果,只有内部设计才能将异步变为同步。
如果您感兴趣,您可以阅读以前的历史文章: 架构设计|如何同步处理异步请求? 后台支付流程如下: 网关支付 2. 为什么会发生重复付款? 主要原因与上次内部订单异常相同,与业务表设计有关。
支付系统的主要表结构如下: 在此表结构下,只要支付订单不成功,商家就可以重复使用同一订单号调用支付接口。
假设用户在收银台支付时选择招商银行进行网银支付,当他点击支付时,商户系统会调用支付公司的网银接口。
此时,支付系统将创建支付订单和相关渠道订单,并调用招商银行系统的接口。
然后用户的浏览器页面将打开一个新页面,然后跳转到招商银行网站。
此时,如果用户再次点击收银员的支付,他们将再次呼叫支付系统接口。
此时,由于支付订单已经存在,只会创建另一个渠道订单记录,并呼叫招商银行系统的接口。
此时,用户的浏览器将再次打开招商银行的网站。
如果用户在两个招商银行网银页上完成支付,则会发生重复支付。
上面的场景看起来有点傻,但真正的用户操作确实会发生。
除此之外,博客园的朋友们还提到了以下情况: 3. 解决办法 重复支付异常的主要解决方案有两种,分为事前和事后。
提前的主要目的是防止用户尽可能多地重复付款。
主要解决方案是优化付款页面,并尽可能提示。
「第一种优化方跳转到第三方/银行的网银页面,不要打开新页面跳转。
」 网银同步跳转 这样可以防止用户误打开两个网银支付页面,导致重复支付。
但是这里会有一个问题。
银行网银页面付款成功后,用户如何知道其在商户侧的订单状态也成功? 其实很简单。
现在网银支付界面一般都有参数。
「return_url:同步跳转地址」 。
支付宝开发的文档 只要将此地址传输到接口,当支付成功时,页面最终会跳转到该地址,商户侧可以显示订单是否成功。
支付系统异常处理-同步跳转 正如我们上面提到的,用户可能会使用浏览器返回功能,跳转到支付页面,导致重复支付。
在这种情况下,当我们返回支付页面时,我们可以首先在后台查询订单支付结果。
如果支付成功,则直接显示成功页面。
「第二种优化,我们可以在页面上添加弹出窗口提示,询问用户是否已完成支付。
」 例如,当用户点击确认上述处理方法完成充值时,可以立即向后台查询订单状态。
以下是事后的解决方案,「事实上,解决方案非常简单。
启动内部退款,退还多余支付的反向退款」。
在支付系统中可以有一个定时任务,定期扫描支付订单下多个成功渠道订单的记录,然后选择退款重复支付渠道订单。
这种方式是支付公司系统的内部操作,不需要商户侧的指令。
二、订单故障异常 1. 异常场景 这种场景在电子商务购物、秒杀等购物场景中很常见。
当用户下订单时,页面将开始倒计时,用户需要在有效期内成功支付。
假设用户点击跳转到支付宝,但没有立即支付,而是停留了很长时间,在订单的最后一秒完成了支付,但订单已经自动取消,因为时间到期。
这样,用户扣款成功,但订单失败或关闭。
此外,用户在有效期内成功支付,但由于网络、内部应用等问题,支付结果的异步通知长期收到,内部订单因时间到期而取消。
2. 解决办法 「第一种解决方案是将有效期交付给支付渠道。
」 一般来说,支付界面会有一个支付有效期的字段,这表明支付最迟可以支付。
如果付款超时,付款将关闭。
支付宝开发的文档 当然,一般情况下,如果不发送,这个字段内部一般会有默认有效期,比如 3 天,这个时间比较长。
因此,在调用支付界面时,可以将订单的剩余有效期传输到支付界面。
这样,如果用户在超时间内未能完成付款,付款将失败。
「第二种解决方案是内部退款。
」 这种解决方案仍然是事后支持的解决方案。
如果支付订单已经关闭,但支付已经成功,将启动内部退款,并将钱退还给用户。
内部可以有定时任务,定期扫描付款订单已关闭但付款成功的情况,然后发出退款指令。
三、最后 最后,用思维导图总结支付系统可能遇到的异常。
作者:楼下小黑哥;微信公众号@程序通事、支付行业、后端技术 特别说明:本网站的主要目的是收集与互联网运营相关的干货知识,为运营伙伴提供便利。
本网站收集的公共内容来自互联网或用户的贡献,这并不意味着本网站同意其观点,也不对网站内容的真实性负责。
如有侵权行为,请联系网站管理员删除,。