支付系统 简版设计

个人梳理如有不对 请及时指正 欢迎大家 编辑更新此文档

系统目标

系统目标:

对接第三方支付系统 为系统平台提供统一的支付中间件.

技术栈使用情况:

Springboot + mybaties + redis + rocketMQ + mysql.

支付系统设计原则和思路

整体设计中,有以下几个原则

  • 统一,兼顾方便

    • 首要是统一, 对各种应用提供统一使用入口,其次是方便,不需要额外的入侵即可使用支付功能

    • 接口的升级或改动需要兼容历史版本

  • 易拓展

    • 支持拓展其他支付方式接入以及未来自己实现支付功能

  • 支持,而不是决策

    • 不替使用方应用决策,不掺杂使用方应用和其他模块业务逻辑处理 (必须传递消息时使用MQ 解耦)

  • 少即是多, 侧重成长性, 慎重修改API

    • 每添加一个字段(接口)都要谨慎, 加后无法再删, 对扩展开放, 修改封闭

    • 同一个接口 不同的参数可以实现不同的功能 如 getPayInfo 带 支付方式 需要去查第三方支付状态

支付系统目前流程


支付系统主流程

这期间发生了什么?

准备工作: 账单结算完成,调用生成支付信息接口.


第一步 : 客户端点击确认支付 —> 请求后台预支付接口(检查订单状态 )

第二步: 根据后台返回状态码 做后续处理

第三步: 可以拉起支付时 —> 拉起支付让用户选择支付方式 —> 请求支付接口(检查订单状态,获取SDK 需要的签名 )

第四步: 后台返回正确的签名 客户端拉起第三方支付 SDK 界面

第五步: 用户使用支付工具 成功付款

第六步: 客户端显示支持成功并查询后台支付状态(如果异步回调未到后台 主动查询第三方并更新订单支付信息)


那么处理阶段到底做了什么呢?

这里在讲下微信和支付宝 官网描述的支付流程

微信官网这样说:

https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_3&index=5

第三步和第四步详细讲过程如下:

1.支付系统和微信后台交互生成订单,微信后台给业务服务器一个预交易订单号

2.支付系统给你的App预交易订单号和签名信息—> App去调起微信支付

3.App听过微信SDK 调起微信App支付,微信App把预交易订单号和订单签名信息给传给 微信服务器

4.微信App接收微信服务器支付结果 , 微信App告知App支付支付结果,同时微信后台异步告知支付系统支付结果

整个故事情节大概是这样的


支付宝官网这样说:

梳理一下步骤:

1.支付系统做好订单信息,安全签名后发给App(支付系统负责RSA加密)

2.App拿着订单信息和签名,通过SDK调起支付宝App ,支付宝 app去请求支付宝服务器 完成支付(支付宝 App解密订单信息,确认订单安全)

3.支付宝App通知 客户端的App支付完成;同时,支付宝后台服务异步通知支付系统后台支付完成)


整个流程涉及到你和支付宝双方的App,双方的后台服务器,故事情节大概可以这样理解



奉上支付宝 开发者文档: https://docs.open.alipay.com/api_1/alipay.trade.pay/



个人梳理如有不对 请及时指正 欢迎大家 编辑更新此文档

PS. 支付返回状态码

状态码
msg
0 支付成功
411 订单已支付
413 订单已关闭
415 校验订单信息失败(未到支付状态/未查询到订单)
420 支付渠道错误
421 MQ广播通知错误
999 操作失败


参考链接: https://www.jianshu.com/p/1f48b544660e

猜你喜欢

转载自www.cnblogs.com/wangdaijun/p/10956956.html