当前位置: 首页>后端>正文

状态机+Gateway 升级支付代理服务(二)

接上一篇内容, 来设计以及实现一个简单的Payment Proxy + 有限状态机的DEMO。建议先查看上一篇内容再来看这篇文章。

接入第三方平台支付通用流程

目前业务上是 第三方平台有Payment Gateway 去集成AliPay,WeChatPay,MPGS等第三方支付平台。简单给出一个第三方平台接入WeChat Pay的流程。

状态机+Gateway 升级支付代理服务(二),第1张

在我们当前的业务中, 只需要担任Vendor的角色。 其余支付的操作都有第三方平台与第三方支付交互完成。接下来我们一步步来实现支付代理功能。

订单管理以及Payment Proxy设计

数据库表设计

create table if not exists payment_proxy_order
(
    id                      bigint     auto_increment             not null comment '自增主键ID'  primary key,
    pay_order_no            varchar(64)                           null comment '订单号',
    pay_status              smallint                              null comment '支付状态 与状态机匹配',
    amount                  varchar(64)                           null comment '金额',
    currency                smallint                              null comment '币种',
    trans_type              smallint                              null comment '交易类型',
    pay_method              smallint                              null comment '支付方法',
    pay_source              smallint                              null comment '支付来源 APP 或者H5',
    transaction_no          varchar(256)                          null comment '交易业务号',
    business_no             varchar(64)                           null comment '业务号 用于业务之间的绑定',
    third_party_no          varchar(256)                          null comment '第三方返回的number, 比如MPGS会返回一个字符串作为支付状态校验',
    third_party_customer_no varchar(256)                          null comment '传给第三方的字符串 用业务mapping',
    pay_date                datetime                              null comment '支付成功实践',
    is_deleted              char                                  null comment '业务删除 Is delete Y:yes  N:no',
    creator                 varchar(64) default 'SYSTEM'          not null comment 'Creator',
    gmt_created             datetime    default CURRENT_TIMESTAMP null comment 'created time',
    modifier                varchar(64) default 'SYSTEM'          not null comment 'Modifier',
    gmt_modified            datetime    default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP comment 'modified time',
    remark                  varchar(256)                          null comment '备注',
    extra_info              varchar(256)                          null comment '扩展字段',
    unique index payment_order_pay_order_no_index(pay_order_no),
    index payment_order_business_no_index(business_no),
    index payment_order_pay_status_index(pay_status),
    index payment_order_trans_type(trans_type),
    index payment_order_transaction_no_index(transaction_no)
);

Demo设计

基础信息

  • MYSQL
  • MybatisPlus3
  • Spring Cloud Gateway + OAuth2 Client
  • cola-component-statemachine

设计思路

  1. 使用Spring Cloud Gateway 特性添加自定义Filter 来实现第三方认证以及创建交易的功能。
    1. PaymentProxyOAuthGatewayFilterFactory : 用于第三方平台oauth 认证
    2. PaymentOrderGatewayFilterFactory: 用于创建、查询交易以及状态机的订单状态变更
  2. 使用有限状态机 cola-component-statemachine 来实现订单状态的更新。
  3. 使用Mybatis Plus3 + MYSQL 做订单持久化。

之前的拓扑图如下:

状态机+Gateway 升级支付代理服务(二),第2张

升级后的状态流转图如下:

状态机+Gateway 升级支付代理服务(二),第3张

总结

由于篇幅有限, 暂时给出状态机以及代理支付中间服务的设计思路。 之后有时间, 慢慢会接着更新。


https://www.xamrdz.com/backend/3ch1933046.html

相关文章: