1、交易的本质是什么?

image.png
1、收银人员发起【订单结算】,向三方服务器发起支付请求,获得二维码链接
2、收银人员展示二维码给客户
3、客户扫描二维码,向三方支付发起支付
4、三方支付会为收银系统和用户推送支付状态:成功或失败
支付系统中关心的几个维度:谁收款?谁付款?价格多少?是否成功?支付渠道选择
不关心:具体购买的商品及其他详情

2、说出交易业务调用时序流程?

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

2、交易统一接口入参和出参分别是什么? 接口的作用是什么?

交易统一接口入参: OrderVo对象 订单
交易统一接口出参:TradingVo对象 交易单
接口的作用:将用户的订单转为交易单,第三方才能进行二维码链接响应,用户才能支付,最终根据交易单的状态判断用户支付的成功或者失败。

3、校验交易单完整性有哪些?

  1. orderNo-订单编号
  2. total_fee-支付金额
  3. trade_channel-支付渠道
  4. enterpriseId-商家id,redis中缓存每个商户的支付配置信息
  5. 交易的类型 : 付款 or 退款

    4、为什么需要加锁?

    对交易单加锁,防止支付并发多次生成,并且防止在业务代码执行过程有其他线程进行操作交易单,这里加的是fairLock,使用watchdog的机制,同一时刻只会允许一个线程处理。
    每一个结账的操作,退款、免单、挂账都需要对交易单进行加锁。

    5、什么是交易适配路由? 有什么作用? 怎么实现的?

    image.png
    适配器设计模式:使接口不兼容的类可以一起工作,我们在项目中使用适配器设计的思想,根据支付渠道适配不同的支付实现类,如支付渠道为支付宝时,我们就匹配支付宝的支付服务实现类。
    解决了不同支付实现类兼容的问题,并且提高了代码的可拓展性和维护性,后期如果有业务需求需新增支付渠道,我们只需在IOC容器中构建的Map添加对应的键值对,并按照三方接口添加对应的配置类及业务代码实现即可。
    设计模式:
    缺点:
    1、代码结构复杂度变高
    2、耗费内存也会变高

优点:
1、代码扩展性
2、代码结构清晰,可维护增强
3、解耦项目的业务

6、什么是交易处理接口? 作用是什么? 怎么实现的?

image.png
NativePayFace: Native支付方式dubbo接口:商户生成二维码,用户扫描支付
NativePayFaceImpl: Native支付方式dubbo接口实现
NativePayAdapter:Native支付方式适配:商户生成二维码,用户扫描支付
NativePayAdapterImpl: Native支付方式适配实现,对交易单加锁,防止支付并发多次生成,同时调用ShowApiService生成二维码图片
RegisterBeanHandler:IOC容器工具,可以对NativePayHandler获得具体的实现类,例如这里获得实现类:aliNativePayHandler
NativePayHandler:Native支付方式Handler,此类有多个实现
AliNativePayHandler:阿里Native支付方式Handler
BeforePayHandler:支付前置校验,幂等性处理
AlipayConfig: 阿里核心配置

7、支付宝常见支付类型有哪些?

能力名称 应用场景 支持账户类型
当面付 超市、餐馆线下交易场景,商家可生成订单二维码供用户扫码支付;也可扫描用户二维码完成收款。
- 企业支付宝账户
- 个体工商户
App 支付 支付宝为商家提供了客户端&服务端 SDK,帮助商家快速在自有 App 中集成支付宝支付功能。
- 企业支付宝账户
- 个体工商户
手机网站支付 为商家移动端网页应用提供集成支付宝支付功能接口。
- 企业支付宝账户
- 个体工商户
电脑网站支付 为商家 PC 端网页应用提供集成支付宝支付功能接口。
- 企业支付宝账户
- 个体工商户
刷脸付 商场、无人售货等线下自助支付场景,用户可通过刷脸操作使用支付宝付款。
- 企业支付宝账户
- 个体工商户