支付市场庞大而且必须,支付能力是每一个App都需要的;所以闲暇时间研究了一个支付平台;Jeepay是一套适合互联网企业使用的开源支付系统,支持多渠道服务商和普通商户模式。已对接微信支付,支付宝,云闪付官方接口,支持聚合码支付。
系统架构
功能列表
商户系统
管理系统截图
运营平台首页
运营平台的支付接口、方式配置
修改商户的基本信息
商户端的支付页面
转账页面
重要数据库表:
-- 商户信息表
DROP TABLE IF EXISTS t_mch_info;
CREATE TABLE `t_mch_info` (
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`mch_name` VARCHAR(64) NOT NULL COMMENT '商户名称',
`mch_short_name` VARCHAR(32) NOT NULL COMMENT '商户简称',
`type` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '类型: 1-普通商户, 2-特约商户(服务商模式)',
`isv_no` VARCHAR(64) COMMENT '服务商号',
`contact_name` VARCHAR(32) COMMENT '联系人姓名',
`contact_tel` VARCHAR(32) COMMENT '联系人手机号',
`contact_email` VARCHAR(32) COMMENT '联系人邮箱',
`state` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '商户状态: 0-停用, 1-正常',
`remark` VARCHAR(128) COMMENT '商户备注',
`init_user_id` BIGINT(20) DEFAULT NULL COMMENT '初始用户ID(创建商户时,允许商户登录的用户)',
`created_uid` BIGINT(20) COMMENT '创建者用户ID',
`created_by` VARCHAR(64) COMMENT '创建者姓名',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`mch_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商户信息表';
-- 商户应用表
DROP TABLE IF EXISTS t_mch_app;
CREATE TABLE `t_mch_app` (
`app_id` varchar(64) NOT NULL COMMENT '应用ID',
`app_name` varchar(64) NOT NULL DEFAULT '' COMMENT '应用名称',
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`state` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '应用状态: 0-停用, 1-正常',
`app_secret` VARCHAR(128) NOT NULL COMMENT '应用私钥',
`remark` varchar(128) DEFAULT NULL COMMENT '备注',
`created_uid` BIGINT(20) COMMENT '创建者用户ID',
`created_by` VARCHAR(64) COMMENT '创建者姓名',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`app_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商户应用表';
-- 服务商信息表
DROP TABLE IF EXISTS t_isv_info;
CREATE TABLE `t_isv_info` (
`isv_no` VARCHAR(64) NOT NULL COMMENT '服务商号',
`isv_name` VARCHAR(64) NOT NULL COMMENT '服务商名称',
`isv_short_name` VARCHAR(32) NOT NULL COMMENT '服务商简称',
`contact_name` VARCHAR(32) COMMENT '联系人姓名',
`contact_tel` VARCHAR(32) COMMENT '联系人手机号',
`contact_email` VARCHAR(32) COMMENT '联系人邮箱',
`state` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '状态: 0-停用, 1-正常',
`remark` VARCHAR(128) DEFAULT NULL COMMENT '备注',
`created_uid` BIGINT(20) COMMENT '创建者用户ID',
`created_by` VARCHAR(64) COMMENT '创建者姓名',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`isv_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='服务商信息表';
-- 支付方式表 pay_way
DROP TABLE IF EXISTS t_pay_way;
CREATE TABLE `t_pay_way` (
`way_code` VARCHAR(20) NOT NULL COMMENT '支付方式代码 例如: wxpay_jsapi',
`way_name` VARCHAR(20) NOT NULL COMMENT '支付方式名称',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`way_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付方式表';
-- 支付接口定义表
DROP TABLE IF EXISTS t_pay_interface_define;
CREATE TABLE `t_pay_interface_define` (
`if_code` VARCHAR(20) NOT NULL COMMENT '接口代码 全小写 wxpay alipay ',
`if_name` VARCHAR(20) NOT NULL COMMENT '接口名称',
`is_mch_mode` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '是否支持普通商户模式: 0-不支持, 1-支持',
`is_isv_mode` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '是否支持服务商子商户模式: 0-不支持, 1-支持',
`config_page_type` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '支付参数配置页面类型:1-JSON渲染,2-自定义',
`isv_params` VARCHAR(4096) DEFAULT NULL COMMENT 'ISV接口配置定义描述,json字符串',
`isvsub_mch_params` VARCHAR(4096) DEFAULT NULL COMMENT '特约商户接口配置定义描述,json字符串',
`normal_mch_params` VARCHAR(4096) DEFAULT NULL COMMENT '普通商户接口配置定义描述,json字符串',
`way_codes` JSON NOT NULL COMMENT '支持的支付方式 ["wxpay_jsapi", "wxpay_bar"]',
`icon` VARCHAR(256) DEFAULT NULL COMMENT '页面展示:卡片-图标',
`bg_color` VARCHAR(20) DEFAULT NULL COMMENT '页面展示:卡片-背景色',
`state` TINYINT(6) NOT NULL DEFAULT 1 COMMENT '状态: 0-停用, 1-启用',
`remark` VARCHAR(128) DEFAULT NULL COMMENT '备注',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`if_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付接口定义表';
-- 支付接口配置参数表
DROP TABLE IF EXISTS t_pay_interface_config;
CREATE TABLE `t_pay_interface_config` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`info_type` TINYINT(6) NOT NULL COMMENT '账号类型:1-服务商 2-商户 3-商户应用',
`info_id` VARCHAR(64) NOT NULL COMMENT '服务商号/商户号/应用ID',
`if_code` VARCHAR(20) NOT NULL COMMENT '支付接口代码',
`if_params` VARCHAR(4096) NOT NULL COMMENT '接口配置参数,json字符串',
`if_rate` DECIMAL(20,6) DEFAULT NULL COMMENT '支付接口费率',
`state` TINYINT(6) NOT NULL default 1 COMMENT '状态: 0-停用, 1-启用',
`remark` VARCHAR(128) DEFAULT NULL COMMENT '备注',
`created_uid` BIGINT(20) COMMENT '创建者用户ID',
`created_by` VARCHAR(64) COMMENT '创建者姓名',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_uid` BIGINT(20) COMMENT '更新者用户ID',
`updated_by` VARCHAR(64) COMMENT '更新者姓名',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `Uni_InfoType_InfoId_IfCode` (`info_type`, `info_id`, `if_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付接口配置参数表';
-- 商户支付通道表 (允许商户 支付方式 对应多个支付接口的配置)
DROP TABLE IF EXISTS t_mch_pay_passage;
CREATE TABLE `t_mch_pay_passage` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`app_id` VARCHAR(64) NOT NULL COMMENT '应用ID',
`if_code` VARCHAR(20) NOT NULL COMMENT '支付接口',
`way_code` VARCHAR(20) NOT NULL COMMENT '支付方式',
`rate` DECIMAL(20,6) NOT NULL COMMENT '支付方式费率',
`risk_config` JSON DEFAULT NULL COMMENT '风控数据',
`state` TINYINT(6) NOT NULL COMMENT '状态: 0-停用, 1-启用',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `Uni_AppId_WayCode` (`app_id`,`if_code`, `way_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商户支付通道表';
-- 轮询表
-- mch_no, way_code, 轮询策略。
-- 支付订单表
DROP TABLE IF EXISTS t_pay_order;
CREATE TABLE `t_pay_order` (
`pay_order_id` VARCHAR(30) NOT NULL COMMENT '支付订单号',
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`isv_no` VARCHAR(64) DEFAULT NULL COMMENT '服务商号',
`app_id` VARCHAR(64) NOT NULL COMMENT '应用ID',
`mch_name` VARCHAR(30) NOT NULL COMMENT '商户名称',
`mch_type` TINYINT(6) NOT NULL COMMENT '类型: 1-普通商户, 2-特约商户(服务商模式)',
`mch_order_no` VARCHAR(64) NOT NULL COMMENT '商户订单号',
`if_code` VARCHAR(20) COMMENT '支付接口代码',
`way_code` VARCHAR(20) NOT NULL COMMENT '支付方式代码',
`amount` BIGINT(20) NOT NULL COMMENT '支付金额,单位分',
`mch_fee_rate` decimal(20,6) NOT NULL COMMENT '商户手续费费率快照',
`mch_fee_amount` BIGINT(20) NOT NULL COMMENT '商户手续费,单位分',
`currency` VARCHAR(3) NOT NULL DEFAULT 'cny' COMMENT '三位货币代码,人民币:cny',
`state` TINYINT(6) NOT NULL DEFAULT '0' COMMENT '支付状态: 0-订单生成, 1-支付中, 2-支付成功, 3-支付失败, 4-已撤销, 5-已退款, 6-订单关闭',
`notify_state` TINYINT(6) NOT NULL DEFAULT '0' COMMENT '向下游回调状态, 0-未发送, 1-已发送',
`client_ip` VARCHAR(32) DEFAULT NULL COMMENT '客户端IP',
`subject` VARCHAR(64) NOT NULL COMMENT '商品标题',
`body` VARCHAR(256) NOT NULL COMMENT '商品描述信息',
`channel_extra` VARCHAR(512) DEFAULT NULL COMMENT '特定渠道发起额外参数',
`channel_user` VARCHAR(64) DEFAULT NULL COMMENT '渠道用户标识,如微信openId,支付宝账号',
`channel_order_no` VARCHAR(64) DEFAULT NULL COMMENT '渠道订单号',
`refund_state` TINYINT(6) NOT NULL DEFAULT '0' COMMENT '退款状态: 0-未发生实际退款, 1-部分退款, 2-全额退款',
`refund_times` INT NOT NULL DEFAULT 0 COMMENT '退款次数',
`refund_amount` BIGINT(20) NOT NULL DEFAULT 0 COMMENT '退款总金额,单位分',
`division_mode` TINYINT(6) DEFAULT 0 COMMENT '订单分账模式:0-该笔订单不允许分账, 1-支付成功按配置自动完成分账, 2-商户手动分账(解冻商户金额)',
`division_state` TINYINT(6) DEFAULT 0 COMMENT '订单分账状态:0-未发生分账, 1-等待分账任务处理, 2-分账处理中, 3-分账任务已结束(不体现状态)',
`division_last_time` DATETIME COMMENT '最新分账时间',
`err_code` VARCHAR(128) DEFAULT NULL COMMENT '渠道支付错误码',
`err_msg` VARCHAR(256) DEFAULT NULL COMMENT '渠道支付错误描述',
`ext_param` VARCHAR(128) DEFAULT NULL COMMENT '商户扩展参数',
`notify_url` VARCHAR(128) NOT NULL default '' COMMENT '异步通知地址',
`return_url` VARCHAR(128) DEFAULT '' COMMENT '页面跳转地址',
`expired_time` DATETIME DEFAULT NULL COMMENT '订单失效时间',
`success_time` DATETIME DEFAULT NULL COMMENT '订单支付成功时间',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`pay_order_id`),
UNIQUE KEY `Uni_MchNo_MchOrderNo` (`mch_no`, `mch_order_no`),
INDEX(`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付订单表';
-- 商户通知记录表
DROP TABLE IF EXISTS t_mch_notify_record;
CREATE TABLE `t_mch_notify_record` (
`notify_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '商户通知记录ID',
`order_id` VARCHAR(64) NOT NULL COMMENT '订单ID',
`order_type` TINYINT(6) NOT NULL COMMENT '订单类型:1-支付,2-退款',
`mch_order_no` VARCHAR(64) NOT NULL COMMENT '商户订单号',
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`isv_no` VARCHAR(64) COMMENT '服务商号',
`app_id` VARCHAR(64) NOT NULL COMMENT '应用ID',
`notify_url` TEXT NOT NULL COMMENT '通知地址',
`res_result` TEXT DEFAULT NULL COMMENT '通知响应结果',
`notify_count` INT(11) NOT NULL DEFAULT '0' COMMENT '通知次数',
`notify_count_limit` INT(11) NOT NULL DEFAULT '6' COMMENT '最大通知次数, 默认6次',
`state` TINYINT(6) NOT NULL DEFAULT '1' COMMENT '通知状态,1-通知中,2-通知成功,3-通知失败',
`last_notify_time` DATETIME DEFAULT NULL COMMENT '最后一次通知时间',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`notify_id`),
UNIQUE KEY `Uni_OrderId_Type` (`order_id`, `order_type`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COMMENT='商户通知记录表';
-- 订单接口数据快照(加密存储)
DROP TABLE IF EXISTS `t_order_snapshot`;
CREATE TABLE `t_order_snapshot` (
`order_id` VARCHAR(64) NOT NULL COMMENT '订单ID',
`order_type` TINYINT(6) NOT NULL COMMENT '订单类型: 1-支付, 2-退款',
`mch_req_data` TEXT DEFAULT NULL COMMENT '下游请求数据',
`mch_req_time` DATETIME DEFAULT NULL COMMENT '下游请求时间',
`mch_resp_data` TEXT DEFAULT NULL COMMENT '向下游响应数据',
`mch_resp_time` DATETIME DEFAULT NULL COMMENT '向下游响应时间',
`channel_req_data` TEXT DEFAULT NULL COMMENT '向上游请求数据',
`channel_req_time` DATETIME DEFAULT NULL COMMENT '向上游请求时间',
`channel_resp_data` TEXT DEFAULT NULL COMMENT '上游响应数据',
`channel_resp_time` DATETIME DEFAULT NULL COMMENT '上游响应时间',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`order_id`, `order_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单接口数据快照';
-- 退款订单表
DROP TABLE IF EXISTS t_refund_order;
CREATE TABLE `t_refund_order` (
`refund_order_id` VARCHAR(30) NOT NULL COMMENT '退款订单号(支付系统生成订单号)',
`pay_order_id` VARCHAR(30) NOT NULL COMMENT '支付订单号(与t_pay_order对应)',
`channel_pay_order_no` VARCHAR(64) DEFAULT NULL COMMENT '渠道支付单号(与t_pay_order channel_order_no对应)',
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`isv_no` VARCHAR(64) COMMENT '服务商号',
`app_id` VARCHAR(64) NOT NULL COMMENT '应用ID',
`mch_name` VARCHAR(30) NOT NULL COMMENT '商户名称',
`mch_type` TINYINT(6) NOT NULL COMMENT '类型: 1-普通商户, 2-特约商户(服务商模式)',
`mch_refund_no` VARCHAR(64) NOT NULL COMMENT '商户退款单号(商户系统的订单号)',
`way_code` VARCHAR(20) NOT NULL COMMENT '支付方式代码',
`if_code` VARCHAR(20) NOT NULL COMMENT '支付接口代码',
`pay_amount` BIGINT(20) NOT NULL COMMENT '支付金额,单位分',
`refund_amount` BIGINT(20) NOT NULL COMMENT '退款金额,单位分',
`currency` VARCHAR(3) NOT NULL DEFAULT 'cny' COMMENT '三位货币代码,人民币:cny',
`state` TINYINT(6) NOT NULL DEFAULT '0' COMMENT '退款状态:0-订单生成,1-退款中,2-退款成功,3-退款失败,4-退款任务关闭',
`client_ip` VARCHAR(32) DEFAULT NULL COMMENT '客户端IP',
`refund_reason` VARCHAR(256) NOT NULL COMMENT '退款原因',
`channel_order_no` VARCHAR(32) DEFAULT NULL COMMENT '渠道订单号',
`err_code` VARCHAR(128) DEFAULT NULL COMMENT '渠道错误码',
`err_msg` VARCHAR(2048) DEFAULT NULL COMMENT '渠道错误描述',
`channel_extra` VARCHAR(512) DEFAULT NULL COMMENT '特定渠道发起时额外参数',
`notify_url` VARCHAR(128) DEFAULT NULL COMMENT '通知地址',
`ext_param` VARCHAR(64) DEFAULT NULL COMMENT '扩展参数',
`success_time` DATETIME DEFAULT NULL COMMENT '订单退款成功时间',
`expired_time` DATETIME DEFAULT NULL COMMENT '退款失效时间(失效后系统更改为退款任务关闭状态)',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`refund_order_id`),
UNIQUE KEY `Uni_MchNo_MchRefundNo` (`mch_no`, `mch_refund_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='退款订单表';
-- 转账订单表
DROP TABLE IF EXISTS t_transfer_order;
CREATE TABLE `t_transfer_order` (
`transfer_id` VARCHAR(32) NOT NULL COMMENT '转账订单号',
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`isv_no` VARCHAR(64) COMMENT '服务商号',
`app_id` VARCHAR(64) NOT NULL COMMENT '应用ID',
`mch_name` VARCHAR(30) NOT NULL COMMENT '商户名称',
`mch_type` TINYINT(6) NOT NULL COMMENT '类型: 1-普通商户, 2-特约商户(服务商模式)',
`mch_order_no` VARCHAR(64) NOT NULL COMMENT '商户订单号',
`if_code` VARCHAR(20) NOT NULL COMMENT '支付接口代码',
`entry_type` VARCHAR(20) NOT NULL COMMENT '入账方式: WX_CASH-微信零钱; ALIPAY_CASH-支付宝转账; BANK_CARD-银行卡',
`amount` BIGINT(20) NOT NULL COMMENT '转账金额,单位分',
`currency` VARCHAR(3) NOT NULL DEFAULT 'cny' COMMENT '三位货币代码,人民币:cny',
`account_no` VARCHAR(64) NOT NULL COMMENT '收款账号',
`account_name` VARCHAR(64) COMMENT '收款人姓名',
`bank_name` VARCHAR(32) COMMENT '收款人开户行名称',
`transfer_desc` VARCHAR(128) NOT NULL DEFAULT '' COMMENT '转账备注信息',
`client_ip` VARCHAR(32) DEFAULT NULL COMMENT '客户端IP',
`state` TINYINT(6) NOT NULL DEFAULT '0' COMMENT '支付状态: 0-订单生成, 1-转账中, 2-转账成功, 3-转账失败, 4-订单关闭',
`channel_extra` VARCHAR(512) DEFAULT NULL COMMENT '特定渠道发起额外参数',
`channel_order_no` VARCHAR(64) DEFAULT NULL COMMENT '渠道订单号',
`err_code` VARCHAR(128) DEFAULT NULL COMMENT '渠道支付错误码',
`err_msg` VARCHAR(256) DEFAULT NULL COMMENT '渠道支付错误描述',
`ext_param` VARCHAR(128) DEFAULT NULL COMMENT '商户扩展参数',
`notify_url` VARCHAR(128) NOT NULL default '' COMMENT '异步通知地址',
`success_time` DATETIME DEFAULT NULL COMMENT '转账成功时间',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`transfer_id`),
UNIQUE KEY `Uni_MchNo_MchOrderNo` (`mch_no`, `mch_order_no`),
INDEX(`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='转账订单表';
-- 商户分账接收者账号组
DROP TABLE IF EXISTS `t_mch_division_receiver_group`;
CREATE TABLE `t_mch_division_receiver_group` (
`receiver_group_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '组ID',
`receiver_group_name` VARCHAR(64) NOT NULL COMMENT '组名称',
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`auto_division_flag` TINYINT(6) NOT NULL DEFAULT 0 COMMENT '自动分账组(当订单分账模式为自动分账,改组将完成分账逻辑) 0-否 1-是',
`created_uid` BIGINT(20) NOT NULL COMMENT '创建者用户ID',
`created_by` VARCHAR(64) NOT NULL COMMENT '创建者姓名',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`receiver_group_id`)
) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb4 COMMENT='分账账号组';
-- 商户分账接收者账号绑定关系表
DROP TABLE IF EXISTS `t_mch_division_receiver`;
CREATE TABLE `t_mch_division_receiver` (
`receiver_id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '分账接收者ID',
`receiver_alias` VARCHAR(64) NOT NULL COMMENT '接收者账号别名',
`receiver_group_id` BIGINT(20) COMMENT '组ID(便于商户接口使用)',
`receiver_group_name` VARCHAR(64) COMMENT '组名称',
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`isv_no` VARCHAR(64) COMMENT '服务商号',
`app_id` VARCHAR(64) NOT NULL COMMENT '应用ID',
`if_code` VARCHAR(20) NOT NULL COMMENT '支付接口代码',
`acc_type` TINYINT(6) NOT NULL COMMENT '分账接收账号类型: 0-个人(对私) 1-商户(对公)',
`acc_no` VARCHAR(50) NOT NULL COMMENT '分账接收账号',
`acc_name` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '分账接收账号名称',
`relation_type` VARCHAR(30) NOT NULL COMMENT '分账关系类型(参考微信), 如: SERVICE_PROVIDER 服务商等',
`relation_type_name` VARCHAR(30) NOT NULL COMMENT '当选择自定义时,需要录入该字段。 否则为对应的名称',
`division_profit` DECIMAL(20,6) COMMENT '分账比例',
`state` TINYINT(6) NOT NULL COMMENT '分账状态(本系统状态,并不调用上游关联关系): 1-正常分账, 0-暂停分账',
`channel_bind_result` TEXT COMMENT '上游绑定返回信息,一般用作查询账号异常时的记录',
`channel_ext_info` TEXT COMMENT '渠道特殊信息',
`bind_success_time` DATETIME DEFAULT NULL COMMENT '绑定成功时间',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`receiver_id`)
) ENGINE=InnoDB AUTO_INCREMENT=800001 DEFAULT CHARSET=utf8mb4 COMMENT='商户分账接收者账号绑定关系表';
-- 分账记录表
DROP TABLE IF EXISTS `t_pay_order_division_record`;
CREATE TABLE `t_pay_order_division_record` (
`record_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '分账记录ID',
`mch_no` VARCHAR(64) NOT NULL COMMENT '商户号',
`isv_no` VARCHAR(64) COMMENT '服务商号',
`app_id` VARCHAR(64) NOT NULL COMMENT '应用ID',
`mch_name` VARCHAR(30) NOT NULL COMMENT '商户名称',
`mch_type` TINYINT(6) NOT NULL COMMENT '类型: 1-普通商户, 2-特约商户(服务商模式)',
`if_code` VARCHAR(20) NOT NULL COMMENT '支付接口代码',
`pay_order_id` VARCHAR(30) NOT NULL COMMENT '系统支付订单号',
`pay_order_channel_order_no` VARCHAR(64) COMMENT '支付订单渠道支付订单号',
`pay_order_amount` BIGINT(20) NOT NULL COMMENT '订单金额,单位分',
`pay_order_division_amount` BIGINT(20) NOT NULL COMMENT '订单实际分账金额, 单位:分(订单金额 - 商户手续费 - 已退款金额)',
`batch_order_id` VARCHAR(30) NOT NULL COMMENT '系统分账批次号',
`channel_batch_order_id` VARCHAR(64) COMMENT '上游分账批次号',
`state` TINYINT(6) NOT NULL COMMENT '状态: 0-待分账 1-分账成功, 2-分账失败',
`channel_resp_result` TEXT COMMENT '上游返回数据包',
`receiver_id` BIGINT(20) NOT NULL COMMENT '账号快照》 分账接收者ID',
`receiver_group_id` BIGINT(20) COMMENT '账号快照》 组ID(便于商户接口使用)',
`receiver_alias` VARCHAR(64) COMMENT '接收者账号别名',
`acc_type` TINYINT(6) NOT NULL COMMENT '账号快照》 分账接收账号类型: 0-个人 1-商户',
`acc_no` VARCHAR(50) NOT NULL COMMENT '账号快照》 分账接收账号',
`acc_name` VARCHAR(30) NOT NULL DEFAULT '' COMMENT '账号快照》 分账接收账号名称',
`relation_type` VARCHAR(30) NOT NULL COMMENT '账号快照》 分账关系类型(参考微信), 如: SERVICE_PROVIDER 服务商等',
`relation_type_name` VARCHAR(30) NOT NULL COMMENT '账号快照》 当选择自定义时,需要录入该字段。 否则为对应的名称',
`division_profit` DECIMAL(20,6) NOT NULL COMMENT '账号快照》 配置的实际分账比例',
`cal_division_amount` BIGINT(20) NOT NULL COMMENT '计算该接收方的分账金额,单位分',
`created_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '创建时间',
`updated_at` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) COMMENT '更新时间',
PRIMARY KEY (`record_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1001 DEFAULT CHARSET=utf8mb4 COMMENT='分账记录表';