在Discuz! X3.5中,新增购买邀请码业务并接入新的支付系统(如QQ钱包支付)时,需要对数据库进行相应的升级。你提供的SQL语句已经涵盖了创建支付订单、退款和转账相关的表结构。以下是对这些SQL语句的详细解释和优化建议:
### 1. `pre_common_payment_order` 表
这个表用于存储支付订单的相关信息。
- DROP TABLE IF EXISTS pre_common_payment_order;
- CREATE TABLE pre_common_payment_order (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `out_biz_no` varchar(64) NOT NULL,
- `type` varchar(255) NOT NULL,
- `type_name` varchar(255) DEFAULT NULL,
- `uid` int(10) unsigned NOT NULL DEFAULT 0,
- `amount` int(10) unsigned NOT NULL,
- `amount_fee` int(10) unsigned NOT NULL,
- `subject` varchar(255) NOT NULL,
- `description` varchar(255) DEFAULT NULL,
- `expire_time` int(10) unsigned NOT NULL,
- `status` tinyint(1) NOT NULL,
- `return_url` varchar(255) DEFAULT NULL,
- `data` text DEFAULT NULL,
- `clientip` varchar(255) NOT NULL DEFAULT '',
- `remoteport` smallint(6) unsigned NOT NULL DEFAULT 0,
- `dateline` int(10) unsigned NOT NULL,
- `trade_no` varchar(255) DEFAULT NULL,
- `channel` varchar(255) DEFAULT NULL,
- `payment_time` int(10) unsigned DEFAULT NULL,
- `callback_status` tinyint(1) DEFAULT 0,
- PRIMARY KEY (`id`),
- UNIQUE KEY (`out_biz_no`),
- KEY (`uid`),
- KEY (`type`),
- KEY (`status`)
- ) ENGINE=InnoDB;
复制代码
#### 优化建议:
- `expire_time` 字段的拼写错误,应为 `expire_time`。
- `data` 字段类型为 `text`,建议使用 `mediumtext` 或 `longtext`,以支持更大的数据存储。
- `callback_status` 字段的默认值可以设置为 `0`,表示未回调。
### 2. `pre_common_payment_refund` 表
这个表用于存储退款订单的相关信息。
- DROP TABLE IF EXISTS pre_common_payment_refund;
- CREATE TABLE pre_common_payment_refund (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `order_id` int(10) unsigned NOT NULL,
- `out_biz_no` varchar(64) NOT NULL,
- `amount` int(10) unsigned NOT NULL,
- `description` varchar(255) NOT NULL,
- `status` tinyint(1) NOT NULL,
- `error` varchar(255) DEFAULT NULL,
- `refund_time` int(10) DEFAULT NULL,
- `clientip` varchar(255) NOT NULL DEFAULT '',
- `remoteport` smallint(6) unsigned NOT NULL DEFAULT 0,
- `dateline` int(10) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY (`out_biz_no`),
- INDEX (`order_id`)
- ) ENGINE=InnoDB;
复制代码
#### 优化建议:
- `refund_time` 字段的默认值可以设置为 `NULL`,表示未退款。
- `error` 字段可以设置为 `NULL`,表示没有错误。
### 3. `pre_common_payment_transfer` 表
这个表用于存储转账订单的相关信息。
- DROP TABLE IF EXISTS pre_common_payment_transfer;
- CREATE TABLE pre_common_payment_transfer (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `uid` int(10) unsigned NOT NULL,
- `out_biz_no` varchar(64) NOT NULL,
- `amount` int(10) unsigned NOT NULL,
- `subject` varchar(255) NOT NULL,
- `description` varchar(255) DEFAULT NULL,
- `realname` varchar(255) NOT NULL,
- `account` varchar(255) NOT NULL,
- `channel` varchar(255) DEFAULT NULL,
- `status` tinyint(1) unsigned NOT NULL,
- `error` varchar(255) DEFAULT NULL,
- `trade_no` varchar(255) DEFAULT NULL,
- `trade_time` int(10) unsigned DEFAULT NULL,
- `clientip` varchar(255) NOT NULL DEFAULT '',
- `remoteport` smallint(6) unsigned NOT NULL DEFAULT 0,
- `dateline` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY (`out_biz_no`),
- KEY (`uid`),
- KEY (`status`)
- ) ENGINE=InnoDB;
复制代码
#### 优化建议:
- `trade_time` 字段的默认值可以设置为 `NULL`,表示未完成交易。
- `error` 字段可以设置为 `NULL`,表示没有错误。
### 4. 其他优化建议
- **索引优化**:根据实际查询需求,可以适当增加或调整索引。例如,如果经常根据 `uid` 和 `status` 进行联合查询,可以创建一个复合索引 `(uid, status)`。
- **字段长度**:根据实际业务需求,适当调整字段长度。例如,`out_biz_no` 的长度可以根据支付平台的业务号长度进行调整。
- **字符集和排序规则**:建议使用 `utf8mb4` 字符集和 `utf8mb4_general_ci` 排序规则,以支持更多的字符和表情符号。
### 5. 安装脚本 (`install_data`)
在 `install_data` 中,确保这些表的创建语句被正确执行。可以在 `install_data.php` 中添加以下代码:
- $sql = <<<EOF
- DROP TABLE IF EXISTS pre_common_payment_order;
- CREATE TABLE pre_common_payment_order (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `out_biz_no` varchar(64) NOT NULL,
- `type` varchar(255) NOT NULL,
- `type_name` varchar(255) DEFAULT NULL,
- `uid` int(10) unsigned NOT NULL DEFAULT 0,
- `amount` int(10) unsigned NOT NULL,
- `amount_fee` int(10) unsigned NOT NULL,
- `subject` varchar(255) NOT NULL,
- `description` varchar(255) DEFAULT NULL,
- `expire_time` int(10) unsigned NOT NULL,
- `status` tinyint(1) NOT NULL,
- `return_url` varchar(255) DEFAULT NULL,
- `data` text DEFAULT NULL,
- `clientip` varchar(255) NOT NULL DEFAULT '',
- `remoteport` smallint(6) unsigned NOT NULL DEFAULT 0,
- `dateline` int(10) unsigned NOT NULL,
- `trade_no` varchar(255) DEFAULT NULL,
- `channel` varchar(255) DEFAULT NULL,
- `payment_time` int(10) unsigned DEFAULT NULL,
- `callback_status` tinyint(1) DEFAULT 0,
- PRIMARY KEY (`id`),
- UNIQUE KEY (`out_biz_no`),
- KEY (`uid`),
- KEY (`type`),
- KEY (`status`)
- ) ENGINE=InnoDB;
- DROP TABLE IF EXISTS pre_common_payment_refund;
- CREATE TABLE pre_common_payment_refund (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `order_id` int(10) unsigned NOT NULL,
- `out_biz_no` varchar(64) NOT NULL,
- `amount` int(10) unsigned NOT NULL,
- `description` varchar(255) NOT NULL,
- `status` tinyint(1) NOT NULL,
- `error` varchar(255) DEFAULT NULL,
- `refund_time` int(10) DEFAULT NULL,
- `clientip` varchar(255) NOT NULL DEFAULT '',
- `remoteport` smallint(6) unsigned NOT NULL DEFAULT 0,
- `dateline` int(10) NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY (`out_biz_no`),
- INDEX (`order_id`)
- ) ENGINE=InnoDB;
- DROP TABLE IF EXISTS pre_common_payment_transfer;
- CREATE TABLE pre_common_payment_transfer (
- `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
- `uid` int(10) unsigned NOT NULL,
- `out_biz_no` varchar(64) NOT NULL,
- `amount` int(10) unsigned NOT NULL,
- `subject` varchar(255) NOT NULL,
- `description` varchar(255) DEFAULT NULL,
- `realname` varchar(255) NOT NULL,
- `account` varchar(255) NOT NULL,
- `channel` varchar(255) DEFAULT NULL,
- `status` tinyint(1) unsigned NOT NULL,
- `error` varchar(255) DEFAULT NULL,
- `trade_no` varchar(255) DEFAULT NULL,
- `trade_time` int(10) unsigned DEFAULT NULL,
- `clientip` varchar(255) NOT NULL DEFAULT '',
- `remoteport` smallint(6) unsigned NOT NULL DEFAULT 0,
- `dateline` int(10) unsigned NOT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY (`out_biz_no`),
- KEY (`uid`),
- KEY (`status`)
- ) ENGINE=InnoDB;
- EOF;
- runquery($sql);
复制代码
### 6. 其他注意事项
- **支付回调处理**:确保支付回调接口能够正确处理支付结果,并更新 `pre_common_payment_order` 表中的 `status` 和 `callback_status` 字段。
- **支付渠道配置**:在后台配置中,确保正确配置了QQ钱包支付等支付渠道的相关参数。
通过以上SQL语句和优化建议,你可以顺利地在Discuz! X3.5中新增购买邀请码业务并接入新的支付系统。如果有其他问题,欢迎继续咨询。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |