电商项目之同一笔单多次收款成功

news2025/1/18 3:50:54

在这里插入图片描述

1 问题背景

有个收单系统(简称S系统),作用是收单,相当于支付渠道,能够作为第三方服务对接其他支付平台。电商系统(简称A系统)与S系统是隔离的。A系统发起支付请求给S系统,S系统包装一下(AB站逻辑)再发起支付请求给Stripe。Stripe系统处理完逻辑后会跳回到发起支付时传过去的returnUrlreturnUrl到达的前端页面会通过js代码发起请求(假设请求路径是/pull/pay/result)给S系统,S系统会拉取支付结果。如下图所示:

在这里插入图片描述

问题出现在步骤4,导致A系统的订单状态无法及时翻转。买家看见未支付成功,就第二次发起支付,导致Stripe后台出现了同一笔单多次收款成功。

这个问题,在买家角度去看,核心是支付结果没有及时翻转。在卖家角度去看,买家后续会发起拒付,导致卖家的收款账号被封的可能性提高。

2 前言

本篇为笔者遇到的真实案例

3 S系统的设计初衷

S系统设计的初衷是为了保护商家的收款账号不被封(业务是做不发货业务),因此S系统暂时没有做webhook订阅(如果要做,要做好ab逻辑),导致无法及时从Stripe拿到订单的支付结果,只能依靠自己主动查询。因此在订单状态翻转这块无法100%保证时效性。

由于业务类型不同,S系统在设计之初就做了重点倾斜。针对不发货业务,核心是保护收款账号,收到款就行。针对仿品、普货这些业务,核心是订单状态的翻转,因为卖家要发货。

S系统无法同时兼顾两类不同的业务,必须要有所倾斜。

4 解决方案

  1. 如实跟客户阐述S系统的设计初衷,并将风险告知。(如订单状态无法及时翻转)
  2. 如果是由于网络问题导致流程图中的步骤4 调用/pull/pay/result/报错,需要询问客户投放的国家,看看该国家是否与S系统之间存在网络问题,根据情况 让运维加入全球加速,但是经济成本会增加。
  3. 针对异步延迟拉取支付结果,可以提高拉取频率,或降低延迟时间
  4. 做一个定时调度,将当天内待支付的订单,每隔1min都拉取支付结果
  5. 实现同一笔订单不能支付多次,这样就杜绝Stripe后台出现同一笔单多次收款成功
  6. 针对流程图中的步骤4 调用/pull/pay/result/,前端页面引入监控机制(监控前端页面在调接口的时候是否报错了),但是项目经济成本会提升。同时调用改接口可以加入重试机制。

5 总结

发生生产级别的问题,先不要慌,要从业务角度、技术角度思考什么场景会导致该问题发生?有解决方法吗?运用任何数据去分析排查并结合现有情况给出解决方案。处理问题的方法论见电商项目之处理生产级别问题的方法论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/178149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java高效率复习-坦克大战[Java基础合集]

目录 前言 该文章会从零开始制作一个坦克大战的游戏,该游戏使用Java的AWT和Swing作为窗体和容器,使用面向对象、线程等技术来丰富游戏,本文章相等于Java前期和中期技术的一个合集(对于IO、网络、反射并没有涉及到)。 …

高级Spring之Bean 生命周期

老样子,话不多说,直接上代码: 准备容器: SpringBootApplication public class A03 {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(A03.class, args);context.close(…

【价格型需求响应】基于Logistic函数的负荷转移率模型需求响应研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

前端学习——CSS

文章目录1.CSS1.1什么是CSS1.2快速入门1.3.三种CSS导入方式2.选择器2.1基本选择器2.1.1标签选择器2.1.2类选择器2.1.3id选择器2.2层次选择器2.2.1后代选择器2.2.2子选择器2.2.3相邻兄弟选择器2.2.4通用选择器2.3结构伪类选择器2.4属性选择器3.美化网页元素3.1span标签3.2字体样…

swagger测试Restful API

swagger出现背景 我们构建Restful API的目的通常都是由于多终端的原因,这些终端会共用很多底层业务逻辑,因此我们会抽象出这样一层来同时服务于多个移动端或者Web前端,不同端由不同的团队或者小组负责,为了减少与其他团队平时开发…

LabVIEW将台式电脑转换为 Phar Lap ETS 实时目标

LabVIEW将台式电脑转换为 Phar Lap ETS 实时目标注意:NI将在NI2020软件版本中删除对cRIO的Pharlap和NI2022软件版本中对PXI的支持。更多信息,请参阅PharLapRTOSEOL路线图。您可能已经拥有一台台式PC,可以作为下一个可靠的确定性测试或控制系统…

初识 Express(基于 NodeJS http 模块封装的 Web 框架)

初识 Express(基于 NodeJS http 模块封装的 Web 框架)参考描述Express获取nodemon获取使用使用创建一个基本的服务器基本路由对客户端的 GET 请求进行响应获取通过 GET 方式提交的 URL 参数静态 URL 参数动态 URL 参数静态资源托管服务器public前缀参考 …

steam搬砖,蓝海信息差副业项目

今天就给大家分享下这个steam搬砖项目的玩法,看完你收藏执行,学不会你可以随便骂我!! 首先我们讲一下项目原理: 我们需要利用国外steam平台来赚取差价,简单点就是在游戏里面搬砖购买一些道具,然…

零基础学Python(全彩版)

ISBN: 978-7-5692-2225-8 编著:明日科技 页数:448页 阅读时间:2022-08-14 推荐指数:★★★★★ 一本非常适合入门的Python 3编程教程书籍, 不仅有视频教程还有很多的代码示例, 让你在一步步学习中掌握Pytho…

力扣刷题记录——645. 错误的集合、657. 机器人能否返回原点、674. 最长连续递增序列

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——645. 错误的集合、657. 机器人能否返回…

【vue2】对路由的理解

🥳博 主:初映CY的前说(前端领域) 🌞个人信条:想要变成得到,中间还有做到! 🤘本文核心:vue路由概念、路由写法、路由模式、路由重定向、路由跳转传参方式 目录 一、vue路由概念…

Tkinter的Checkbutton控件

Tkinter的Checkbutton是一个有着许多选项的控件,可以一次选择几个选项 使用方法 var1tk.IntVar() var2tk.IntVar() def printf():if (var1.get()1)&(var2.get()0):L.config(text1)elif (var1.get()0)&(var2.get()1):L.config(text2)elif (var1.get()0)&am…

【docker实践遗留问题】解决个人制作镜像在 dockerhub 上拉取缓慢的问题

目录背景正文1. 创建阿里云docker仓库2. 修改本地 pom 文件尾声背景 通过不断实践,发现了一个问题:dockerHub服务器在国外,虽然拉取一些常用依赖时,可以通过更改镜像源的方式来解决,但倘若是自己制作的docker镜像&…

Python3 条件控制

Python 条件语句是通过一条或多条语句的执行结果(True 或者 False)来决定执行的代码块。 IF-ELSE判断 常用的if-else语句,通常用于二分支结构的条件语句代码。 Python 中用 elif 代替了else if,所以if语句的关键字为&#xff1a…

【机器学习】(西瓜书习题8.5)编程实现Bagging模型,以决策树桩为基学习器,在西瓜数据集3.0a上训练一个Bagging集成,并与教材图8.6进行比较。

(1)问题理解与分析 编程实现Bagging模型,以决策树桩为基学习器,在西瓜数据集3.0a上训练一个Bagging集成,并与教材图8.6进行比较。 (2)Bagging算法原理阐述 若想得到泛化性能强的集成&#xf…

6、算术运算符与算术表达式

目录 一、算术运算符 二、算术表达式 三、优先级与结合性 1. 算术运算符的优先级 2. 算术运算符的结合性 四、自增/自减运算符 一、算术运算符 算术运算符包括两个单目运算符(正和负)和5个双目运算符(即乘法、除法、取模、…

ARP渗透与攻防(六)之限制网速攻击

系列文章 ARP渗透与攻防(一)之ARP原理 ARP渗透与攻防(二)之断网攻击 ARP渗透与攻防(三)之流量分析 ARP渗透与攻防(四)之WireShark截获用户数据 ARP渗透与攻防(五)之Ettercap劫持用户流量 ARP限制网速攻击 大家没想到吧,ARP还能限制对方网速。当kali欺骗了网关和受…

Linux-Ubuntu入门到精通之常用终端指令之操作文件目录和文件内容(2)

常用的终端命令 ctrl shift 放大终端窗口的字体显示 ctrl - 缩小终端窗口的字体显示 按 上/下 光标键可以在曾经使用过的命令之间来回切换 如果想要退出选择,并且不想执行当前选中的命令,可以按 ctrl c . ls 常用选项(白色…

DFS(四)39. 组合总和 1079. 活字印刷

39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复…

flowable定时任务和表单

流程定义定时激活 : act_re_procdef 的 suspension_status ClassPathResource classPathResource new ClassPathResource("hehe/HistoryDemo01.bpmn20.xml");repositoryService.createDeployment().addInputStream(classPathResource.getFilename(),clas…