Springboot----项目整合微信支付(利用RabbitMQ延迟队列处理用户退款)

个人简介:

??个人主页:肇事司机赵四
??学习方向:JAVA后端开发
??种一棵树最好的时间是十年前,其次是现在!
喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。

前言

不出意外Springboot项目整合微信支付这一系列的文章在这就要完结撒花了,这一系列的文章获得了不少读者的关注,很感谢大家对我的支持。最后一篇我要介绍的是退款部分的功能,当然,微信支付中还提供了账单下载以及对账的功能,我这里就不实现了,这两个功能一般在商户管理端实现,感兴趣的可以参照微信支付的API文档实现。目前我的愿望是突破500粉,如果我的文章对你有帮助能不能给我点个关注,我在线回,感激不尽!

文章目录

一:??问题引入

用户下单之后,很有可能因为某些原因需要申请退款,这时候我们就需要为用户提供退款接口。有了前面的处理流程,针对退款功能我们也能很容易实现,因为微信支付已经提供了一系列接口供我们调用,我们只需要专注自己的业务处理即可。

退款功能的实现其实和用户下单差不多,也需要设置相关参数然后发送给微信支付后台,参数设置中微信支付订单号和商户订单号需要二选一,我选取的是商户订单号,此外,还需要商户提供一个退款编号,这个编号需要自己在后台自动生成。

??注意事项:

  1. 交易时间超过一年的订单无法提交退款
  2. 微信支付退款支持单笔交易分多次退款(不超50次),多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。
  3. 错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次
  4. 每个支付订单的部分退款次数不能超过50次
  5. 申请退款接口的返回仅代表业务的受理情况,具体退款是否成功,需要通过退款查询接口获取结果
  6. 一个月之前的订单申请退款频率限制为:5000/min
  7. 同一笔订单多次退款的请求需相隔1分钟

二:??处理流程

退款时序图:
在这里插入图片描述

2.1:用户申请退款

当用户点击退款申请之后,后台接到请求并在组装好参数之后向微信支付后台发送退款申请,这时候微信支付会返回一个JSON数据,里面包含微信支付退款单号、商户退款单号,微信支付订单号、商户订单号、退款状态等信息,见下图:
在这里插入图片描述
在这里插入图片描述
这时候的退款状态一般为退款中,这时候我们将数据库中订单状态更新为退款中,假如返回状态为退款成功则直接将订单状态改为退款成功并记录日志即可,当然,还有可能是退款异常的情况。

2.2:处理微信退款回调通知

和用户下单一样,用户申请退款后微信支付后台也会发送回调通知通知商户,这时候就需要我们对该回调进行解密并获取信息后返回正确的状态码给微信支付后台。其处理流程和前面提到的支付回调通知大同小异,需要注意的是回调通知地址必须要能被外网访问,所以我们就需要借助内网穿透工具,要是还设置了过滤器或者拦截器需要放行该请求,不然微信支付后台是通知不到商户的,而且一段时间内微信支付后台还会多次发送回调通知。

微信支付中是这样介绍的:同样的通知可能会多次发送给商户系统。商户系统必须能够正确处理重复的通知。 推荐的做法是,当商户系统收到通知进行处理时,先检查对应业务数据的状态,并判断该通知是否已经处理。如果未处理&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值