涨见识!支付回调特有的幂等处理方式

简介: 在订单的状态发生改变后,支付宝会通过异步方式同志商家服务器。商家服务器需要返回success这7个字符,如果不是,则会不断重复发送。微信也是如此,必须需要商家服务器的正确反馈。既然这样,在回调接口就需要进行幂等处理。

前言

在订单的状态发生改变后,支付宝会通过异步方式同志商家服务器。商家服务器需要返回success这7个字符,如果不是,则会不断重复发送。


微信也是如此,必须需要商家服务器的正确反馈。既然这样,在回调接口就需要进行幂等处理。


一、什么是幂等?

幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。


细想一下回调接口一般会这样处理:


查看订单是否存在。

修改订单状态。

如果是支付成功状态,则进行发货。

这种逻辑本身是没有什么问题的,但是它不是一个幂等接口,如果收到好几次订单1001支付成功的请求,则会对订单1001的商品多次发货,这就导致了一个订单多次发货的现象,这种在电商开发时是灾难性的bug。


因此,我们需要对此接口做一个处理,使得即使有很多请求都告诉商户服务器订单1001支付成功的请求,商户也只发货一次。


二、如何进行幂等处理

对于这种接口的幂等处理,我也是思量许久,最终决定再生使用修改状态的方式。


具体实现方式如下:


订单表t_order存在订单号1001的订单是未支付状态。

支付宝转账成功,告诉商家服务器订单1001的订单转账成功。

商家服务器验签。

查看订单是否存在,基本信息是否一致。

修改此订单状态。通过update t_order set 状态=已支付 where order_id=1001 and 状态=未支付

通过如上sql乐观锁的思想对发货进行控制,只有sql执行的时候有修改成功,则进行发货,修改失败则不发货。

通过乐观锁可以有效的控制发货次数。不管几次回调通知,只有当前订单是未支付状态并且成功修改成已支付状态之后才进行发货。


如下图,两个sql一起执行修改订单状态,但是肯定只会有一个sql修改成功。


修改成功的线程进行发货即可。


image.png


如果思路有什么缺点,或者您还有更好的实现方式,请留言点评。



相关文章
|
存储
若依框架 --- pdf文件上传预览功能实现
若依框架 --- pdf文件上传预览功能实现
1248 0
LaTeX中定义新命令和环境
LaTeX中定义新命令和环境
1191 0
LaTeX中定义新命令和环境
小知识 .rp文件用什么打开
rp 文件可以通过 Axure8 导入打开,具体方式如下:
5057 0
小知识 .rp文件用什么打开
|
消息中间件 存储 监控
MQ线上大规模消息堆积问题处理及使用场景详解
【11月更文挑战第21天】在如今的高并发互联网应用中,消息队列(Message Queue,简称MQ)扮演着至关重要的角色
998 1
|
8月前
|
存储 弹性计算 数据库
阿里云服务器购买流程:四种主要购买方式图文教程详解与选择参考
阿里云服务器如何购买?当前阿里云提供了自定义购买、快速购买、通过活动购买和通过镜像市场购买四大主流购买模式,本文将通过图文方式为您展示每种购买方式的具体流程与适用场景,以供选择参考。
|
9月前
|
安全 API Python
详解手机状态查询API实战指南
手机状态查询API是一款高效接口,可实时识别手机号状态(实号、空号、风险号等),帮助企业筛选有效号码,提升业务触达率与客户体验。
1198 0
|
10月前
|
消息中间件 监控 Cloud Native
量贩零食上云,原生的最划算
鸣鸣很忙集团作为中国最大的休闲食品饮料连锁零售商,旗下“零食很忙”和“赵一鸣零食”两大品牌已覆盖全国28个省份,门店数量超14000家。通过数字化转型,集团在4年内完成了传统企业10多年的数字化进程,实现了人、货、场的全面数字化管理。借助阿里云的全栈云原生方案,集团构建了弹性计算、大数据分析及智能监控体系,保障日均超430万级交易数据的一致性与稳定性,同时优化IT成本并提升运营效率。
|
人工智能 算法 搜索推荐
算法备案全流程攻略:保姆级教程
在AI热潮下,算法成为互联网服务的核心驱动力,但也带来了大数据杀熟、算法歧视等问题。为规范行业发展,算法备案制度应运而生。该制度涵盖网站、APP等多种产品形式,要求企业在2个月内完成备案,依据《互联网信息服务算法推荐管理规定》等法规。未备案企业可能面临无法上线、罚款甚至刑罚的后果。备案流程包括注册、主体备案、信息填报及审核,确保算法合规运营。通过悬挂备案号、标识AI生成内容和定期自查,企业需持续维护算法安全与合规。
|
算法 Java Sentinel
限流算法(计数器、滑动时间窗口、漏斗、令牌)原理以及代码实现
> 本文会对这4个限流算法进行详细说明,并输出实现限流算法的代码示例。 > 代码是按照自己的理解写的,很简单的实现了功能,还请大佬们多多交流找bug。
2622 0
|
搜索推荐 机器人 数据处理
基于大语言模型的 FireRedTTS 语音合成系统
【10月更文挑战第3天】近年来,随着人工智能技术的发展,基于大语言模型的语音合成系统备受关注。FireRedTTS 系统由郭浩瀚等人提出,旨在满足多样化的语音合成需求。该系统分为数据处理、基础系统和下游应用三部分,通过高质量数据集和语义感知架构生成高保真语音信号。其应用场景包括配音和聊天机器人,能够实现零样本语音克隆和可控类人语音合成,提供自然且个性化的交互体验。然而,系统仍面临计算资源和完全自然语音合成等方面的挑战。[了解更多](https://arxiv.org/abs/2409.03283)
1155 3

热门文章

最新文章