一、系統(tǒng)設(shè)計(jì)概要
支付收銀系統(tǒng)設(shè)計(jì)概要,這里我們?yōu)榱朔奖銛U(kuò)展,增加一個(gè)業(yè)務(wù)方的概念,即一個(gè)收銀系統(tǒng)接入多個(gè)業(yè)務(wù)方,這個(gè)業(yè)務(wù)方既可以是不同的部門也可以是不同的業(yè)務(wù)。
下面是系統(tǒng)的交互時(shí)序圖,可以參考下一個(gè)大概的流程。
- 提交支付
- 支付結(jié)果異步通知
- 客戶端輪詢結(jié)果

支付時(shí)序圖.jpg
客戶端下單,完成業(yè)務(wù)訂單的創(chuàng)建。
客戶端用業(yè)務(wù)系統(tǒng)的訂單請求支付收銀系統(tǒng)支付,支付系統(tǒng)請求三方支付,完成支付請求。
這是一個(gè)標(biāo)準(zhǔn)的支付請求流程。
二、系統(tǒng)數(shù)據(jù)庫設(shè)計(jì)
業(yè)務(wù)方設(shè)計(jì)
CREATE TABLE `pay_partner` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`partner_id` char(6) DEFAULT NULL COMMENT '接入方標(biāo)志',
`partner_name` varchar(64) DEFAULT NULL COMMENT '接入方名稱',
`partner_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '接入方狀態(tài)',
`partner_key` varchar(128) DEFAULT NULL COMMENT '接入方秘鑰',
`query_url` varchar(255) DEFAULT NULL COMMENT '查詢連接',
`pay_notify_url` varchar(255) DEFAULT NULL COMMENT '支付通知地址',
`refund_notify_url` varchar(255) DEFAULT NULL COMMENT '退款通知地址',
`created_at` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
`updated_at` datetime DEFAULT NULL COMMENT '更新時(shí)間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
支付方式設(shè)計(jì)
CREATE TABLE `pay_type` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`pay_type_key` varchar(10) DEFAULT NULL COMMENT '支付方式key',
`pay_type_name` varchar(32) DEFAULT NULL COMMENT '支付方式名稱',
`pay_type_status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '支付方式狀態(tài)',
`pay_type_service` varchar(32) DEFAULT NULL COMMENT '支付方式服務(wù)',
`created_at` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
`updated_at` datetime DEFAULT NULL COMMENT '更新時(shí)間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
賬戶設(shè)計(jì)
CREATE TABLE `pay_account` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`account_id` varchar(10) DEFAULT NULL COMMENT '賬戶id',
`account_name` varchar(64) DEFAULT NULL COMMENT '賬戶名稱',
`account_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '賬戶狀態(tài)',
`pay_type_key` varchar(10) DEFAULT NULL COMMENT '支付方式key',
`account_no` varchar(32) DEFAULT NULL COMMENT '三方賬戶號(hào)',
`sub_account_no` varchar(32) DEFAULT NULL COMMENT '三方子賬戶號(hào)',
`app_id` varchar(32) DEFAULT NULL COMMENT '三方應(yīng)用id',
`sub_app_id` varchar(32) DEFAULT NULL COMMENT '三方子應(yīng)用id',
`account_key` varchar(64) DEFAULT NULL COMMENT '三方商戶秘鑰',
`cert_path` varchar(255) DEFAULT NULL COMMENT '證書目錄',
`created_at` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
`updated_at` datetime DEFAULT NULL COMMENT '更新時(shí)間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
賬戶簽約設(shè)計(jì)
CREATE TABLE `pay_partner_account` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`partner_id` char(6) DEFAULT NULL COMMENT '接入方標(biāo)志',
`account_id` varchar(10) DEFAULT NULL COMMENT '賬戶id',
`assign_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '簽約狀態(tài)',
`client` varchar(10) DEFAULT NULL COMMENT '客戶端',
`created_at` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
`updated_at` datetime DEFAULT NULL COMMENT '更新時(shí)間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
訂單表設(shè)計(jì)
CREATE TABLE `pay_order` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`partner_id` char(6) DEFAULT NULL COMMENT '接入方標(biāo)志',
`partner_no` varchar(64) DEFAULT NULL COMMENT '業(yè)務(wù)訂單號(hào)',
`order_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '訂單類型',
`order_status` int(11) DEFAULT NULL COMMENT '訂單狀態(tài)',
`order_no` varchar(64) DEFAULT NULL COMMENT '訂單號(hào)',
`out_order_no` varchar(64) DEFAULT NULL COMMENT '三方訂單號(hào)',
`total_fee` int(11) DEFAULT NULL COMMENT '總訂單金額',
`item_fee` int(11) DEFAULT NULL COMMENT '實(shí)付金額',
`coupon_fee` int(11) DEFAULT NULL COMMENT '優(yōu)惠金額',
`account_id` varchar(10) DEFAULT NULL COMMENT '賬戶id',
`pay_type_key` varchar(10) DEFAULT NULL COMMENT '支付方式',
`pay_account` varchar(32) DEFAULT NULL COMMENT '支付賬戶',
`pay_at` datetime DEFAULT NULL COMMENT '支付時(shí)間',
`created_at` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間',
`updated_at` datetime DEFAULT NULL COMMENT '更新時(shí)間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;