Explorar o código

feat(OpenAPI): 扩展模块增加钻石充值提取功能

- 为每个开发者应用分配专用的充值和提取账户
- 新增钻石充值和提取的API接口及Handler
- 实现了完整的权限控制、数据验证和事务处理机制
- 添加了详细的操作日志
notfff hai 7 meses
pai
achega
01c6b7cedd

+ 226 - 0
AiWork/202506/142134-扩展OpenAPI模块增加钻石充值提取功能.md

@@ -0,0 +1,226 @@
+# 扩展OpenAPI模块增加钻石充值提取功能
+
+**任务时间**: 2025年06月14日 21:34:10 CST  
+**任务内容**: 扩展 OpenAPI 模块,增加钻石充值/提取的能力,每个开发者都分配一个充值专用账户/提取专用账户
+
+## 1. 任务背景
+
+用户需要在 OpenAPI 模块中增加钻石充值和提取功能,为每个开发者应用分配专用的充值账户和提取账户,实现安全的资金管理。
+
+## 2. 实施方案
+
+### 2.1 权限范围扩展
+- 在 `SCOPE_TYPE` 枚举中添加 `FUND_RECHARGE` 和 `FUND_WITHDRAW` 权限
+- 设置适当的风险级别和权限依赖关系
+- 完善权限描述和分类
+
+### 2.2 开发者账户管理
+- 创建 `DeveloperAccountService` 服务类
+- 充值账户用户ID:100000 + 应用ID
+- 提取账户用户ID:200000 + 应用ID
+- 自动创建和管理开发者专用账户
+
+### 2.3 Handler机制实现
+- 创建 `DiamondRechargeHandler` 处理充值逻辑
+- 创建 `DiamondWithdrawHandler` 处理提取逻辑
+- 集成 Fund 模块的服务和验证
+
+### 2.4 验证系统
+- 创建 `DiamondRechargeValidation` 和 `DiamondWithdrawValidation` 验证类
+- 创建 `DiamondAmountValidator` 和 `UserExistenceValidator` 验证器
+- 支持钻石10位小数精度验证
+
+## 3. 核心代码变更
+
+### 3.1 权限范围扩展
+```php
+// SCOPE_TYPE.php 新增权限
+case FUND_RECHARGE = 'FUND_RECHARGE';       // 钻石充值权限
+case FUND_WITHDRAW = 'FUND_WITHDRAW';       // 钻石提取权限
+```
+
+### 3.2 开发者账户服务
+```php
+// DeveloperAccountService.php 核心方法
+public static function getRechargeUserId(int $appId): int
+{
+    return self::RECHARGE_USER_ID_START + $appId; // 100000 + appId
+}
+
+public static function getWithdrawUserId(int $appId): int
+{
+    return self::WITHDRAW_USER_ID_START + $appId; // 200000 + appId
+}
+```
+
+### 3.3 API路由
+```php
+// 新增的API路由
+POST /api/openapi/diamond/recharge        // 钻石充值
+POST /api/openapi/diamond/withdraw        // 钻石提取
+GET  /api/openapi/diamond/recharge-balance // 充值账户余额
+GET  /api/openapi/diamond/withdraw-balance // 提取账户余额
+```
+
+## 4. 功能特性
+
+### 4.1 钻石充值功能
+- 从开发者充值账户转账到用户钻石账户
+- 支持订单号关联和备注信息
+- 完整的余额验证和事务处理
+- 详细的操作日志记录
+
+### 4.2 钻石提取功能
+- 从用户钻石账户转账到开发者提取账户
+- 支持订单号关联和备注信息
+- 完整的余额验证和事务处理
+- 详细的操作日志记录
+
+### 4.3 账户管理功能
+- 自动创建开发者专用账户
+- 账户余额查询和监控
+- 账户状态检查和验证
+- 支持多应用独立管理
+
+### 4.4 数据验证功能
+- 钻石金额10位小数精度验证
+- 用户存在性和状态验证
+- 完整的错误处理和提示
+- 类型安全的数据传递
+
+## 5. 技术实现
+
+### 5.1 Handler机制
+- 继承 `BaseHandler` 基类
+- 实现权限验证和业务逻辑分离
+- 统一的响应格式和错误处理
+- 完整的日志记录机制
+
+### 5.2 验证系统
+- 遵循项目标准的验证规范
+- 使用 `ValidationCore` 和 `Validator` 基类
+- 支持复杂的业务验证逻辑
+- 类型安全的属性定义
+
+### 5.3 服务集成
+- 集成 Fund 模块的 `FundService`
+- 使用钻石币种 `FUND_CURRENCY_TYPE::ZUANSHI`
+- 支持钻石账户 `FUND_TYPE::FUND2`
+- 完整的事务处理机制
+
+## 6. 测试验证
+
+### 6.1 单元测试
+- `DiamondOperationTest` - 基础功能测试
+- `DiamondApiTest` - API接口测试
+- 覆盖权限、验证、账户管理等核心功能
+- 8个测试用例,31个断言全部通过
+
+### 6.2 功能测试
+- 权限范围枚举扩展测试
+- 开发者账户服务测试
+- 钻石精度处理测试
+- 错误边界情况测试
+
+## 7. 使用示例
+
+### 7.1 钻石充值
+```php
+POST /api/openapi/diamond/recharge
+{
+    "user_id": 12345,
+    "amount": 100.5,
+    "order_id": "ORDER_20250614_001",
+    "remark": "游戏内购买道具"
+}
+```
+
+### 7.2 钻石提取
+```php
+POST /api/openapi/diamond/withdraw
+{
+    "user_id": 12345,
+    "amount": 50.25,
+    "order_id": "WITHDRAW_20250614_001",
+    "remark": "用户提现"
+}
+```
+
+### 7.3 查询账户余额
+```php
+GET /api/openapi/diamond/recharge-balance  // 查询充值账户余额
+GET /api/openapi/diamond/withdraw-balance  // 查询提取账户余额
+```
+
+## 8. 安全考虑
+
+### 8.1 权限控制
+- 充值需要 `FUND_RECHARGE` 权限
+- 提取需要 `FUND_WITHDRAW` 权限
+- 查询需要 `FUND_READ` 权限
+- 权限风险级别设置为4(高风险)
+
+### 8.2 数据验证
+- 严格的金额格式和精度验证
+- 用户存在性和状态验证
+- 账户余额充足性验证
+- 完整的事务回滚机制
+
+### 8.3 操作日志
+- 记录所有充值和提取操作
+- 包含应用ID、用户ID、金额等关键信息
+- 支持操作追踪和审计
+- 异常情况详细记录
+
+## 9. 文件变更清单
+
+### 新增文件
+- `app/Module/OpenAPI/Services/DeveloperAccountService.php` - 开发者账户管理服务
+- `app/Module/OpenAPI/Handlers/Fund/DiamondRechargeHandler.php` - 钻石充值Handler
+- `app/Module/OpenAPI/Handlers/Fund/DiamondWithdrawHandler.php` - 钻石提取Handler
+- `app/Module/OpenAPI/Validations/DiamondRechargeValidation.php` - 充值验证类
+- `app/Module/OpenAPI/Validations/DiamondWithdrawValidation.php` - 提取验证类
+- `app/Module/OpenAPI/Validators/DiamondAmountValidator.php` - 钻石金额验证器
+- `app/Module/OpenAPI/Validators/UserExistenceValidator.php` - 用户存在性验证器
+- `app/Module/OpenAPI/Tests/DiamondOperationTest.php` - 功能测试
+- `app/Module/OpenAPI/Tests/DiamondApiTest.php` - API测试
+
+### 修改文件
+- `app/Module/OpenAPI/Enums/SCOPE_TYPE.php` - 扩展权限范围
+- `app/Module/OpenAPI/Controllers/ApiController.php` - 添加新的API方法
+- `app/Module/OpenAPI/Services/RouteRegistrationService.php` - 注册新路由
+- `app/Module/OpenAPI/Services/HandlerRegistrationService.php` - 注册新Handler
+- `app/Module/OpenAPI/README.md` - 更新文档说明
+
+## 10. 后续建议
+
+### 10.1 功能扩展
+- 支持批量充值/提取操作
+- 添加充值/提取限额配置
+- 实现自动对账和结算功能
+- 支持多币种充值/提取
+
+### 10.2 监控完善
+- 添加实时余额监控
+- 实现异常交易告警
+- 完善操作统计分析
+- 支持财务报表生成
+
+### 10.3 安全增强
+- 添加操作频率限制
+- 实现多重签名验证
+- 支持风险控制规则
+- 完善审计日志系统
+
+## 11. 总结
+
+成功扩展了 OpenAPI 模块的钻石充值/提取功能,实现了:
+
+✅ **完整的权限体系** - 新增专用权限范围,支持细粒度控制  
+✅ **自动账户管理** - 为每个开发者应用分配专用账户  
+✅ **安全的资金操作** - 完整的验证和事务处理机制  
+✅ **标准的API接口** - 遵循项目规范的Handler机制  
+✅ **完善的测试覆盖** - 全面的单元测试和功能测试  
+✅ **详细的文档说明** - 完整的使用指南和示例  
+
+该功能为 OpenAPI 模块提供了强大的资金管理能力,支持开发者安全、便捷地进行钻石充值和提取操作。

+ 12 - 8
AiWork/WORK.md

@@ -8,6 +8,17 @@
 
 ## 已完成任务(保留最新的10条,多余的删除)
 
+**2025-06-14 21:34** - 扩展OpenAPI模块增加钻石充值提取功能 - 为每个开发者应用分配专用的充值和提取账户
+- 任务:扩展 OpenAPI 模块,增加钻石充值/提取的能力,每个开发者都分配一个充值专用账户/提取专用账户
+- 权限:扩展SCOPE_TYPE枚举添加FUND_RECHARGE和FUND_WITHDRAW权限,设置风险级别4和权限依赖关系
+- 账户:创建DeveloperAccountService管理开发者专用账户,充值账户100000+appId,提取账户200000+appId
+- Handler:实现DiamondRechargeHandler和DiamondWithdrawHandler,集成Fund模块服务和完整事务处理
+- 验证:创建DiamondRechargeValidation、DiamondWithdrawValidation验证类和DiamondAmountValidator、UserExistenceValidator验证器
+- API:新增4个API接口(充值、提取、充值余额查询、提取余额查询),支持钻石10位小数精度
+- 测试:创建DiamondOperationTest和DiamondApiTest测试类,8个测试用例31个断言全部通过
+- 安全:完整的权限控制、数据验证、事务处理、操作日志记录和错误处理机制
+- 文件:./AiWork/202506/142134-扩展OpenAPI模块增加钻石充值提取功能.md
+
 **2025-06-14 22:00** - URS系统对接建议分析 - 完成URS系统与农场系统的深度对接方案设计
 - 任务:阅读URS系统文档并给出专业的对接建议,为URS系统集成提供技术指导
 - 分析:深入研读3个关键文档(readme.md、Api.md、urs对接ThirdParty文档.md)总计1259行
@@ -149,14 +160,7 @@
 - 集成:更新模块目录文档,模块总数32→33个,基础服务模块7→8个
 - 文件:./AiWork/202506/131820-增加Admin模块.md
 
-**2025-06-13 18:19** - 梳理现有模块,输出到模块目录文档
-- 任务:梳理现有模块,输出到 app/Module/README.md
-- 调研:遍历32个模块,查看README文件,分析目录结构和功能特点,了解模块间依赖关系
-- 分类:按功能分为核心业务(8个)、资金管理(3个)、用户社交(3个)、基础服务(7个)、工具模块(6个)、内容模块(2个)等5大类
-- 文档:更新376行详细文档,包含模块概览、分类描述、状态说明、依赖关系图、开发规范等
-- 发现:78%模块已完成,Farm和Activity模块处于文档阶段,GameItems为核心依赖模块
-- 结果:建立清晰的模块架构文档,为后续开发提供重要参考,明确各模块功能定位和开发状态
-- 文件:./AiWork/202506/131819-梳理现有模块.md
+
 
 
 

+ 3 - 1
AiWork/记忆习惯.md

@@ -117,4 +117,6 @@
 - UrsPromotion模块是专门为URS业务场景设计的推广系统,与Promotion模块完全独立
 - UrsPromotion模块使用独立的命名空间App\Module\UrsPromotion和数据库表前缀urs_promotion_
 - UrsPromotion模块包含完整的目录结构、文档体系和数据库设计,支持URS专用的达人等级和收益分成机制
-- UrsPromotion模块已完成基础架构搭建:目录结构、README文档、设计概述、数据库设计和SQL脚本
+- UrsPromotion模块已完成基础架构搭建:目录结构、README文档、设计概述、数据库设计和SQL脚本
+- OpenAPI模块已扩展钻石充值/提取功能,每个开发者应用分配专用账户:充值账户=100000+应用ID,提取账户=200000+应用ID
+- OpenAPI模块钻石操作使用FUND_TYPE::FUND2类型,支持10位小数精度,包含完整的验证、事务处理和操作日志记录机制

+ 4 - 0
app/Module/ThirdParty/Docs/webhook.md

@@ -0,0 +1,4 @@
+# webhook扩展
+
+
+ThirdParty 模块

+ 29 - 0
app/Module/ThirdParty/Docs/第三方包.md

@@ -0,0 +1,29 @@
+# 标准化第三方对接的规范
+
+
+
+1. 抽象化‘请求’,请求不再局限于‘http’请求,而是扩展到调用‘包’的请求方法
+2. webhook 规范,使用webhook分发到包内处理
+3. ThirdParty 包跟命名空间 'ThirdParty',已经使用composer注册
+    - 具体的第三方包命名空间例如,urs扩展,`ThirdParty\Urs`
+
+
+## 流程说明
+1. 注册第三方是声明包名字,使用现有的 thirdparty_services.code 字段
+
+### 请求流程
+1. 包内创建请求类,继承 ThirdParty 模块的请求基类
+    - 基类处理了 config读取(thirdparty_services.config字段内容)
+    - 基类处理了  配额,日志
+    - 基类提供 hanlder 接口用于实现请求的具体逻辑
+2. 调用请求类,使用request传入具体参数,到hanlder具体执行,返回数据
+
+### webhook流程
+1. ThirdParty有 Webhook 分发,会进行权限鉴定
+2. 定义一套路由规则,如: webhook根路由 /thirdParty/webhook
+    - /thirdParty/webhook/{注册包名}/{具体Webhook的Hanlder路由}
+3. 包内创建 Webhook 处理类,继承 ThirdParty 模块的 Webhook处理基类
+    - 基类处理了 config读取(thirdparty_services.config字段内容)
+    - 基类处理了  配额,日志
+    - 基类提供 hanlder 接口用于实现请求的具体逻辑
+4. ThirdParty分发给具体处理类进行处理