docs(guide): 添加PayPal配置检查和客户订单表创建说明
- 创建PAYPAL_CONFIG_CHECK.md文档,提供PayPal配置错误的解决方案 - 添加mt-pay/database/README_CUSTOMER_ORDER.md文档,说明客户订单表创建方法 - 提供详细的数据库表结构和SQL脚本执行指南 - 包含配置文件格式要求和调试方法说明
This commit is contained in:
68
PAYPAL_CONFIG_CHECK.md
Normal file
68
PAYPAL_CONFIG_CHECK.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# PayPal配置检查指南
|
||||
|
||||
## 错误信息
|
||||
```
|
||||
Username must not be null
|
||||
```
|
||||
|
||||
这个错误表示PayPal的`clientId`(Client ID)配置为空。
|
||||
|
||||
## 问题原因
|
||||
|
||||
Spring Boot的`@ConfigurationProperties`在绑定配置时,需要确保:
|
||||
1. 配置文件中的属性名格式正确
|
||||
2. 配置类能够正确加载
|
||||
3. 配置文件被正确读取
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 1. 检查配置文件
|
||||
|
||||
确保 `application-dev.yml` 中有以下配置:
|
||||
|
||||
```yaml
|
||||
paypal:
|
||||
client-id: AdGYUZpvLuHR30dybOApvM-RNB1pVKtd74SVfh-6TK52xV-1JEBddHVMCWuDdyyHri4DXd4kABBi7Icb
|
||||
client-secret: ENblspyRmwsOU_PWFurlhEYUF5Da6aYKl0pjK4ehm7p3R5aSqvbpaF_YsIIs8v0ty1c9WJu15XP-Fe_1
|
||||
mode: sandbox
|
||||
enabled: true
|
||||
```
|
||||
|
||||
### 2. 检查Spring Boot配置
|
||||
|
||||
确保主应用类或配置类启用了配置属性绑定。
|
||||
|
||||
### 3. 重启应用
|
||||
|
||||
修改配置后,**必须重启应用**才能生效。
|
||||
|
||||
### 4. 验证配置加载
|
||||
|
||||
启动应用后,检查日志中是否有PayPal配置相关的错误信息。
|
||||
|
||||
## 配置属性映射
|
||||
|
||||
Spring Boot会自动将以下格式进行映射:
|
||||
- `client-id` (kebab-case) → `clientId` (camelCase)
|
||||
- `client-secret` (kebab-case) → `clientSecret` (camelCase)
|
||||
|
||||
## 调试方法
|
||||
|
||||
如果配置仍然无法加载,可以:
|
||||
|
||||
1. **添加启动日志**:在`PayPalProperties`类中添加`@PostConstruct`方法打印配置值
|
||||
2. **检查环境变量**:确认使用的是`dev`环境(`spring.profiles.active=dev`)
|
||||
3. **检查配置文件位置**:确保`application-dev.yml`在`src/main/resources`目录下
|
||||
|
||||
## 临时解决方案
|
||||
|
||||
如果配置仍然无法加载,可以在代码中临时硬编码(仅用于测试):
|
||||
|
||||
```java
|
||||
// 仅用于测试,生产环境必须使用配置文件
|
||||
if (clientId == null) {
|
||||
clientId = "AdGYUZpvLuHR30dybOApvM-RNB1pVKtd74SVfh-6TK52xV-1JEBddHVMCWuDdyyHri4DXd4kABBi7Icb";
|
||||
clientSecret = "ENblspyRmwsOU_PWFurlhEYUF5Da6aYKl0pjK4ehm7p3R5aSqvbpaF_YsIIs8v0ty1c9WJu15XP-Fe_1";
|
||||
}
|
||||
```
|
||||
|
||||
1333
logs/mt-pay-error.2025-12-23.log
Normal file
1333
logs/mt-pay-error.2025-12-23.log
Normal file
File diff suppressed because it is too large
Load Diff
3655
logs/mt-pay.2025-12-23.log
Normal file
3655
logs/mt-pay.2025-12-23.log
Normal file
File diff suppressed because it is too large
Load Diff
111
mt-pay/database/README_CUSTOMER_ORDER.md
Normal file
111
mt-pay/database/README_CUSTOMER_ORDER.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# 客户订单表创建说明
|
||||
|
||||
## 问题
|
||||
如果遇到错误:`Table 'mtpay.customer_order' doesn't exist`
|
||||
|
||||
说明数据库中没有 `customer_order` 表,需要执行SQL脚本创建。
|
||||
|
||||
## 解决方案
|
||||
|
||||
### 方法1:使用MySQL客户端执行(推荐)
|
||||
|
||||
1. 连接到数据库:
|
||||
```bash
|
||||
mysql -h rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com -P 3306 -u mtkj2025 -p mtpay
|
||||
```
|
||||
|
||||
2. 执行SQL脚本:
|
||||
```sql
|
||||
source E:/MTKJPAY/mt-pay/database/customer_order_schema.sql
|
||||
```
|
||||
|
||||
或者直接复制SQL内容执行:
|
||||
```sql
|
||||
CREATE TABLE `customer_order` (
|
||||
`id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
||||
`order_no` VARCHAR(64) NOT NULL UNIQUE COMMENT '订单号(全局唯一)',
|
||||
`product_id` BIGINT NOT NULL COMMENT '商品ID',
|
||||
`product_name` VARCHAR(500) NOT NULL COMMENT '商品名称',
|
||||
`sku_id` BIGINT NOT NULL COMMENT 'SKU ID',
|
||||
`sku_name` VARCHAR(500) NOT NULL COMMENT 'SKU名称/描述',
|
||||
`quantity` INT NOT NULL COMMENT '购买数量',
|
||||
`unit_price` DECIMAL(10, 2) NOT NULL COMMENT '单价',
|
||||
`total_amount` DECIMAL(10, 2) NOT NULL COMMENT '订单总金额',
|
||||
`currency` VARCHAR(3) NOT NULL COMMENT '货币代码',
|
||||
`status` VARCHAR(20) NOT NULL DEFAULT 'PENDING' COMMENT '订单状态:PENDING-待支付,PAID-已支付,SHIPPED-已发货,COMPLETED-已完成,CANCELLED-已取消',
|
||||
|
||||
-- 客户信息
|
||||
`customer_name` VARCHAR(100) NOT NULL COMMENT '客户姓名',
|
||||
`customer_phone` VARCHAR(20) NOT NULL COMMENT '客户电话',
|
||||
`customer_email` VARCHAR(100) COMMENT '客户邮箱',
|
||||
|
||||
-- 收货地址
|
||||
`shipping_name` VARCHAR(100) NOT NULL COMMENT '收货人姓名',
|
||||
`shipping_phone` VARCHAR(20) NOT NULL COMMENT '收货人电话',
|
||||
`shipping_country` VARCHAR(50) NOT NULL COMMENT '收货国家',
|
||||
`shipping_state` VARCHAR(50) COMMENT '收货州/省',
|
||||
`shipping_city` VARCHAR(50) NOT NULL COMMENT '收货城市',
|
||||
`shipping_street` VARCHAR(200) NOT NULL COMMENT '收货街道地址',
|
||||
`shipping_postcode` VARCHAR(20) COMMENT '收货邮编',
|
||||
|
||||
-- 支付信息
|
||||
`payment_order_id` BIGINT COMMENT '关联的支付订单ID',
|
||||
`payment_status` VARCHAR(20) DEFAULT 'UNPAID' COMMENT '支付状态:UNPAID-未支付,PAID-已支付,FAILED-支付失败',
|
||||
|
||||
-- 备注
|
||||
`remark` VARCHAR(500) COMMENT '订单备注',
|
||||
|
||||
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_order_no` (`order_no`),
|
||||
KEY `idx_product_id` (`product_id`),
|
||||
KEY `idx_status` (`status`),
|
||||
KEY `idx_create_time` (`create_time`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='客户订单表';
|
||||
```
|
||||
|
||||
### 方法2:使用数据库管理工具
|
||||
|
||||
使用Navicat、DBeaver、MySQL Workbench等工具:
|
||||
|
||||
1. 连接到数据库 `mtpay`
|
||||
2. 打开SQL编辑器
|
||||
3. 复制 `customer_order_schema.sql` 文件内容
|
||||
4. 执行SQL脚本
|
||||
|
||||
### 方法3:使用命令行(Windows PowerShell)
|
||||
|
||||
```powershell
|
||||
# 读取SQL文件内容
|
||||
$sql = Get-Content "E:\MTKJPAY\mt-pay\database\customer_order_schema.sql" -Raw
|
||||
|
||||
# 执行SQL(需要先安装mysql客户端)
|
||||
mysql -h rm-j6c3u06k2afwn8hxw6o.mysql.rds.aliyuncs.com -P 3306 -u mtkj2025 -p mtpay -e $sql
|
||||
```
|
||||
|
||||
## 验证
|
||||
|
||||
执行完成后,可以验证表是否创建成功:
|
||||
|
||||
```sql
|
||||
-- 查看表是否存在
|
||||
SHOW TABLES LIKE 'customer_order';
|
||||
|
||||
-- 查看表结构
|
||||
DESC customer_order;
|
||||
|
||||
-- 或者
|
||||
SHOW CREATE TABLE customer_order;
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 确保数据库连接信息正确
|
||||
2. 确保有创建表的权限
|
||||
3. 如果表已存在,可以先删除再创建:
|
||||
```sql
|
||||
DROP TABLE IF EXISTS `customer_order`;
|
||||
```
|
||||
然后重新执行创建脚本
|
||||
|
||||
Reference in New Issue
Block a user