服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

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

日期: 来源:石杉的架构笔记收集编辑:废物大师兄

「 关注“石杉的架构笔记”,大厂架构经验倾囊相授 

文章来源:https://www.cnblogs.com/cjsblog/p/14516909.html



目录

  • 概述
  • 为了防止掉单,这里可以这样处理:
  • 为了防止订单重复提交,可以这样处理:
  • 附上微信支付最佳实践:



概述


如图是一个简化的下单流程,首先是提交订单,然后是支付。

支付的话,一般是走支付网关(支付中心),然后支付中心与第三方支付渠道(微信、支付宝、银联)交互。

支付成功以后,异步通知支付中心,支付中心更新自身支付订单状态,再通知业务应用,各业务再更新各自订单状态。

这个过程中经常可能遇到的问题是掉单,无论是超时未收到回调通知也好,还是程序自身报错也好。

总之由于各种各样的原因,没有如期收到通知并正确的处理后续逻辑等等,都会造成用户支付成功了,但是服务端这边订单状态没更新。

这个时候有可能产生投诉,或者用户重复支付。

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


为了防止掉单,这里可以这样处理:



1、支付订单增加一个中间状态“支付中”,当同一个订单去支付的时候,先检查有没有状态为“支付中”的支付流水,当然支付(prepay)的时候要加个锁。支付完成以后更新支付流水状态的时候再讲其改成“支付成功”状态。

2、支付中心这边要自己定义一个超时时间(比如:30秒),在此时间范围内如果没有收到支付成功回调,则应调用接口主动查询支付结果,比如10s、20s、30s查一次,如果在最大查询次数内没有查到结果,应做异常处理

3、支付中心收到支付结果以后,将结果同步给业务系统,可以发MQ,也可以直接调用,直接调用的话要加重试(比如:SpringBoot Retry)

4、无论是支付中心,还是业务应用,在接收支付结果通知时都要考虑接口幂等性,消息只处理一次,其余的忽略

5、业务应用也应做超时主动查询支付结果

对于上面说的超时主动查询可以在发起支付的时候将这些支付订单放到一张表中,用定时任务去扫


为了防止订单重复提交,可以这样处理:



1、创建订单的时候,用订单信息计算一个哈希值,判断redis中是否有key,有则不允许重复提交,没有则生成一个新key,放到redis中设置个过期时间,然后创建订单。

其实就是在一段时间内不可重复相同的操作


附上微信支付最佳实践:



欢迎扫码加入儒猿技术交流群,每天晚上20:00都有Java面试、Redis、MySQL、RocketMQ、SpringCloudAlibaba、Java架构等技术答疑分享,更能跟小伙伴们一起交流技术


另外推荐儒猿课堂的9.9元系列课程给您,欢迎加入一起学习~


互联网Java工程师面试突击课
(9.9元专享)

SpringCloudAlibaba零基础入门到项目实战
9.9元专享)

亿级流量下的电商详情页系统实战项目
9.9元专享)

Kafka消息中间件内核源码精讲
9.9元专享)

12个实战案例带你玩转Java并发编程
9.9元专享)

Elasticsearch零基础入门到精通
9.9元专享)

基于Java手写分布式中间件系统实战
9.9元专享)

基于ShardingSphere的分库分表实战课
9.9元专享)


相关阅读

  • 开源GhatGPT客户端,速度飞起!

  • “设为星标”第一时间接收推送,精彩内容不容错过!前言ChatGTP开放API后,github上出现不少的新项目,今天要给大家推荐的就是其中之一:川虎 chatGTP注意1、本项目基于python,所以需
  • 重磅!多地公积金政策有变!

  • 多地住房公积金政策出现新的变化。中新经纬梳理发现,南京、驻马店等地力推“带押过户”,扬州、咸阳等地支持“商转公”,达州等地支持公积金付首付款等。一起看看你所在的地方有
  • 两会今日谈:始终保持干事创业精神状态

  • 原标题:始终保持干事创业精神状态(两会今日谈)每一个行业、每一个人都心怀梦想、奋勇拼搏,一步一个脚印,一棒接着一棒,定能在奋力奔跑和接续奋斗中不断书写中国式现代化的新篇章矢
  • 一波包邮区好货,五一不加价~

  • 携程大促期间,每天都会上新,大家可以去领上券,然后看看心仪的酒店:⬇️戳下图直达领券⬇️下面挑一下其他平台上的尖货。¥999/2晚--无锡瑞廷西郊酒店两晚连住度假套餐【住】高级湖景
  • SpringBoot 统一功能处理

  • (给ImportNew加星标,提高Java技能)前言接下来是 Spring Boot 统⼀功能处理模块了,也是 AOP 的实战环节,要实现的课程⽬标有以下 3 个:统⼀⽤户登录权限验证统⼀数据格式返回统⼀异
  • 【滋味】吃一碗荠菜馄饨,尝一口春天的味道!

  • 阳春三月,正是吃荠菜的时候。荠菜茎叶清香,食用方法多种多样,用作馅料可包馄饨、包子和春卷,做羹有荠菜豆腐羹、荠菜粥等,香气扑鼻,令人百吃不厌。今天,就教大家来做一碗街头小店热

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • EES:干法成型实现高载量5V级无钴电池正极

  • 01导读近年来,储能应用对功率和能量密度的要求逐渐提高,因此锂离子电池需要实现快充和长循环等目标。尖晶石型LiNi0.5Mn1.5O4(LNMO)正极材料具有高工作电压和无钴等化学性质,有
  • 服务端如何防止订单重复支付!

  • 「 关注“石杉的架构笔记”,大厂架构经验倾囊相授 」文章来源:https://www.cnblogs.com/cjsblog/p/14516909.html目录概述为了防止掉单,这里可以这样处理:为了防止订单重复提交,
  • 扫盲Elasticsearch~~~

  • 原价199元,现在参加拼团活动立享优惠价仅 99 元,赶快一起参团吧!《百万数据量下的高性能商品搜索系统实战》=== 课程福利 ===为了让更多同学学到赚到,《百万数据量下的高性能商