核心的表有支付渠道表、交易单表、退款记录表。

支付接口:收到支付请求后请求第三方支付的下单接口,并向交易单表新增记录。

查询交易结果接口:请求第三方支付的查询支付结果并更新交易单表的支付状态。

接收第三方通过支付结果:更新交易单表的支付状态。

退款接口:新增退款记录

更新退款状态:请求第三方退款结果查询接口查询退款状态,并更新退款状态。

1. 支付渠道表(payment_channel

1.1 目的

该表存储了所有支持的支付渠道信息。支付渠道表的主要作用是配置和管理不同支付渠道的基本参数(例如:微信、支付宝等),以便在实际支付时根据渠道进行相应的处理。

1.2 关键字段

  • channel_namechannel_label:渠道名称和渠道的唯一标记,用于标识不同的支付通道,如微信、支付宝等。
  • app_idpublic_keymerchant_private_key:支付相关的凭证和密钥,存储第三方支付的密钥信息,用于加密和校验支付请求。
  • other_config:用于保存其他配置信息,可能包括回调地址、签名算法等。
  • encrypt_key:存储AES加密的密钥,用于支付数据加密。

1.3 示例

CREATE TABLE `pay_channel` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `channel_name` VARCHAR(32) NOT NULL COMMENT '通道名称',
    `channel_label` VARCHAR(32) NOT NULL COMMENT '通道唯一标记',
    `domain` VARCHAR(255) NULL COMMENT '域名',
    `app_id` VARCHAR(32) NOT NULL COMMENT '商户appid',
    `public_key` VARCHAR(2000) COLLATE utf8_bin NOT NULL COMMENT '支付公钥',
    `merchant_private_key` VARCHAR(2000) COLLATE utf8_bin NOT NULL COMMENT '商户私钥',
    `other_config` VARCHAR(1000) NULL COMMENT '其他配置',
    `encrypt_key` VARCHAR(255) CHARACTER SET utf8mb4 NOT NULL COMMENT 'AES混淆密钥',
    `remark` VARCHAR(255) NULL COMMENT '说明',
    `notify_url` VARCHAR(255) NULL COMMENT '回调地址',
    `enable_flag` VARCHAR(10) NOT NULL COMMENT '是否有效',
    `enterprise_id` BIGINT NOT NULL COMMENT '商户ID【系统内部识别使用】',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`)
) COMMENT='交易渠道表' COLLATE=utf8mb4_unicode_ci;

2. 交易单表(payment_transaction

2.1 目的

交易单表用于记录每笔支付的详细信息,涉及到用户发起支付后的整个生命周期,包括支付发起、支付成功、失败或退款等。

2.2 关键字段

  • product_order_notrading_order_no:分别对应业务系统的订单号和支付系统的交易单号,保证每笔交易与业务系统订单的关联。
  • transaction_id:第三方支付平台(如微信、支付宝)生成的交易号,用于后续支付结果的查询和校对。
  • payee_idpayer_id:收款方和付款方的标识。
  • trading_amount:交易金额,记录用户支付的实际金额。
  • refundis_refund:标识是否已发起退款,及退款金额的记录。
  • result_coderesult_msgresult_json:保存支付结果的详细信息,包括支付成功或失败的原因。
  • place_order_codeplace_order_json:保存下单时的返回数据,如二维码信息、下单响应。

2.3 示例

CREATE TABLE `trading` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `product_order_no` BIGINT NOT NULL COMMENT '业务系统订单号',
    `trading_order_no` BIGINT NOT NULL COMMENT '交易系统订单号【对于三方来说:商户订单】',
    `transaction_id` VARCHAR(50) NULL COMMENT '第三方支付交易号',
    `trading_channel` VARCHAR(32) CHARACTER SET utf8mb4 NOT NULL COMMENT '支付渠道',
    `trading_type` VARCHAR(22) NULL COMMENT '交易类型【付款、退款】',
    `trading_state` INT NOT NULL COMMENT '交易状态【2-支付成功,其他状态可以自定义】',
    `payee_name` VARCHAR(50) NULL COMMENT '收款人姓名',
    `payee_id` BIGINT NULL COMMENT '收款人账号ID',
    `payer_name` VARCHAR(50) NULL COMMENT '付款人姓名',
    `payer_id` BIGINT NULL COMMENT '付款人ID',
    `trading_amount` DECIMAL(22, 2) NOT NULL COMMENT '交易金额,单位:分',
    `refund` DECIMAL(12, 2) NULL COMMENT '退款金额,单位:分',
    `is_refund` VARCHAR(32) CHARACTER SET utf8mb4 NULL COMMENT '是否退款',
    `result_code` VARCHAR(80) CHARACTER SET utf8mb4 NULL COMMENT '返回编码',
    `result_msg` VARCHAR(255) CHARACTER SET utf8mb4 NULL COMMENT '返回信息',
    `result_json` VARCHAR(2000) CHARACTER SET utf8mb4 NULL COMMENT '第三方交易返回信息JSON',
    `place_order_code` VARCHAR(80) CHARACTER SET utf8mb4 NULL COMMENT '统一下单返回编码',
    `place_order_msg` VARCHAR(255) CHARACTER SET utf8mb4 NULL COMMENT '统一下单返回信息',
    `place_order_json` TEXT CHARACTER SET utf8mb4 NULL COMMENT '统一下单返回信息JSON',
    `memo` VARCHAR(150) NULL COMMENT '备注【订单门店,桌台信息】',
    `qr_code` TEXT NULL COMMENT '含注【订单二维码信息,桌台信息】',
    `open_id` VARCHAR(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '用户open_id',
    `enable_flag` VARCHAR(10) NOT NULL COMMENT '是否有效',
    `enterprise_id` BIGINT NULL COMMENT '商户ID',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `trading_order_no` (`trading_order_no`) COMMENT '支付订单号'
) COMMENT='交易订单表' COLLATE=utf8mb4_unicode_ci;

3. 退款记录表(refund_record

3.1 目的

退款表用于记录每次退款操作的详细信息,尤其是在部分退款或多次退款的场景下,必须保存每次退款的记录,以便后续查询和对账。

3.2 关键字段

  • trading_order_noproduct_order_no:关联支付系统的交易单号和业务系统的订单号,用于明确当前退款操作对应的订单。
  • refund_norefund_id:分别是系统生成的退款单号和第三方支付平台返回的退款单号。
  • refund_status:标识退款的进度,状态包括发起退款、退款中、退款成功、退款失败等。
  • refund_amounttotal:分别保存当前退款金额和订单总金额,用于判断部分退款的情况。
  • refund_msg:记录退款过程中返回的详细信息,以便后续排查和审计。

3.3 示例

CREATE TABLE `refund_record` (
    `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键',
    `trading_order_no` BIGINT NOT NULL COMMENT '交易系统订单号【对于三方来说:商户订单】',
    `product_order_no` BIGINT NOT NULL COMMENT '业务系统订单号',
    `refund_no` BIGINT NOT NULL COMMENT '本次退款订单号',
    `refund_id` VARCHAR(50) NULL COMMENT '第三方支付的退款单号',
    `enterprise_id` BIGINT NOT NULL COMMENT '商户号',
    `trading_channel` VARCHAR(32) CHARACTER SET utf8mb4 NOT NULL COMMENT '退款渠道【支付宝、微信、现金】',
    `refund_status` INT NOT NULL COMMENT '退款状态:0-发起退款,1-退款中,2-成功, 3-失败',
    `refund_code` VARCHAR(80) CHARACTER SET utf8mb4 NULL COMMENT '返回编码',
    `refund_msg` TEXT CHARACTER SET utf8mb4 NULL COMMENT '返回信息',
    `memo` VARCHAR(150) CHARACTER SET utf8mb4 NULL COMMENT '备注【订单门店,桌台信息】',
    `refund_amount` DECIMAL(12, 2) NOT NULL COMMENT '本次退款金额',
    `total` DECIMAL(12, 2) NOT NULL COMMENT '原订单金额',
    `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间',
    `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    PRIMARY KEY (`id`),
    UNIQUE KEY `refund_no` (`refund_no`) COMMENT '退款订单号'
) COMMENT='退款记录表' COLLATE=utf8mb4_unicode_ci;

4. 支付日志表(payment_log,可选)

4.1 目的

记录每次支付和退款请求、响应的信息,便于排查问题。

4.2 字段设计

  • log_id(主键):日志记录的唯一标识。
  • transaction_id:关联的交易单 ID(外键关联payment_transaction表)。
  • request_data:请求数据(如向第三方支付平台发起请求时的参数)。
  • response_data:响应数据(如第三方支付平台返回的结果)。
  • log_time:日志记录时间。

5. 设计思路总结

  • 支付渠道表 (pay_channel) 用于存储支付渠道的配置信息,主要记录了支付相关的密钥、加密参数以及回调地址等,确保可以根据不同支付渠道选择相应的配置。
  • 交易单表 (trading) 记录每一笔交易的详细信息,包括支付渠道、金额、状态、收付款双方的基本信息等。还设计了退款的相关字段,用于跟踪订单是否已发起退款及退款金额。
  • 退款记录表 (refund_record) 详细记录了每次退款的申请和处理结果,特别是在部分退款或多次退款的情况下,保证退款信息的完整性和可追溯性。
  • 支付日志表(payment_log)为确保支付的安全性和可靠性,可以考虑增加支付日志表记录每次请求与响应。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐