支付收银系统设计

一、系统设计概要

支付收银系统设计概要,这里我们为了方便扩展,增加一个业务方的概念,即一个收银系统接入多个业务方,这个业务方既可以是不同的部门也可以是不同的业务。

下面是系统的交互时序图,可以参考下一个大概的流程。

  • 提交支付
  • 支付结果异步通知
  • 客户端轮询结果
支付时序图.jpg

客户端下单,完成业务订单的创建。
客户端用业务系统的订单请求支付收银系统支付,支付系统请求三方支付,完成支付请求。
这是一个标准的支付请求流程。

二、系统数据库设计

业务方设计

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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容