# 支付环境隔离解决方案

## 🎯 问题描述

**现状问题**：
- 开发调试时需要修改支付回调地址为本地地址
- 修改后影响线上生产环境的正常使用
- 缺乏开发和生产环境的有效隔离机制

## 💡 解决方案概览

我为您提供了5种解决方案，可以单独使用或组合使用：

### 方案一：创建开发专用租户（推荐）✨
- 创建独立的开发租户（ID: 9999）
- 配置专用的支付参数和回调地址
- 完全隔离开发和生产环境

### 方案二：环境感知的支付配置服务
- 根据 `spring.profiles.active` 自动切换回调地址
- 开发环境自动使用本地回调，生产环境使用线上回调
- 无需手动修改配置

### 方案三：配置文件环境隔离
- 在配置文件中定义不同环境的回调地址
- 支持灵活的环境配置管理

### 方案四：开发环境管理工具
- 提供专用的开发环境管理接口
- 支持一键切换和恢复回调地址
- 仅在开发环境启用

### 方案五：多租户配置隔离
- 利用现有的多租户架构
- 为不同租户配置不同的支付参数

## 🚀 快速实施指南

### 步骤1：执行数据库脚本（推荐）

```bash
# 创建开发专用租户和配置
mysql -u root -p your_database < src/main/resources/sql/create_dev_tenant_payment.sql
```

这将创建：
- 开发专用租户（ID: 9999）
- 开发环境支付配置（使用本地回调地址）
- 开发测试用户

### 步骤2：配置环境感知服务

已创建的服务会自动：
- 检测当前运行环境
- 根据环境自动调整回调地址
- 开发环境：`http://frps-10550.s209.websoft.top/api/shop/shop-order/notify`
- 生产环境：`https://cms-api.websoft.top/api/shop/shop-order/notify`

### 步骤3：使用开发环境管理工具

开发环境下可以访问以下接口：

```bash
# 查看环境信息
GET /api/dev/environment/info

# 查看支付配置
GET /api/dev/payment/config/0

# 切换回调地址
POST /api/dev/payment/switch-notify-url
{
  "notifyUrl": "http://your-local-address/api/shop/shop-order/notify",
  "payType": "0"
}

# 重置为生产环境
POST /api/dev/payment/reset-to-prod?payType=0

# 获取使用指南
GET /api/dev/guide
```

## 📋 使用方式对比

| 方案 | 优点 | 缺点 | 适用场景 |
|------|------|------|----------|
| 开发专用租户 | 完全隔离，不影响生产 | 需要创建额外数据 | 团队开发，长期使用 |
| 环境感知服务 | 自动切换，无需手动操作 | 需要代码改动 | 自动化程度高的项目 |
| 配置文件隔离 | 配置灵活，易于管理 | 需要重启应用 | 配置驱动的项目 |
| 开发管理工具 | 操作简单，功能丰富 | 仅开发环境可用 | 频繁调试的场景 |
| 多租户隔离 | 利用现有架构 | 依赖租户体系 | 已有多租户的系统 |

## 🔧 配置示例

### 开发环境配置 (application-dev.yml)
```yaml
payment:
  dev:
    notify-url: "http://frps-10550.s209.websoft.top/api/shop/shop-order/notify"
    environment-aware: true
```

### 生产环境配置 (application-prod.yml)
```yaml
payment:
  prod:
    notify-url: "https://cms-api.websoft.top/api/shop/shop-order/notify"
    environment-aware: false
```

## 🧪 测试验证

### 1. 验证环境感知功能
```bash
# 检查当前环境
curl -X GET "http://localhost:9200/api/dev/environment/info"

# 检查支付配置
curl -X GET "http://localhost:9200/api/dev/payment/config/0"
```

### 2. 验证回调地址切换
```bash
# 切换到本地回调
curl -X POST "http://localhost:9200/api/dev/payment/switch-notify-url" \
  -H "Content-Type: application/json" \
  -d '{"notifyUrl":"http://localhost:8080/api/shop/shop-order/notify","payType":"0"}'

# 重置为生产回调
curl -X POST "http://localhost:9200/api/dev/payment/reset-to-prod?payType=0"
```

## 🎨 最佳实践建议

### 推荐组合方案

**方案A：完全隔离（推荐）**
1. 创建开发专用租户
2. 配置开发环境支付参数
3. 使用开发租户进行所有测试

**方案B：自动化切换**
1. 部署环境感知服务
2. 配置环境相关参数
3. 代码自动根据环境切换

**方案C：手动管理**
1. 使用开发环境管理工具
2. 调试时切换回调地址
3. 完成后恢复生产配置

### 开发流程建议

1. **开发阶段**：使用开发租户或本地回调地址
2. **测试阶段**：使用测试环境配置
3. **上线前**：确认生产环境配置正确
4. **上线后**：验证生产环境支付功能

## 🚨 注意事项

### 安全考虑
- 开发环境管理接口仅在开发环境启用
- 生产环境不会加载开发相关的控制器
- 敏感配置信息需要妥善保护

### 数据一致性
- 开发租户数据与生产数据隔离
- 定期清理开发环境测试数据
- 避免开发数据污染生产环境

### 团队协作
- 统一开发环境配置标准
- 文档化配置变更流程
- 建立配置变更审核机制

## 🔄 回滚方案

如果需要回滚到原有方式：

```sql
-- 删除开发租户（可选）
DELETE FROM sys_tenant WHERE tenant_id = 9999;
DELETE FROM sys_payment WHERE tenant_id = 9999;
DELETE FROM sys_user WHERE tenant_id = 9999;

-- 恢复原有支付配置
UPDATE sys_payment 
SET notify_url = 'https://cms-api.websoft.top/api/shop/shop-order/notify' 
WHERE tenant_id = 1;
```

## ✅ 实施检查清单

- [ ] 执行了数据库脚本创建开发租户
- [ ] 配置了环境感知服务
- [ ] 测试了开发环境管理接口
- [ ] 验证了自动环境切换功能
- [ ] 确认了生产环境配置正确
- [ ] 建立了开发流程规范
- [ ] 培训了团队成员使用方法

## 📞 技术支持

如果在实施过程中遇到问题：

1. 检查日志中的环境检测信息
2. 验证配置文件中的环境参数
3. 确认数据库中的租户和支付配置
4. 测试开发环境管理接口功能

实施完成后，您就可以在不影响生产环境的情况下进行支付功能的开发和调试了！
