162956-修复URS Request类继承和配置获取问题.md 5.1 KB

修复URS Request类继承和配置获取问题

任务时间: 2025年06月16日 10:29 - 10:30
任务类型: Bug修复
模块: ThirdParty/Urs

任务概述

修复UrsGetUserLevelCountRequest和UrsGetUserTeamRequest两个Request类的继承和配置获取问题,使其与UrsGetUserInfoRequest保持一致的实现方式。

问题分析

发现的问题

  1. 错误的继承关系: 两个Request类错误地继承了App\Module\ThirdParty\Services\BaseRequest,应该继承ThirdParty\Urs\Request\BaseRequest
  2. 错误的配置获取方式: 使用了getConfig()方法获取配置,应该使用getUrsCredential()getService()方法
  3. 不必要的构造函数: 重复定义了构造函数,应该使用基类的构造函数
  4. 配置字段不一致: 使用了错误的配置字段名称

参考标准

参考UrsGetUserInfoRequest.php的正确实现方式:

  • 继承ThirdParty\Urs\Request\BaseRequest
  • 使用getUrsCredential()获取认证凭证
  • 使用getService()->base_url获取API地址
  • 使用$c->getApiKey()$c->getEcologyId()获取配置

修复内容

1. UrsGetUserLevelCountRequest.php

修复前问题:

use App\Module\ThirdParty\Services\BaseRequest; // 错误的继承
class UrsGetUserLevelCountRequest extends BaseRequest
{
    public function __construct() // 不必要的构造函数
    {
        parent::__construct('urs');
    }
    
    // 错误的配置获取方式
    $config = $this->getConfig();
    $apiUrl = $config['api_url'] ?? '';
    $appKey = $config['app_key'] ?? '';
    $ecologyId = $config['ecology_id'] ?? 1;
}

修复后:

use ThirdParty\Urs\Util\CryptoService; // 只需要导入CryptoService
class UrsGetUserLevelCountRequest extends BaseRequest // 正确继承
{
    // 移除构造函数,使用基类构造函数
    
    // 正确的配置获取方式
    $c = $this->getUrsCredential();
    $apiUrl = $this->getService()->base_url;
    $appKey = $c->getApiKey();
    $ecologyId = $c->getEcologyId();
}

2. UrsGetUserTeamRequest.php

修复内容: 与UrsGetUserLevelCountRequest相同的修复方式

  • 移除错误的import和构造函数
  • 修复配置获取方式
  • 统一使用标准的URS配置获取方法

修复结果

代码变更统计

  • 修改文件: 2个
  • 删除行数: 28行(移除重复代码和错误实现)
  • 新增行数: 14行(简化后的正确实现)

修复效果

  1. 统一继承关系: 所有URS Request类现在都正确继承ThirdParty\Urs\Request\BaseRequest
  2. 统一配置获取: 所有类都使用相同的配置获取方式,确保一致性
  3. 代码简化: 移除重复的构造函数和错误的配置处理逻辑
  4. 提高可维护性: 统一的实现方式便于后续维护和扩展

技术要点

URS Request类标准实现模式

<?php
namespace ThirdParty\Urs\Request;

use ThirdParty\Urs\Util\CryptoService;

class UrsXxxRequest extends BaseRequest
{
    protected function handler(array $params = []): array
    {
        // 1. 参数验证
        if (empty($params['requiredParam'])) {
            throw new \Exception('参数验证错误');
        }

        // 2. 获取配置(标准方式)
        $c = $this->getUrsCredential();
        $apiUrl = $this->getService()->base_url;
        $appKey = $c->getApiKey();
        $ecologyId = $c->getEcologyId();

        // 3. 构建请求数据
        $requestData = [
            'param' => $params['param']
        ];

        // 4. 加密和发送请求
        $cryptoService = new CryptoService($appKey);
        $encryptedData = $cryptoService->encrypt($requestData);
        $fullUrl = rtrim($apiUrl, '/') . "/api/ecology/{$ecologyId}/endpoint";
        $response = $this->sendHttpRequest($fullUrl, $encryptedData);

        // 5. 解密和返回结果
        if (isset($response['data'], $response['iv'], $response['timestamp'], $response['sign'])) {
            $decryptedResponse = $cryptoService->decrypt($response);
            return [
                'success' => true,
                'message' => '操作成功',
                'data' => $decryptedResponse,
            ];
        }

        return [
            'success' => false,
            'message' => '响应格式错误',
            'data' => $response,
        ];
    }
}

验证和测试

建议测试步骤

  1. 单元测试: 验证两个Request类能正确实例化和调用
  2. 配置测试: 确认能正确获取URS配置信息
  3. 集成测试: 测试与URS服务的实际通信
  4. 一致性测试: 确保三个Request类的行为一致

潜在风险

  • 配置兼容性: 需要确保thirdparty_services表中的URS配置格式正确
  • 凭证有效性: 需要验证URS认证凭证的有效性

总结

本次修复解决了URS模块中Request类的架构不一致问题,通过统一继承关系和配置获取方式,提高了代码的一致性和可维护性。修复后的代码更加简洁,遵循了ThirdParty模块的设计规范。

提交信息: 修复URS Request类继承和配置获取问题
Git Hash: d840dd10