支付中心-重复支付问题解决方案

一笔订单,可以做多笔支付,怎么解决?

重复支付的异常背景

  1. 一笔订单,在支付中心可以选择多种支付方式。如支付宝扫码,支付宝app,微信扫码,微信小程序,银联…
  2. 用户选择支付方式后,系统需要和第三方进行交互,获取到结果后,可能跳转到第三方收银台,也可能在当前页面展示收款二维码;
  3. 用户打开一种支付方式,没有完成付款的情况下,又选择打开了其他支付方式。如准备用微信支付,打开收款二维码后,发现微信余额不足,遂即打开支付宝支付,此时两个支付方式都可以做支付操作。
  4. 由于产生待支付单后,支付状态是不可控的,支付状态由第三方回调信息中获取。所以很难控制支付单的再次产生。

概念解释:

  1. 支付单:具体的支付方式,如 支付宝的扫码支付,微信小程序支付
  2. 一个订单对应多个支付单,但一个订单下 只允许出现 一笔成功的支付单

支付流程

支付流程是一套异步的操作。

  1. 用户选择支付方式
  2. 跳转到对应的收银台
  3. 用户支付成功
  4. 第三方回调系统
  5. 修改订单状态

不可控的因素是在第三和第四步。

解决方案

第一步

用户的一个订单,选择支付方式触发第三方支付平台之前,先扫描该订单下的待支付订单,如果存在,调用其订单关闭接口,使之前的待支付单立即失效。然后再创建新的支付单做支付。

理想状态下,创建的支付单可以随时关闭,这就可以完美解决重复支付问题。

不完美的情况:支付宝的扫码支付可以随时关闭支付订单,但是支付宝的电脑网站支付,必须在用户扫码后才能关闭支付订单。(这一点被坑了很久),应对此问题,解决方案还需要往下走。

第二步

用户支付成功后,收到第三方的回调通知,修改订单状态后,再次扫描待支付的订单,对其进行关闭订单的操作。

这个步骤,不仅是对第一步的加强,也是可以适应不同的需求场景。如:一个业务方常用的是微信和支付宝两种支付方式,为了减少和支付中心的交互次数,就在创建订单的时候,替用户创建了这两种支付的二维码,让用户选择使用,这种情况下就不能对待支付单做立即关闭了,否则只有一个二维码是生效的。

所以创建订单时加了一个选择策略来控制是否立即关闭历史支付订单。然后用第二步来兜底。

到此还是不能完全解决重复支付,原因如下:

  1. 支付宝的不能及时关闭,到此不一定能完全解决。
  2. 部分银行的接口功能中,没有提供及时关闭订单的功能。
第三步

针对以上策略下的漏网之鱼,还需采取补偿策略:

定时任务:定时对账,通过定时任务,扫描那些支付成功,且实际支付金额大于应收金额的支付单,或者说一个订单号,存在多笔成功的支付订单的数据。按时间顺序,将后面支付的支付单做主动退款。

这一步还是不能完全解决问题。原因:部分支付平台不支持退款,这种情况下,无法做到主动退款,只能依赖人工操作。

第四步

最后的无奈之举:发现重复支付的支付单数据,且没有退款接口可用时。发起一条工单,通知到运营端,让运营去人工处理。

CLC

支付中心-重复支付问题解决方案相关推荐

  1. 支付中心-重复支付问题解决

    支付中心-重复支付问题解决方案 一笔订单,可以做多笔支付,怎么解决? 重复支付的异常背景 一笔订单,在支付中心可以选择多种支付方式.如支付宝扫码,支付宝app,微信扫码,微信小程序,银联.... 用户 ...

  2. 支付中心设计-支付通道

    随着支付业务量激增,支付团队不断壮大.为了满足日益增长的业务需求,大量的支付通道逐渐接入,但由于对接的各银行和第三方系统的稳定性参差不齐,支付通道故障时有发生,作为承接上下游的核心系统,要在一系列不稳 ...

  3. 支付中心,防止重复支付的一些思路!

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

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

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

  5. 一份完整的聚合支付中心设计方案!

    来源:https://blog.csdn.net/liuzhirou1/article/details/117649569 一.项目目标 支付中心架构将各业务的公共交易.支付.财务等沉淀到支付中心,并 ...

  6. 完整的聚合支付中心设计方案

    一.项目目标 二.具体调用流程 三.支付中心架构设计 收银台 渠道网关 交易核心 四.目前预见的可能的问题 一.项目目标 支付中心架构将各业务的公共交易.支付.财务等沉淀到支付中心,并主要解决了以下三 ...

  7. .Net架构篇:实用中小型公司支付中心设计

    前言 说起支付平台,支付宝量级的支付平台和一个小型公司的支付不可同日耳语.一个初创或刚创业一两年的公司,一没人力,二没财力的情况下,如果也想对接支付那怎么办呢?感谢支付宝和微信支付,两大行业巨头提供了 ...

  8. 马蜂窝支付中心架构演进

    点击上方"马蜂窝技术",关注订阅更多优质内容 为了更好地支持交易业务的快速发展,马蜂窝支付中心从最初只支持基础支付和退款的「刀耕火种」阶段,经历了架构调整的「刮骨疗伤」阶段,完成了 ...

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

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

最新文章

  1. 【CSON原创】HTML5游戏框架cnGameJS开发实录(精灵对象篇)
  2. 搞懂正则表达式之基础篇
  3. 没想到单位的bt下载的速度可以到这么快,满意了
  4. 跟我一起学Redis之加个哨兵让主从复制更加高可用
  5. Python面试笔记二
  6. django 安装/部署过程
  7. java ldap tls_ldap之tls 双向认证要我命
  8. 数据结构笔记(四)-- 静态链表实现
  9. Python题库——答案
  10. ChinaITLab-Linux工程师培训课程笔记2
  11. 代码实现数学图形之常用函数,幂,对数,指数,正弦,余弦,正切,余切,反正弦,反余弦,反正切,反余切,双曲正弦,双曲余弦,双曲正切,双曲余切,正割函数,余割函数,双曲正割,双曲正割.
  12. Win10电脑系统使用技巧
  13. React Native引用三方库报错underfined is not an object(evaluating 'viewproptypes.style')
  14. OPENSTACK-210-3-配置网络(Configure networking)-命令行
  15. 美颜SDK有什么用?美颜SDK可以在直播和短视频中有哪些作用?
  16. 智商情商哪个重要_情商与智商,到底哪个更重要?
  17. Wap开发技术问题大全
  18. 【Qt OpenGL教程】14:轮廓字体
  19. 拼多多面试——机器学习岗位面经
  20. amd服务器6300系列,AMD新款Opteron 6300服务器CPU终极评测

热门文章

  1. 在CentOS中开启mysql服务
  2. 屏蔽百度热搜及首页热榜
  3. access设计视图打不开_19、ACCESS操作查询之“删除查询”(ACCESS图解操作系列)...
  4. 华为网络设备交换机路由器查看ARP表项命令方法
  5. Python_杂学系列_1.有趣的小程序
  6. 获取英文期刊的封面及目录
  7. 调查了 12,000 名女性开发者发现,女性比男性更懂 Java!
  8. 屏蔽系统分区默认共享及关闭smb服务
  9. Java基础(四)(根据尚硅谷宋红康老师Java基础第四部分)(重点)
  10. CSS3 animation(动画)属性详解