一、简介

本支付系统提供企业支付与个人支付的单通道支付和混合支付方案。

二、项目模块结构

  1. 总体架构设计,从上至下,各层通信。

    支付架构设计

  2. 分层意义:为了项目的可扩展性和可维护性。

  3. 分层说明:

    1. 终端显示层,为支付系统呈现外部的展示,包括各个终端的收银台页面,审批页面,审批短信等。开放接口层,为直接暴露给外部的 http 接口,与 service 层直接通信,主要用于与外部系统集成服务。
    2. Web 层,用于处理对显示层的数据渲染,对顶层操作的转发控制。这层的原则是”轻”,避免逻辑处理,可以允许少量的校验,与 service 层保持一对一关系。
    3. Service 层,负责对支付流程的抽象,支付安全的前置校验,支付过程的处理等
    4. Manager 层,可以对 Service 层通用的逻辑的下沉,多个 Dao 层仓库的组合。
    5. Proxy层,通过代理层引用外部接口,避免外部接口的变化影响主流程。代理层可以直接和 Service 层 或 Manager 层保持通信。
    6. Dao 层,原则上不进行逻辑处理,与数据库表对应操作处理。

三、实现一个支付

  1. 收银台活动图

  2. 支付抽象类图

  3. 代码实现,实现一个支付,需要继承 抽象支付类(AbstractPay),实现 prePay,doPay,postPay方法即可。而吊起支付则是通过 操作执行器(OperationExecutor)实现。下面为吊起支付操作器的示类:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Resource(name = "mixedPayOperation")
    private PayOperation<PaymentInfo> payOperation;

    public PaymentResult pay(PaymentInfo paymentInfo) {
    try {
    return new OperationExecutor<PaymentInfo, PaymentResult>(payOperation).execute(paymentInfo);
    } catch(Exception e) {
    return new PaymentResult("1", msg);
    }
    }

四、实现一个退款

  1. 略,和支付类似