接上一篇內容, 來設計以及實現(xiàn)一個簡單的Payment Proxy + 有限狀態(tài)機的DEMO。建議先查看上一篇內容再來看這篇文章。
接入第三方平臺支付通用流程
目前業(yè)務上是 第三方平臺有Payment Gateway 去集成AliPay,WeChatPay,MPGS等第三方支付平臺。簡單給出一個第三方平臺接入WeChat Pay的流程复隆。
在我們當前的業(yè)務中, 只需要擔任Vendor的角色。 其余支付的操作都有第三方平臺與第三方支付交互完成。接下來我們一步步來實現(xiàn)支付代理功能立磁。
訂單管理以及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 '支付狀態(tài) 與狀態(tài)機匹配',
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 '交易業(yè)務號',
business_no varchar(64) null comment '業(yè)務號 用于業(yè)務之間的綁定',
third_party_no varchar(256) null comment '第三方返回的number, 比如MPGS會返回一個字符串作為支付狀態(tài)校驗',
third_party_customer_no varchar(256) null comment '傳給第三方的字符串 用業(yè)務mapping',
pay_date datetime null comment '支付成功實踐',
is_deleted char null comment '業(yè)務刪除 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 來實現(xiàn)第三方認證以及創(chuàng)建交易的功能。
- PaymentProxyOAuthGatewayFilterFactory : 用于第三方平臺oauth 認證
- PaymentOrderGatewayFilterFactory: 用于創(chuàng)建剥槐、查詢交易以及狀態(tài)機的訂單狀態(tài)變更
- 使用有限狀態(tài)機 cola-component-statemachine 來實現(xiàn)訂單狀態(tài)的更新唱歧。
- 使用Mybatis Plus3 + MYSQL 做訂單持久化。
之前的拓撲圖如下:
升級后的狀態(tài)流轉圖如下:
總結
由于篇幅有限, 暫時給出狀態(tài)機以及代理支付中間服務的設計思路粒竖。 之后有時間, 慢慢會接著更新颅崩。