# 实现URS注册用户设置昵称和头像功能 **任务时间**: 2025年07月04日 14:26 **任务类型**: 功能实现 **模块**: ThirdParty/Urs/Webhook ## 任务描述 在 `UrsRegisterFarmUserWebhook.php` 中实现为新注册的农场用户设置昵称和随机头像(1-8)的功能。 ## 需求分析 - 在URS用户注册农场用户的webhook处理中,为新创建的农场用户设置昵称和头像 - 昵称:使用传入的 `nickname` 参数 - 头像:随机生成1-8范围内的头像ID - 参考逻辑:`app/Module/AppGame/Handler/User/EditinfoHandler.php` ## 实现方案 ### 1. 添加必要的导入和依赖 **文件**: `ThirdParty/Urs/Webhook/UrsRegisterFarmUserWebhook.php` **添加导入**: ```php use App\Module\User\Models\UserInfo; use Illuminate\Support\Facades\DB; ``` ### 2. 调用设置用户信息的方法 在 `processRegisterFarmUser` 方法中,在登录完成后添加设置昵称和头像的调用: ```php // 登陆一次 $logininfo = \App\Module\AppGame\Handler\Public\Login4uHandler::completeUrsLogin($ursUserId,$farmUserId,$userKey); // 设置昵称和头像(随机1-8),逻辑参考 app/Module/AppGame/Handler/User/EditinfoHandler.php $this->setUserNicknameAndAvatar($farmUserId, $nickname); ``` ### 3. 实现设置用户信息的方法 **新增方法**: `setUserNicknameAndAvatar` ```php /** * 设置用户昵称和头像 * * @param int $farmUserId 农场用户ID * @param string $nickname 昵称 * @throws \Exception */ protected function setUserNicknameAndAvatar(int $farmUserId, string $nickname): void { try { // 开始事务 DB::beginTransaction(); // 获取用户信息 $userInfo = UserInfo::where('user_id', $farmUserId)->first(); if (!$userInfo) { // 如果用户信息不存在,创建一个新的 $userInfo = new UserInfo(); $userInfo->user_id = $farmUserId; } // 设置昵称 $userInfo->nickname = $nickname; // 生成随机头像(1-8) $randomAvatar = (string) rand(1, 8); $userInfo->avatar = $randomAvatar; // 保存用户信息 $userInfo->save(); // 提交事务 DB::commit(); // 记录成功日志 Log::info("URS用户设置昵称和头像成功", [ 'farm_user_id' => $farmUserId, 'nickname' => $nickname, 'avatar' => $randomAvatar, ]); } catch (\Exception $e) { // 回滚事务 DB::rollBack(); // 记录错误日志 Log::error("URS用户设置昵称和头像失败", [ 'farm_user_id' => $farmUserId, 'nickname' => $nickname, 'error' => $e->getMessage(), 'trace' => $e->getTraceAsString(), ]); // 重新抛出异常 throw $e; } } ``` ## 功能特点 1. **事务安全**: 使用数据库事务确保数据一致性 2. **错误处理**: 完善的异常处理和日志记录 3. **随机头像**: 生成1-8范围内的随机头像ID 4. **兼容性**: 支持创建新用户信息或更新已存在的用户信息 5. **日志记录**: 详细的成功和失败日志记录 ## 测试验证 创建了测试命令 `app/Module/Test/Commands/TestUrsWebhookCommand.php` 来验证功能: ```bash php artisan test:urs-webhook --user-id=12345 --nickname="测试昵称" ``` **测试结果**: - ✅ 昵称设置正确 - ✅ 头像ID在正确范围内 (1-8) - ✅ 随机性验证通过(多次测试生成不同头像ID:2, 4, 8) - ✅ 事务处理正常 - ✅ 日志记录完整 ## 代码质量 - 语法检查通过:`php -l ThirdParty/Urs/Webhook/UrsRegisterFarmUserWebhook.php` - 遵循项目编码规范 - 添加了完整的中文注释 - 实现了适当的错误处理和日志记录 ## 总结 成功实现了URS注册用户设置昵称和头像的功能,功能完整、稳定,已通过测试验证。该功能将在URS用户注册农场用户时自动为其设置传入的昵称和随机生成的头像(1-8)。