微信防止重复支付方案

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

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

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

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

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

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

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

1、 支付订单增加一个中间状态“支付中”,当同一个订单去支付的时候,先检查有没有状态为“支付中”的支付流水,当然支付(prepay)的时候要加个锁支付完成以后更新支付流水状态的时候再讲其改成“支付成功”状态;
2、 支付中心这边要自己定义一个超时时间(比如:30秒),在此时间范围内如果没有收到支付成功回调,则应调用接口主动查询支付结果,比如10s、20s、30s查一次,如果在最大查询次数内没有查到结果,应做异常处理;
3、 支付中心收到支付结果以后,将结果同步给业务系统,可以发MQ,也可以直接调用,直接调用的话要加重试(比如:SpringBootRetry);
4、 无论是支付中心,还是业务应用,在接收支付结果通知时都要考虑接口幂等性,消息只处理一次,其余的忽略;
5、 业务应用也应做超时主动查询支付结果;

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

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

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

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

附上微信支付最佳实践:

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

app store里面的构建版本在线上传

开发苹果ios应用,无论是用原生开发、用hbuilderx开发还是用其他h5框架开发的app,都需要将打包好的ipa文件上传到app store。 在上架app store的过程中,我们会遇到下图的这样一个问题: 就是它要求我们上传一个构建版本&#xff0c…

FreeRTOS——队列及其实战

1.队列概念 1)队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递) 2)队列类似数组,只能存储有限数量、相同类型的数据,在创建时需指定队列长度与队列项大小 3)出队入队阻塞…

职场商务英语口语“自助餐”用英文怎么说?柯桥外语培训

“自助餐”用英语怎么说? ● 其实很简单,“自助餐”的英文就是:Buffet。 例句: At lunchtime, theres a choice between the buffet or the set menu.15857575376 午饭时,可以选择自助餐或套餐。 We are going to …

Dubbo 3.x源码(15)—Dubbo服务发布导出源码(4)

基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo 3.x源码(14)—Dubbo服务发布导出源码(3),也就是Dubbo服务导出的核心方法doExportUrl的上半部分源码,现在我们继续学习,服务导出的核心方法doExportUr…

多技术融合在生态系统服务功能社会价值评估中的应用及论文写作、拓展分析

生态系统服务是人类从自然界中获得的直接或间接惠益,可分为供给服务、文化服务、调节服务和支持服务4类,对提升人类福祉具有重大意义,且被视为连接社会与生态系统的桥梁。自从启动千年生态系统评估项目(Millennium Ecosystem Asse…

DolphinScheduler实际应用

前言 最近公司新启动了一个项目,然后领导想用一下新技术,并且为公司提供多个大数据调度解决方案,我呢就根据领导要求调研了下当前的开源调度工具,最终决定采用DolphinScheduler, 因此研究了一下DolphinScheduler &…

Vue3+Three.js星空球体

结果图 threejs比例不变自适应 首先是设置相机和render,要注意的就是相机要加上aspect不然如果页面不是正方形看到的样式就会失调。 // ---------相机设置------------- // 实例化一个透视投影相机对象 const camera new THREE.PerspectiveCamera(); //相机在Thr…

Modbus转Profinet解决方案,轻松搭建工业通信“桥梁”

在工业自动化领域,Modbus和Profinet是两种常见的通信协议。由于许多现有的工业设备使用的是Modbus协议,而现代化的工业系统通常采用Profinet,所以将Modbus转换为Profinet成为了解决方案的一个重要需求。 Modbus转Profinet解决方案具体包括以下…

Minio集群部署(docker版本)

先在/etc/hosts中添加虚拟域名 {ip} minio1 {ip} minio2 执行docker命令 docker run -it -d --name minio-01 --restartalways --nethost \ -e "MINIO_ROOT_USER{用户名}" \ -e "MINIO_ROOT_PASSWORD{密码}" \ -v /data/docker/minio/update:/data1 #…

CMake入门教程【基础篇】CMake+Visual Studio2022构建C++项目

文章目录 1.概述2.Visual Studio 2022简介3.安装Visual Studio 20224.安装CMake5.创建CMake项目6. 构建项目 1.概述 CMake和Visual Studio 2022结合 在现代软件开发中,CMake和Visual Studio 2022的结合提供了一个强大的环境,用于构建和管理各种规模的C项…

ITSS服务工程师vs ITSS服务经理:哪个职位更适合你?

✨在信息技术服务领域,ITSS服务工程师和ITSS服务经理是两个极具吸引力的职位。但它们各自的特点和要求是什么?哪个更适合你的职业规划和个人兴趣?接下来,我们将为你详细解读这两个职位的区别,帮助你做出明智的选择&…

环境准备-VMware安装

照顾到很多人不是很会环境搭建,我这里会将搭建的步骤讲的细致点 第一步,VMware下载。目的是通过VMware搭建Linux服务器,因为大家大部分还是Windows的电脑,我们先下载虚拟机搭建一个Linux系统的服务器 下载完成之后,点击安装,如下: 点击“下一步” 勾选“我接受许可协议…