# 支付环境隔离解决方案 ## 🎯 问题描述 **现状问题**: - 开发调试时需要修改支付回调地址为本地地址 - 修改后影响线上生产环境的正常使用 - 缺乏开发和生产环境的有效隔离机制 ## 💡 解决方案概览 我为您提供了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. 测试开发环境管理接口功能 实施完成后,您就可以在不影响生产环境的情况下进行支付功能的开发和调试了!