day09交易平台服务-支付隔离、支付宝支付 - 图1
    1、收银员发起收银请求;
    2、根据订单生成交易单,注意此时交易单中还未生成交易单号;
    3、发起支付请求;
    4、交易单加锁,交易适配路由:适配器模式根据交易渠道适配不同的三方支付系统的实现,交易渠道由前端传递
    5、校验交易单完整性:必备参数—>订单编号、支付金额、交易渠道、商家信息、交易类型(FK/TK)
    三方系统(支付宝、微信)安全性校验:大额交易、常用支付地变更(IP)、频繁交易、密码变更……
    6、幂等性:确保同一个交易单不会重复支付
    解决:首次支付、重新支付(QXDD取消订单、GZ挂账)、重复支付问题(查询到交易单状态为YJS、MD,即终止)
    支付幂等性:
    支付服务幂等性校验—>订单编号orderNo
    三方系统幂等性保证—>交易单编号-雪花算法
    7、生成交易单号,修改交易单;
    8、统一下单,通过三方提供的公钥加密发送;
    9、三方响应二维码链接,通过我们提供的公钥加密响应【异步】;
    10、通过万维易源/hutool生成二维码,封装支付路径【异步】;
    11、向用户展示二维码,用户扫码支付;
    12.1、三方返回支付结果商家&用户:支付成功/支付失败【异步】;
    12.2、可能因为网络等原因,响应不及时,未能收到结果,三方会按照某个频率发消息给我们的服务,直到我们获取到数据(幂等性操作);此外,我们可采用主动轮询,但要限定频率,项目中我们采用xxljob每隔10s发起请求查询支付结果:
    成功:1、修改订单状态 2、修改交易单状态
    失败:未支付
    定时任务:主动轮询(考虑三方系统限流,如微信限定150QPS)
    13、验签、修改交易单状态;
    14、修改订单状态【异步】;