• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:服务端如何防止订单重复支付

java 搞代码 4年前 (2022-02-14) 21次浏览 已收录 0个评论

如图是一个简化的下单流程,首先是提交订单,而后是领取。

领取的话,个别是走领取网关(领取核心),而后领取核心与第三方领取渠道(微信、支付宝、银联)交互,领取胜利当前,异步告诉领取核心,领取核心更新本身领取订单状态,再告诉业务利用,各业务再更新各自订单状态。

这个过程中常常可能遇到的问题是掉单,无论是超时未收到回调告诉也好,还是程序本身报错也好,总之因为各种各样的起因,没有如期收到告诉并正确的解决后续逻辑等等,都会造成用户领取胜利了,然而服务端这边订单状态没更新,这个时候有可能产生投诉,或者用户反复领取。

因为③⑤造成的掉单称之为内部掉单,由④⑥造成的掉单咱们称之为外部掉单

为了避免掉单,这里能够这样解决:

1、领取订单减少一个中间状态“领取中”,当同一个订单去领取的时候,先查看有没有状态为“领取中”的领取流水,当然领取(prepay)的时候要加个锁。领取实现当前更新领取流水状态的时候再讲其改成“领取胜利”状态。

2、领取核心这边要本人定义一个超时工夫(比方:30秒),在此工夫范畴内如果没有收到领取胜利回调,则应调用接口被动查问领取后果,比方10s、20s、30s查一次,如果在最大查问次数内没有查到后果,应做异样解决

3、领取核心收到领取后果当前,将后果同步给业务零碎,能够发MQ,也能够间接调用,间接调用的话要减轻试(比方:SpringBoot Retry)

Spring Boot 举荐学习教程:

https://github.com/javastacks…

4、无论是领取核心,还是业务利用,在接管领取后果告诉时都要思来源gao@!dai!ma.com搞$$代^@码网考接口幂等性,音讯只解决一次,其余的疏忽

5、业务利用也应做超时被动查问领取后果

对于下面说的超时被动查问能够在发动领取的时候将这些领取订单放到一张表中,用定时工作去扫

为了避免订单反复提交,能够这样解决:

1、创立订单的时候,用订单信息计算一个哈希值,判断redis中是否有key,有则不容许反复提交,没有则生成一个新key,放到redis中设置个过期工夫,而后创立订单。其实就是在一段时间内不可反复雷同的操作

附上微信领取最佳实际:

起源:废物大师兄\
地址:https://www.cnblogs.com/cjsbl…

近期热文举荐:

1.600+ 道 Java面试题及答案整顿(2021最新版)

2.终于靠开源我的项目弄到 IntelliJ IDEA 激活码了,真香!

3.阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具!

4.Spring Cloud 2020.0.0 正式公布,全新颠覆性版本!

5.《Java开发手册(嵩山版)》最新公布,速速下载!

感觉不错,别忘了顺手点赞+转发哦!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:服务端如何防止订单重复支付

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址