一、系统设计概要
支付收银系统设计概要,这里我们为了方便扩展,增加一个业务方的概念,即一个收银系统接入多个业务方,这个业务方既可以是不同的部门也可以是不同的业务。
下面是系统的交互时序图,可以参考下一个大概的流程。
- 提交支付
- 支付结果异步通知
- 客户端轮询结果
客户端下单,完成业务订单的创建。
客户端用业务系统的订单请求支付收银系统支付,支付系统请求三方支付,完成支付请求。
这是一个标准的支付请求流程。
二、系统数据库设计
业务方设计
CREATE TABLE `pay_partner` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`partner_id` char(6) DEFAULT NULL COMMENT '接入方标志',
`partner_name` varchar(64) DEFAULT NULL COMMENT '接入方名称',
`partner_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '接入方状态',
`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 '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
支付方式设计
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 '支付方式状态',
`pay_type_service` varchar(32) DEFAULT NULL COMMENT '支付方式服务',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
账户设计
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 '账户状态',
`pay_type_key` varchar(10) DEFAULT NULL COMMENT '支付方式key',
`account_no` varchar(32) DEFAULT NULL COMMENT '三方账户号',
`sub_account_no` varchar(32) DEFAULT NULL COMMENT '三方子账户号',
`app_id` varchar(32) DEFAULT NULL COMMENT '三方应用id',
`sub_app_id` varchar(32) DEFAULT NULL COMMENT '三方子应用id',
`account_key` varchar(64) DEFAULT NULL COMMENT '三方商户秘钥',
`cert_path` varchar(255) DEFAULT NULL COMMENT '证书目录',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
账户签约设计
CREATE TABLE `pay_partner_account` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`partner_id` char(6) DEFAULT NULL COMMENT '接入方标志',
`account_id` varchar(10) DEFAULT NULL COMMENT '账户id',
`assign_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '签约状态',
`client` varchar(10) DEFAULT NULL COMMENT '客户端',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
订单表设计
CREATE TABLE `pay_order` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`partner_id` char(6) DEFAULT NULL COMMENT '接入方标志',
`partner_no` varchar(64) DEFAULT NULL COMMENT '业务订单号',
`order_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '订单类型',
`order_status` int(11) DEFAULT NULL COMMENT '订单状态',
`order_no` varchar(64) DEFAULT NULL COMMENT '订单号',
`out_order_no` varchar(64) DEFAULT NULL COMMENT '三方订单号',
`total_fee` int(11) DEFAULT NULL COMMENT '总订单金额',
`item_fee` int(11) DEFAULT NULL COMMENT '实付金额',
`coupon_fee` int(11) DEFAULT NULL COMMENT '优惠金额',
`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 '支付时间',
`created_at` datetime DEFAULT NULL COMMENT '创建时间',
`updated_at` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
网友评论