
支付微服务架构调用流程以及一些要点记录
客户端下单:客户在下单时可以锁定库存并执行优惠方案计算,生成订单记录。 支付跳转:系统根据订单信息跳转至支付页面。 支付验证:服务端验证支付请求,确保金额来源可靠。 支付接口调用:调用第三方支付接口,处理支付请求并获取预支付标识(如微信的prepay_id)。 签名处理:根据支付接口返回参数签名生成签名结果,返回给客户端。 异步回调:支付完成后,系统接收异步回调通知,验签确认。 状态更新:处理成功的支付记录,通知相关业务系统并更新订单状态。 消息处理:将支付结果通过消息队列(如RocketMQ)发送到业务系统处理。
发布日期:2021-05-10 10:10:59
浏览次数:22
分类:精选文章
本文共 997 字,大约阅读时间需要 3 分钟。
支付服务在业务中扮演着关键角色,本文将从实际项目经验出发,讨论支付服务的实现、优化及常见问题解决方案。
支付服务特点
支付服务系统需要具备以下关键特点:
- 安全性:采用幂等机制确保支付操作不会重复执行。
- 健壮性:保障支撑系统如商户通知系统的可用性,确保订单及时通知。
- 及时性:通过及时的通知机制影响商户的发货流程。
支付流程
以下是一个典型支付流程方案:
常见问题及解决方案
用户刷单问题:通过限制每用户每小时可操作的订单数量、IP地址访问次数等手段进行控制。
重复下单防控:
- 前端按钮进行灰度调节。
- 在跳转页面插入下单重定向。
- 使用分布式锁机制防止并发下单。
- 后端生成唯一订单号进行重复判断。
支付回调并发问题:在记录回调信息时使用订单号设置唯一标识符(UK),避免并发处理影响业务逻辑。
服务解耦:通过消息队列削峰处理高并发场景,保障服务不受阻塞影响。
幂等性保证:在支付接口调用的回调过程中设置消息唯一标识符,确保消息被处理的幂等性。
回调延时处理:
- 采用主动查询订单状态的方式进行定时处理。
- 在支付页面跳转前进行订单状态检查,触发主动查询。
数据一致性:采用最大努力通知机制,确保支付结果在业务系统中尽可能快速反馈。
MQ通知优化
- MQ通知失败处理:采用重复通知机制或持久化记录,确保核心业务处理不受影响。
- MQ重复消费处理:在消费消息时验证订单号是否已被处理,使用分布式锁确保消息消费的幂等性。
超时处理方案
- 支付单自动关闭:设置与第三方支付交单自动关闭时间一致,并提供订单状态查询接口。
- 主动查询与订单状态更新:在支付失败时触发主动查询,确保订单状态及时更新。
通过以上方案可以有效保障支付服务的稳定性和可靠性,在高并发场景下确保业务处理不受阻塞,保障用户体验。