作者:叁滴水
博客:https://blog.csdn.net/qq_30285985/
前言在订单的状态发生改变后,支付宝会通过异步方式同志商家服务器 。商家服务器需要返回success这7个字符,如果不是,则会不断重复发送 。
微信也是如此,必须需要商家服务器的正确反馈 。既然这样,在回调接口就需要进行幂等处理 。
一、什么是幂等?幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同 。
细想一下回调接口一般会这样处理:
- 查看订单是否存在 。
- 修改订单状态 。
- 如果是支付成功状态,则进行发货 。
1001支付成功的请求,则会对订单1001的商品多次发货,这就导致了一个订单多次发货的现象,这种在电商开发时是灾难性的bug 。因此,我们需要对此接口做一个处理,使得即使有很多请求都告诉商户服务器订单
1001支付成功的请求,商户也只发货一次 。二、如何进行幂等处理对于这种接口的幂等处理,我也是思量许久,最终决定再生使用修改状态的方式 。
具体实现方式如下:
- 订单表
t_order存在订单号1001的订单是未支付状态 。 - 支付宝转账成功,告诉商家服务器订单
1001的订单转账成功 。 - 商家服务器验签 。
- 查看订单是否存在,基本信息是否一致 。
- 修改此订单状态 。通过
update t_order set 状态=已支付 where order_id=1001 and 状态=未支付 - 通过如上sql乐观锁的思想对发货进行控制,只有sql执行的时候有修改成功,则进行发货,修改失败则不发货 。
如下图,两个sql一起执行修改订单状态,但是肯定只会有一个sql修改成功 。
修改成功的线程进行发货即可 。

文章插图
如果思路有什么缺点,或者您还有更好的实现方式,请留言点评 。
【微信支付回调地址设置 涨见识!支付回调特有的幂等处理方式】最后,关注公众号Java技术栈,在后台回复:面试,可以获取我整理的 Java 系列面试题和答案,非常齐全 。
本文来自作者「叁滴水」投稿,谢谢分享,也欢迎爱好技术分享的各位技术朋友向「Java技术栈」投稿,让更多人看到,投稿方式:关注公众号「Java技术栈」在后台回复:投稿 。
近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2021最新版)
2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香!
3.阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!
4.Spring Cloud 2020.0.0 正式发布,全新颠覆性版本!
5.《Java开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
