咖友提问: 如何设计避免订单出现重复支付的逻辑?

问题补充:假设有这么一种情况:

订单已下单成功并且正处于支付页面,用户调起支付网关进行支付。支付成功了一次,但是由于某种情况导致未接收到银行返回的【支付成功】等信号,系统此时还是认为未支付成功。用户此时又支付了一次并且成功了。

问题:

  • 如果用户出现了2次支付并且都成功了,后台逻辑退款这一块如何设计?

  • 是否可以避免这种情况的发生?如果可以怎么去避免呢。


来自 @妖之皇 的回答:

一、后台设计逻辑:

1、参与的主体:

  • 电商系统;

  • 网银或者第三方支付平台;

  • 电商用的结算平台(如:商户支付宝和商户翼支付)

2、设计的主要流程:

电商系统调起网关支付,订单跳转到网银或者第三方支付平台中进行实际支付,这时订单中包含的信息是由电商用的结算平台先生成的一个支付订单信息(这个支付信息包含与电商系统与网银或者第三方支付平台的关联);用户在网银或者第三方支付平台中进行实际支付(这个支付交互是网银或者第三方支付平台与结算平台的交互),成功之后才是结算平台反馈支付信息给电商系统。下列图中:

①是用户调起网关支付,订单跳转到网银或者第三方支付平台中进行实际支付;

②是用户支付成功后,订单反馈至电商系统。

现在出现重复付款的问题就是出现在中的网银或者第三方支付平台到电商用的结算平台出现了延迟的情况,导致在电商系统中的订单一直处于未付款状态,部分用户以为未支付就最终产生了重复付款。

二、如何避免

针对这个问题,思考了各种场景以及情况,这种模式是无法避免重复付款的(必须得看结算平台的处理效率-一般情况下还是比较好的,还是少有延迟的情况)。只能后台检测重复付款的订单,异常走退款流程。

除非系统本身具有支付平台的功能。

三、延伸问题,如何处理因为支付成功后因延迟回调而订单被取消

这个问题的出现背景也是因为第三方结算平台延迟反馈而造成用户错以为没有支付而取消订单或者是系统到时时自动取消订单。

解决办法:建立异常处理机制。 结算平台延迟返回成功的支付信息给电商系统时,如果判断出此订单已经取消。则进入异常处理机制,更改订单为已收款状态,并再次扣减订单中库存以及各种优惠(例如:价保,返利,促销费,优惠等等)的回退。当然再此扣减的时候需要先判断相关产品的库存以及用户的各种优惠是否满足订单的扣减,不满足则不允许转化。

这里是应该先判断再次扣减的库存以及各种优惠,再修改订单状态,步骤以及相关的支付信息为成功。


本文由PMCAFF产品经理社区会员原创发布于社区(www.pmcaff.com),未经许可,禁止转载。

如何避免订单重复支付?相关推荐

  1. 在线支付——如何防止订单重复支付?

    看看订单支付流程 我们来看看,电商订单支付的简要流程: image.png 订单钱包支付流程 从下单/计算开始: 下单/结算:这一步虽然不是直接的支付起点,但是支付相关的金额等等信息都来自结算,此时订 ...

  2. 如何防止订单重复支付

    想必大家对在线支付都不陌生,今天和大家聊聊如何防止订单重复支付. 看看订单支付流程 我们来看看,电商订单支付的简要流程: 订单钱包支付流程 从下单/计算开始: 下单/结算:这一步虽然不是直接的支付起点 ...

  3. 如何防止订单重复支付?

    大家好,我是磊哥,想必大家对在线支付都不陌生,今天和大家聊聊如何防止订单重复支付. 看看订单支付流程 我们来看看,电商订单支付的简要流程: 订单钱包支付流程 从下单/计算开始: 下单/结算:这一步虽然 ...

  4. 服务端如何防止订单重复支付!

    点击关注公众号,Java干货及时送达 作者:废物大师兄 www.cnblogs.com/cjsblog/p/14516909.html 如图是一个简化的下单流程,首先是提交订单,然后是支付.支付的话, ...

  5. 支付宝:服务端如何防止订单重复支付?

    概述 如图是一个简化的下单流程,首先是提交订单,然后是支付. 支付的话,一般是走支付网关(支付中心),然后支付中心与第三方支付渠道(微信.支付宝.银联)交互. 支付成功以后,异步通知支付中心,支付中心 ...

  6. 深聊测试开发之:从订单支付流程来聊一聊,如何预防重复支付,建议收藏。

    如何预防订单重复支付 1. 引言 2.订单支付流程 2.1 支付流程 2.2 订单状态 3.订单重复支付原因 3.1 掉单 3.2 未防重 3.3 多渠道 4.防止重复支付 4.1 加锁 4.2 缓存 ...

  7. 支付系统流程以及防止订单重复提交

    支付流程图 如图是一个简化的下单流程,首先是提交订单,然后是支付.支付的话,一般是走支付中心,然后支付中心与第三方支付渠道(微信.支付宝.银联)交互,支付成功以后,异步通知支付中心,支付中心更新自身支 ...

  8. java服务端实践:防止订单重复提交支付

    来源:cnblogs.com/cjsblog/p/14516909.html 概述 为了防止掉单,这里可以这样处理: 为了防止订单重复提交,可以这样处理: 附上微信支付最佳实践: 概述 如图是一个简化 ...

  9. java怎么解决重复支付问题_支付系统设计中,如何防止重复支付?

    wallet-2292428_1280.jpg 在我们支付系统设计中,经常会遇到这样一个问题,防止用户重复支付.用户明明只想购买一次,却因为系统问题,导致重复支付,带来额外的物流成本和扯皮退货的运营成 ...

最新文章

  1. 0715PHP基础:文件操作
  2. 自己制作 Windows Server 2008中文版
  3. 使用@functools.wraps的理由
  4. 养成这6个编程好习惯,助你减少90%BUG
  5. Matlab 集群计算平台搭建
  6. java socket 阻塞模式_(四) 如何将socket设置为非阻塞模式
  7. sh脚本和bash脚本_在脚本中使用Bash陷阱
  8. java中枚举表示数据状态
  9. 老子《道德经》第三章
  10. python删除excel第一行_如何用 Python 清洗数据?
  11. 【信号处理】基于高阶统计量特征的通信系统中微弱信号检测附matlab代码
  12. MySQL 命令无效问题
  13. 二级缓存j2cache和SpringBoot整合
  14. 8年Python程序员,去2线城市大厂面试崩了……网友:太真实!
  15. Chrome 里的小恐龙游戏是怎么做出来的?
  16. js通过base64编码显示图片
  17. 双机热备 ip地址_双机热备软件哪个好?双机热备软件推荐
  18. 对校招生培养工作的建议_对我校招生工作的一些粗浅想法(精)
  19. windows terminal ssh连接
  20. 调谐质量阻尼器matlab,调谐质量阻尼器的组成及工作原理

热门文章

  1. 阿里宣布成立云原生技术委员会,释放哪些趋势信息?
  2. 理解 K8s 资源更新机制,从一个 OpenKruise 用户疑问开始
  3. 云原生生态周报 Vol.9| K8s v1.15 版本发布
  4. java 根据预览图片上传_JavaSctit 利用FileReader和滤镜上传图片预览功能
  5. html文本可选择,如何用javascript选择html文本?
  6. android 请求参数打印,android retrofit 请求参数格式RequestBody的方法
  7. yoman不压缩html,使用Yeoman构建vuejs
  8. vmware虚拟机迁移到hyperv_ProxmoxVE 之 V2V迁移(vmware-PVE)
  9. 不错php文件缓存类,一个不错的PHP文件页面缓存类
  10. 搜狗浏览器收藏夹在哪_是时候换个快速安全的浏览器了,这一次它一定不负众望...