订单和支付项目设计

本文详细介绍了在线支付的流程,分为订单设计和支付设计两部分。订单设计涉及用户信息、商品信息及优惠券的查询,前端下单及后端校验。支付设计涵盖选择支付方式、创建支付单、第三方支付接口调用、支付回调处理、支付结果查询与通知。系统通过mq消息处理支付成功后的幂等性,同时进行分布式锁控制和邮件通知。整个流程中,调用链路的拆分有助于系统负载均衡和高并发处理。
摘要由CSDN通过智能技术生成

一直想把这块总结一下,比较重要,先简单记录下,后面慢慢详细。

这里的支付处理,我想分成两块,一块是订单设计;一部分是支付设计。

一、先说第一块,订单

1、下单页查询用户信息,商品信息,优惠券信息

2、前端用户下单,计算金额

3、前端提交到后端

4、后端校验金额,商品,

二、支付设计

1、选择支付类型,发起支付

2、创建支付单

3、申请第三方支付

4、前端带支付单和第三方支付单号发起微信或支付宝支付

5、用户输入支付密码

6、系统等待支付回调

7、系统轮询调度查询支付结果

8、前端页面同时每3秒查询一次支付结果

9、6和7得到支付成功结果后,发送支付成功mq消息

10、mq消息中加分布式锁,做幂等处理,最后缓存支付结果到redis,供前端页面查询使用.

11、mq消息中,如果订单已经取消或者订单已经支付,邮件通知“取消订单支付成功”或“订单重复支付”

三、调用链路

1、web系统接受前端申请支付,并创建支付单。根据支付路由策略,调用支付系统,并把支付单带到支付系统。

2、支付系统调用第三方支付或者微信支付宝,传参支付单号,并返回第三方支付或者微信支付宝的支付单号。

3、web系统将支付系统返回的第三方支付单号给前端,前端调用jsapi唤起支付。

4、订单和支付单一对多的关系,可以保证用户消息支付后可以再次支付,并且用户重复支付后可以将每次支付的记录保存。

5、用户在前端支付成功后,在支付成功页面,每3秒种调用web系统支付结果查询接口,查询支付状态。

6、调度系统每分钟执行待支付订单支付结果查询任务。这里可以将调度、查询待支付数据、支付成功处理分别放在调度系统,辅助系统,和主系统中。这样做的好处,不但可以将系统功能进行拆分,还可以在高并发下减轻主系统的压力,因为每分钟执行待支付订单查询,可能因为数量量大时,导致主系统压力过大,所以建议拆分出去。

7、辅助系统在查询到待支付订单时,调用支付系统查询订单支付状态,如果订单支付成功,发送mq到主系统,执行订单支付成功处理任务。

8、在支付系统同时定义回调接口,在申请第三方或者微信支付宝支付时,将回调地址传递给第三方或微信支付宝。在支付成功后,第三方或微信支付宝通知支付系统。支付系统在收到支付成功通知后,发送mq到主系统,执行订单支付成功处理任务。

9、支付成功后,主系统判断订单是否支付成功。如果支付成功,判断是否重复支付,如果更新支付单状态,不更新订单状态,并邮件通知;如果支付成功,判断订单是否取消,如果是更新支付单状态,不更新订单状态,并邮件通知;获取订单分布式锁,执行业务处理;在业务处理中,先更新订单状态(包括订单的支付渠道),再更新支付单状态,再更新其它同步处理业务(如果有),再发送业务处理mq处理异步业务(如果有),最后将订单支付成功缓存redis。

10、前端页面在支付成功后,跳转支付成功等待页,每3秒调后台查询支付结果,这里的查询接口并不会查询数据库,而且查询第九步缓存到redis的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinqing5130

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值