We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
电商支付系统中,如何有效避免用户重复支付?
一楼: 假如,用户多次唤起支付宝但未支付,然后在支付宝里面看到多笔待支付单,再从支付宝里面全部支付.. 则有多笔 我司 同一订单号回调回来
同支付通道做支付信息缓存处理,多次唤起支付宝都是同一个支付单。 不同支付通道(比如先唤起支付宝不支付,再唤起微信),唤起第二个通道的时候同时取消第一个通道的交易。
重复支付问题主要是分两步,第一是生成本系统订单,第二是拿本系统订单去支付。 1 、生成本系统订单,客户端点完提交按钮就置灰,服务端返回订单号,进入待支付页面。 2 、在待支付页面选择支付方式,提交支付,点完提交置灰,生成第三方支付平台的订单。跳转第三方平台去支付,支付完成跳回来,完成支付。
两次置灰能把绝大多数重复请求扼杀在摇篮里。第一步中万一生成了重复的本地订单,因为是带着订单号在本地跳转的,用户全流程都在最后一次(或者初次)生成的订单号流程里,另一个待支付订单只会停留在订单列表。这一步可以加点限流或者自动取消订单操作。 第二步中,如果用户取消支付,在同一个支付平台重新发起支付,第三方支付的订单号是可以复用的,即使重复点击,也不会生成重复的支付宝订单,就不会出现 1 楼说的问题。 再扩展一下,假如用户切换了微信支付,在收到支付成功后可以用本系统订单号取消其他支付宝待支付订单。
1 、让客户端生成 RequestID 没有太大意义,因为重复订单都是客户端自己提交上来的。 2 、并发大的时候用异步想死,用户一定要迅速看到支付结果,如果异步处理订单,用户就有可能看到订单状态没变重复支付。
一个订单生成一个支付单. 切换支付方式取消前面的支付单.
重复支付问题无解的,考虑用程序解决还不如加上退款策略,好多大厂都这样的,重复支付没多久就退回来了
如果是普通商家对接第三方支付,第三方支付就已经做好了防止重复支付相关措施,例如唯一的商户订单号什么的,需要你自己处理的不多。
1 、去支付渠道的订单号如果是唯一的,则支付渠道会保证不会重复支付。 2 、如果发送给支付渠道的订单号不是唯一的,则创建新订单时先通知支付渠道取消之前的订单。
多支付渠道,且支付渠道没有取消支付会话的情况下怎么处理? 这种场景下似乎无解的,只能乖乖标记订单,然后退款
The text was updated successfully, but these errors were encountered:
No branches or pull requests
电商支付系统中,如何有效避免用户重复支付?
一楼:
假如,用户多次唤起支付宝但未支付,然后在支付宝里面看到多笔待支付单,再从支付宝里面全部支付..
则有多笔 我司 同一订单号回调回来
同支付通道做支付信息缓存处理,多次唤起支付宝都是同一个支付单。
不同支付通道(比如先唤起支付宝不支付,再唤起微信),唤起第二个通道的时候同时取消第一个通道的交易。
重复支付问题主要是分两步,第一是生成本系统订单,第二是拿本系统订单去支付。
1 、生成本系统订单,客户端点完提交按钮就置灰,服务端返回订单号,进入待支付页面。
2 、在待支付页面选择支付方式,提交支付,点完提交置灰,生成第三方支付平台的订单。跳转第三方平台去支付,支付完成跳回来,完成支付。
两次置灰能把绝大多数重复请求扼杀在摇篮里。第一步中万一生成了重复的本地订单,因为是带着订单号在本地跳转的,用户全流程都在最后一次(或者初次)生成的订单号流程里,另一个待支付订单只会停留在订单列表。这一步可以加点限流或者自动取消订单操作。
第二步中,如果用户取消支付,在同一个支付平台重新发起支付,第三方支付的订单号是可以复用的,即使重复点击,也不会生成重复的支付宝订单,就不会出现 1 楼说的问题。
再扩展一下,假如用户切换了微信支付,在收到支付成功后可以用本系统订单号取消其他支付宝待支付订单。
1 、让客户端生成 RequestID 没有太大意义,因为重复订单都是客户端自己提交上来的。
2 、并发大的时候用异步想死,用户一定要迅速看到支付结果,如果异步处理订单,用户就有可能看到订单状态没变重复支付。
一个订单生成一个支付单.
切换支付方式取消前面的支付单.
重复支付问题无解的,考虑用程序解决还不如加上退款策略,好多大厂都这样的,重复支付没多久就退回来了
如果是普通商家对接第三方支付,第三方支付就已经做好了防止重复支付相关措施,例如唯一的商户订单号什么的,需要你自己处理的不多。
1 、去支付渠道的订单号如果是唯一的,则支付渠道会保证不会重复支付。
2 、如果发送给支付渠道的订单号不是唯一的,则创建新订单时先通知支付渠道取消之前的订单。
多支付渠道,且支付渠道没有取消支付会话的情况下怎么处理?
这种场景下似乎无解的,只能乖乖标记订单,然后退款
The text was updated successfully, but these errors were encountered: