系统目标:
对接第三方支付系统 为系统平台提供统一的支付中间件.php
技术栈使用状况:
Springboot + mybaties + redis + rocketMQ + mysql.mysql
总体设计中,有如下几个原则redis
统一,兼顾方便sql
首要是统一, 对各类应用提供统一使用入口,其次是方便,不须要额外的入侵便可使用支付功能api
接口的升级或改动须要兼容历史版本安全
易拓展服务器
支持拓展其余支付方式接入以及将来本身实现支付功能微信
支持,而不是决策app
不替使用方应用决策,不掺杂使用方应用和其余模块业务逻辑处理 (必须传递消息时使用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 |
操做失败 |