1、封装支付请求参数
2、将参数验证签名,以html表单形式提交给银联支付接口
以html表单提交有什么好处?
将方便提交参数
第三方支付系统以浏览器重定向形式将支付结果给商户端
作用:提示给用户在银联支付系统中,已经支付成功。
第三方支付系统使用类似于HttpClient技术调用商户接口进行通知。
作用:将银联支付安全的形式发送给商户端,进行修改对应的订单状态。
注意:异步通知是修改订单状态
思考问题:
1、在第三方支付平台(银联、支付宝、微信支付)支付结果是如何通知给商户端
第三方支付平台通过httpclient技术将支付结果异步通知给商户端
2、支付系统分布式式事物问题存在原因:
用户在银联系统中,支付完成之后,如何把结果通知给商户端:第三方支付平台通过httpclient技术将支付结果异步通知给商户端
3、 跨系统中如何解决分布式事物问题呢?
采用最终一致性问题 双方可以短暂不一致,但是最终一定实现一致性问题。采用通知补偿性
验证签名原理:MD5 加密加盐 不可逆
验证签名防止数据被篡改
加密是防止抓包获取明文的数据 可逆。
支付流程:
1、订单服务调用支付服务 生成支付令牌(userId、订单号码、支付金额)
2、订单服务获取支付令牌,在使用订单web传递Token形式跳转到支付web。
预提交待支付记录保证参数的安全问题。
将不同的接口执行地址存放到数据中,统一使用java反射机制执行方法。
整体实现流程:
注意:订单id 支付id
整体实现流程:
注意:订单id 支付id
LCN MQ 适合于内部系统实现服务指间分布式事务解决方案
如果产生跨平台之间分布式事务如何解决呢? 最终一致性概念
第三方系统中如何商户端没有及时响应状态码给第三方支付系统,这时候第三方系统采用补偿和重试机制。
支付回调中需要考虑的问题:
(全局id) 重试机制是间隔性。
解决方案:调用第三方系统主动查询支付状态
4.支付金额与商品金额如果不一致时,如何处理
在异步回调中,使用预支付金额与回调真实支付金额进行比对,如果不一致的话,说明该交易信息存在异常。
使用日志+对账核查。
采用第三方支付流程 实现补偿和重试机制遵循最终一致性 Base理论和CAP理论。
LCN、 MQ 、TCCC
相同点: 最终一致性问题。
原文:https://www.cnblogs.com/cxyyh/p/11080018.html