1.1 涉及表介绍

创建MySQL数据库:xxpaydb,创建用户名:xxpay,密码:xxpay

支付中心涉及到的表:

序号 表名 描述
1 t_mch_info 商户信息表
2 t_pay_channel 支付渠道表
3 t_pay_order 支付订单表
4 t_iap_receipt 苹果支付凭据表
5 t_trans_order 转账订单表
6 t_refund_order 退款订单表
7 t_mch_notify 商户通知表

测试商城涉及到的表:

序号 表名 描述
1 t_goods_order 商品订单表,演示商城使用的交易表

1.2 执行建表语句

执行如下建表语句,也可参考init_db.sql(在项目根路径xxpay-master下)。

  1. /* 支付中心相关表结构 */
  2. CREATE TABLE `t_mch_info` (
  3. `MchId` varchar(30) NOT NULL COMMENT '商户ID',
  4. `Name` varchar(30) NOT NULL COMMENT '名称',
  5. `Type` varchar(24) NOT NULL COMMENT '类型',
  6. `ReqKey` varchar(128) NOT NULL COMMENT '请求私钥',
  7. `ResKey` varchar(128) NOT NULL COMMENT '响应私钥',
  8. `State` tinyint(6) NOT NULL DEFAULT '1' COMMENT '商户状态,0-停止使用,1-使用中',
  9. `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  10. `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  11. PRIMARY KEY (`MchId`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商户信息表';
  13. CREATE TABLE `t_pay_channel` (
  14. `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '渠道主键ID',
  15. `ChannelId` varchar(24) NOT NULL COMMENT '渠道ID',
  16. `ChannelName` varchar(30) NOT NULL COMMENT '渠道名称,如:alipay,wechat',
  17. `ChannelMchId` varchar(32) NOT NULL COMMENT '渠道商户ID',
  18. `MchId` varchar(30) NOT NULL COMMENT '商户ID',
  19. `State` tinyint(6) NOT NULL DEFAULT '1' COMMENT '渠道状态,0-停止使用,1-使用中',
  20. `Param` varchar(2048) NOT NULL COMMENT '配置参数,json字符串',
  21. `Remark` varchar(128) DEFAULT NULL COMMENT '备注',
  22. `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  23. `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  24. PRIMARY KEY (`ID`),
  25. UNIQUE KEY `IDX_MchId_MchOrderNo` (`ChannelId`, `MchId`)
  26. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付渠道表';
  27. CREATE TABLE `t_pay_order` (
  28. `PayOrderId` varchar(30) NOT NULL COMMENT '支付订单号',
  29. `MchId` varchar(30) NOT NULL COMMENT '商户ID',
  30. `MchOrderNo` varchar(30) NOT NULL COMMENT '商户订单号',
  31. `ChannelId` varchar(24) NOT NULL COMMENT '渠道ID',
  32. `Amount` bigint(20) NOT NULL COMMENT '支付金额,单位分',
  33. `Currency` varchar(3) NOT NULL DEFAULT 'cny' COMMENT '三位货币代码,人民币:cny',
  34. `Status` tinyint(6) NOT NULL DEFAULT '0' COMMENT '支付状态,0-订单生成,1-支付中(目前未使用),2-支付成功,3-业务处理完成',
  35. `ClientIp` varchar(32) DEFAULT NULL COMMENT '客户端IP',
  36. `Device` varchar(64) DEFAULT NULL COMMENT '设备',
  37. `Subject` varchar(64) NOT NULL COMMENT '商品标题',
  38. `Body` varchar(256) NOT NULL COMMENT '商品描述信息',
  39. `Extra` varchar(512) DEFAULT NULL COMMENT '特定渠道发起时额外参数',
  40. `ChannelMchId` varchar(32) NOT NULL COMMENT '渠道商户ID',
  41. `ChannelOrderNo` varchar(64) DEFAULT NULL COMMENT '渠道订单号',
  42. `ErrCode` varchar(64) DEFAULT NULL COMMENT '渠道支付错误码',
  43. `ErrMsg` varchar(128) DEFAULT NULL COMMENT '渠道支付错误描述',
  44. `Param1` varchar(64) DEFAULT NULL COMMENT '扩展参数1',
  45. `Param2` varchar(64) DEFAULT NULL COMMENT '扩展参数2',
  46. `NotifyUrl` varchar(128) NOT NULL COMMENT '通知地址',
  47. `NotifyCount` tinyint(6) NOT NULL DEFAULT 0 COMMENT '通知次数',
  48. `LastNotifyTime` bigint(20) DEFAULT NULL COMMENT '最后一次通知时间',
  49. `ExpireTime` bigint(20) DEFAULT NULL COMMENT '订单失效时间',
  50. `PaySuccTime` bigint(20) DEFAULT NULL COMMENT '订单支付成功时间',
  51. `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  52. `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  53. PRIMARY KEY (`PayOrderId`),
  54. UNIQUE KEY `IDX_MchId_MchOrderNo` (`MchId`, MchOrderNo)
  55. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='支付订单表';
  56. CREATE TABLE `t_iap_receipt` (
  57. `PayOrderId` varchar(30) NOT NULL COMMENT '支付订单号',
  58. `MchId` varchar(30) NOT NULL COMMENT '商户ID',
  59. `TransactionId` varchar(24) NOT NULL COMMENT 'IAP业务号',
  60. `ReceiptData` TEXT NOT NULL COMMENT '渠道ID',
  61. `Status` tinyint(6) NOT NULL DEFAULT '0' COMMENT '处理状态:0-未处理,1-处理成功,-1-处理失败',
  62. `HandleCount` tinyint(6) NOT NULL DEFAULT 0 COMMENT '处理次数',
  63. `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  64. `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  65. PRIMARY KEY (`PayOrderId`)
  66. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='苹果支付凭据表';
  67. CREATE TABLE `t_trans_order` (
  68. `TransOrderId` varchar(30) NOT NULL COMMENT '转账订单号',
  69. `MchId` varchar(30) NOT NULL COMMENT '商户ID',
  70. `MchOrderNo` varchar(30) NOT NULL COMMENT '商户订单号',
  71. `ChannelId` varchar(24) NOT NULL COMMENT '渠道ID',
  72. `Amount` bigint(20) NOT NULL COMMENT '转账金额,单位分',
  73. `Currency` varchar(3) NOT NULL DEFAULT 'cny' COMMENT '三位货币代码,人民币:cny',
  74. `Status` tinyint(6) NOT NULL DEFAULT '0' COMMENT '支付状态:0-订单生成,1-转账中,2-转账成功,3-转账失败,4-业务处理完成,5-确认失败,6-不确认结果,7-等待手动处理,8-手动处理提现成功,9-手动处理提现失败',
  75. `ClientIp` varchar(32) DEFAULT NULL COMMENT '客户端IP',
  76. `Device` varchar(64) DEFAULT NULL COMMENT '设备',
  77. `RemarkInfo` varchar(256) DEFAULT NULL COMMENT '备注',
  78. `OpenId` varchar(32) DEFAULT NULL COMMENT '渠道用户标识,如微信openId',
  79. `CheckName` tinyint(6) NOT NULL DEFAULT '0' COMMENT '校验姓名:0-不校验真实姓名,1-强校验真实姓名,2-针对已实名认证的用户才校验真实姓名',
  80. `UserName` varchar(24) DEFAULT NULL COMMENT '用户姓名',
  81. `Extra` varchar(512) DEFAULT NULL COMMENT '特定渠道发起时额外参数',
  82. `ChannelMchId` varchar(32) NOT NULL COMMENT '渠道商户ID',
  83. `ChannelOrderNo` varchar(32) DEFAULT NULL COMMENT '渠道订单号',
  84. `ErrCode` varchar(64) DEFAULT NULL COMMENT '渠道支付错误码',
  85. `ErrMsg` varchar(128) DEFAULT NULL COMMENT '渠道支付错误描述',
  86. `Param1` varchar(64) DEFAULT NULL COMMENT '扩展参数1',
  87. `Param2` varchar(64) DEFAULT NULL COMMENT '扩展参数2',
  88. `NotifyUrl` varchar(128) NOT NULL COMMENT '通知地址',
  89. `NotifyCount` tinyint(6) NOT NULL DEFAULT 0 COMMENT '通知次数',
  90. `LastNotifyTime` bigint(20) DEFAULT NULL COMMENT '最后一次通知时间',
  91. `ExpireTime` bigint(20) DEFAULT NULL COMMENT '订单失效时间',
  92. `TransSuccTime` bigint(20) DEFAULT NULL COMMENT '订单转账成功时间',
  93. `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  94. `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  95. PRIMARY KEY (`TransOrderId`),
  96. UNIQUE KEY `IDX_MchId_MchOrderNo` (`MchId`, MchOrderNo)
  97. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='转账订单表';
  98. CREATE TABLE `t_trans_order` (
  99. `TransOrderId` varchar(30) NOT NULL COMMENT '转账订单号',
  100. `MchId` varchar(30) NOT NULL COMMENT '商户ID',
  101. `MchTransNo` varchar(30) NOT NULL COMMENT '商户转账单号',
  102. `ChannelId` varchar(24) NOT NULL COMMENT '渠道ID',
  103. `Amount` bigint(20) NOT NULL COMMENT '转账金额,单位分',
  104. `Currency` varchar(3) NOT NULL DEFAULT 'cny' COMMENT '三位货币代码,人民币:cny',
  105. `Status` tinyint(6) NOT NULL DEFAULT '0' COMMENT '转账状态:0-订单生成,1-转账中,2-转账成功,3-转账失败,4-业务处理完成',
  106. `Result` tinyint(6) NOT NULL DEFAULT '0' COMMENT '转账结果:0-不确认结果,1-等待手动处理,2-确认成功,3-确认失败',
  107. `ClientIp` varchar(32) DEFAULT NULL COMMENT '客户端IP',
  108. `Device` varchar(64) DEFAULT NULL COMMENT '设备',
  109. `RemarkInfo` varchar(256) DEFAULT NULL COMMENT '备注',
  110. `ChannelUser` varchar(32) DEFAULT NULL COMMENT '渠道用户标识,如微信openId,支付宝账号',
  111. `UserName` varchar(24) DEFAULT NULL COMMENT '用户姓名',
  112. `ChannelMchId` varchar(32) NOT NULL COMMENT '渠道商户ID',
  113. `ChannelOrderNo` varchar(32) DEFAULT NULL COMMENT '渠道订单号',
  114. `ChannelErrCode` varchar(128) DEFAULT NULL COMMENT '渠道错误码',
  115. `ChannelErrMsg` varchar(128) DEFAULT NULL COMMENT '渠道错误描述',
  116. `Extra` varchar(512) DEFAULT NULL COMMENT '特定渠道发起时额外参数',
  117. `NotifyUrl` varchar(128) NOT NULL COMMENT '通知地址',
  118. `Param1` varchar(64) DEFAULT NULL COMMENT '扩展参数1',
  119. `Param2` varchar(64) DEFAULT NULL COMMENT '扩展参数2',
  120. `ExpireTime` datetime DEFAULT NULL COMMENT '订单失效时间',
  121. `TransSuccTime` datetime DEFAULT NULL COMMENT '订单转账成功时间',
  122. `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  123. `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  124. PRIMARY KEY (`TransOrderId`),
  125. UNIQUE KEY `IDX_MchId_MchOrderNo` (`MchId`, MchTransNo)
  126. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='转账订单表';
  127. CREATE TABLE `t_refund_order` (
  128. `RefundOrderId` varchar(30) NOT NULL COMMENT '退款订单号',
  129. `PayOrderId` varchar(30) NOT NULL COMMENT '支付订单号',
  130. `ChannelPayOrderNo` varchar(64) DEFAULT NULL COMMENT '渠道支付单号',
  131. `MchId` varchar(30) NOT NULL COMMENT '商户ID',
  132. `MchRefundNo` varchar(30) NOT NULL COMMENT '商户退款单号',
  133. `ChannelId` varchar(24) NOT NULL COMMENT '渠道ID',
  134. `PayAmount` bigint(20) NOT NULL COMMENT '支付金额,单位分',
  135. `RefundAmount` bigint(20) NOT NULL COMMENT '退款金额,单位分',
  136. `Currency` varchar(3) NOT NULL DEFAULT 'cny' COMMENT '三位货币代码,人民币:cny',
  137. `Status` tinyint(6) NOT NULL DEFAULT '0' COMMENT '退款状态:0-订单生成,1-退款中,2-退款成功,3-退款失败,4-业务处理完成',
  138. `Result` tinyint(6) NOT NULL DEFAULT '0' COMMENT '退款结果:0-不确认结果,1-等待手动处理,2-确认成功,3-确认失败',
  139. `ClientIp` varchar(32) DEFAULT NULL COMMENT '客户端IP',
  140. `Device` varchar(64) DEFAULT NULL COMMENT '设备',
  141. `RemarkInfo` varchar(256) DEFAULT NULL COMMENT '备注',
  142. `ChannelUser` varchar(32) DEFAULT NULL COMMENT '渠道用户标识,如微信openId,支付宝账号',
  143. `UserName` varchar(24) DEFAULT NULL COMMENT '用户姓名',
  144. `ChannelMchId` varchar(32) NOT NULL COMMENT '渠道商户ID',
  145. `ChannelOrderNo` varchar(32) DEFAULT NULL COMMENT '渠道订单号',
  146. `ChannelErrCode` varchar(128) DEFAULT NULL COMMENT '渠道错误码',
  147. `ChannelErrMsg` varchar(128) DEFAULT NULL COMMENT '渠道错误描述',
  148. `Extra` varchar(512) DEFAULT NULL COMMENT '特定渠道发起时额外参数',
  149. `NotifyUrl` varchar(128) NOT NULL COMMENT '通知地址',
  150. `Param1` varchar(64) DEFAULT NULL COMMENT '扩展参数1',
  151. `Param2` varchar(64) DEFAULT NULL COMMENT '扩展参数2',
  152. `ExpireTime` datetime DEFAULT NULL COMMENT '订单失效时间',
  153. `RefundSuccTime` datetime DEFAULT NULL COMMENT '订单退款成功时间',
  154. `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  155. `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  156. PRIMARY KEY (`RefundOrderId`),
  157. UNIQUE KEY `IDX_MchId_MchOrderNo` (`MchId`, MchRefundNo)
  158. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='退款订单表';
  159. CREATE TABLE `t_mch_notify` (
  160. `OrderId` varchar(24) NOT NULL COMMENT '订单ID',
  161. `MchId` varchar(30) NOT NULL COMMENT '商户ID',
  162. `MchOrderNo` varchar(30) NOT NULL COMMENT '商户订单号',
  163. `OrderType` varchar(8) NOT NULL COMMENT '订单类型:1-支付,2-转账,3-退款',
  164. `NotifyUrl` varchar(2048) NOT NULL COMMENT '通知地址',
  165. `NotifyCount` tinyint(6) NOT NULL DEFAULT 0 COMMENT '通知次数',
  166. `Result` varchar(2048) DEFAULT NULL COMMENT '通知响应结果',
  167. `Status` tinyint(6) NOT NULL DEFAULT '1' COMMENT '通知状态,1-通知中,2-通知成功,3-通知失败',
  168. `LastNotifyTime` datetime DEFAULT NULL COMMENT '最后一次通知时间',
  169. `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  170. `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  171. PRIMARY KEY (`OrderId`),
  172. UNIQUE KEY `IDX_MchId_OrderType_MchOrderNo` (`MchId`, `OrderType`, `MchOrderNo`)
  173. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商户通知表';
  174. /* 支付演示商城相关表 */
  175. CREATE TABLE `t_goods_order` (
  176. `GoodsOrderId` varchar(30) NOT NULL COMMENT '商品订单ID',
  177. `GoodsId` varchar(30) NOT NULL COMMENT '商品ID',
  178. `GoodsName` varchar(64) NOT NULL DEFAULT '' COMMENT '商品名称',
  179. `Amount` bigint(20) NOT NULL COMMENT '金额,单位分',
  180. `UserId` varchar(30) NOT NULL COMMENT '用户ID',
  181. `Status` tinyint(6) NOT NULL DEFAULT '0' COMMENT '订单状态,订单生成(0),支付成功(1),处理完成(2),处理失败(-1)',
  182. `PayOrderId` varchar(30) DEFAULT NULL COMMENT '支付订单号',
  183. `ChannelId` varchar(24) DEFAULT NULL COMMENT '渠道ID',
  184. `ChannelUserId` varchar(64) DEFAULT NULL COMMENT '支付渠道用户ID(微信openID或支付宝账号等第三方支付账号)',
  185. `CreateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  186. `UpdateTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  187. PRIMARY KEY (`GoodsOrderId`),
  188. UNIQUE KEY `IDX_PayOrderId` (PayOrderId)
  189. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品订单表';