支付原理

一、银联支付提交原理:

1、封装支付请求参数

2、将参数验证签名,以html表单形式提交给银联支付接口

以html表单提交有什么好处?

将方便提交参数

二、同步回调和异步回调通知

     1、同步回调(前台通知):

      第三方支付系统以浏览器重定向形式将支付结果给商户端

                      作用:提示给用户在银联支付系统中,已经支付成功。

        2、异步回调(后台通知):

                     第三方支付系统使用类似于HttpClient技术调用商户接口进行通知。

                      作用:将银联支付安全的形式发送给商户端,进行修改对应的订单状态。

                注意:异步通知是修改订单状态

思考问题:

1、在第三方支付平台(银联、支付宝、微信支付)支付结果是如何通知给商户端

      第三方支付平台通过httpclient技术将支付结果异步通知给商户端

2、支付系统分布式式事物问题存在原因:

   用户在银联系统中,支付完成之后,如何把结果通知给商户端:第三方支付平台通过httpclient技术将支付结果异步通知给商户端

 3、  跨系统中如何解决分布式事物问题呢?

       采用最终一致性问题 双方可以短暂不一致,但是最终一定实现一致性问题。采用通知补偿性

验证签名原理:MD5 加密加盐 不可逆

验证签名防止数据被篡改

加密是防止抓包获取明文的数据 可逆。

支付流程:

1、订单服务调用支付服务 生成支付令牌(userId、订单号码、支付金额)

2、订单服务获取支付令牌,在使用订单web传递Token形式跳转到支付web。

预提交待支付记录保证参数的安全问题。

将不同的接口执行地址存放到数据中,统一使用java反射机制执行方法。

整体实现流程:

  1. 支付服务需要提供创建支付接口 ,传递参数 userid、orderid、金额。
  2. 使用支付令牌查询支付交易信息

注意:订单id 支付id

整体实现流程:

  1. 支付服务需要提供创建支付接口 ,传递参数 userid、orderid、金额。
  2. 使用支付令牌查询支付交易信息

注意:订单id 支付id

四、分布式事务解决方案

LCN MQ 适合于内部系统实现服务指间分布式事务解决方案

如果产生跨平台之间分布式事务如何解决呢? 最终一致性概念

第三方系统中如何商户端没有及时响应状态码给第三方支付系统,这时候第三方系统采用补偿和重试机制。

支付回调中需要考虑的问题:

  1. 在网络延迟情况下,回调接口出现重试时,如何保证接口幂等性问题。

     (全局id) 重试机制是间隔性。

  1. 在网络延迟情况下,第三方系统没有及时的将支付结果通知给商户端,存在支付状态不一致时,如何解决?

解决方案:调用第三方系统主动查询支付状态

  1. 商户系统回调接口中,如果存在代码问题,或者是商户系统宕机,导致第三方支付系统一直在重试? 最后放弃重试 如何解决呢?
    1. 手动补偿机制+日志记录 主动调用第三方接口查询
    2. 写一个定时Job,每天定时检查数据,主动调用第三方接口查询,修改状态码

4.支付金额与商品金额如果不一致时,如何处理

在异步回调中,使用预支付金额与回调真实支付金额进行比对,如果不一致的话,说明该交易信息存在异常。

使用日志+对账核查。

  1. 支付服务如何与其他系统保证分布式事务问题

采用第三方支付流程 实现补偿和重试机制遵循最终一致性 Base理论和CAP理论。

  1. 与内部系统中出现分布式事务问题

LCN、 MQ 、TCCC

相同点: 最终一致性问题。

原文地址:https://www.cnblogs.com/cxyyh/p/11080018.html