接上一篇内容, 来设计以及实现一个简单的Payment Proxy + 有限状态机的DEMO。建议先查看上一篇内容再来看这篇文章。
接入第三方平台支付通用流程
目前业务上是 第三方平台有Payment Gateway 去集成AliPay,WeChatPay,MPGS等第三方支付平台。简单给出一个第三方平台接入WeChat Pay的流程。
在我们当前的业务中, 只需要担任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
设计思路
- 使用Spring Cloud Gateway 特性添加自定义Filter 来实现第三方认证以及创建交易的功能。
- PaymentProxyOAuthGatewayFilterFactory : 用于第三方平台oauth 认证
- PaymentOrderGatewayFilterFactory: 用于创建、查询交易以及状态机的订单状态变更
- 使用有限状态机 cola-component-statemachine 来实现订单状态的更新。
- 使用Mybatis Plus3 + MYSQL 做订单持久化。
之前的拓扑图如下:
升级后的状态流转图如下:
总结
由于篇幅有限, 暂时给出状态机以及代理支付中间服务的设计思路。 之后有时间, 慢慢会接着更新。