| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- <?php
- namespace ThirdParty\Urs\Webhook;
- use App\Module\ThirdParty\Models\ThirdPartyService as ServiceModel;
- use App\Module\UrsPromotion\Services\UrsUserMappingService;
- use App\Module\User\Models\UserInfo;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\DB;
- use Illuminate\Support\Facades\Log;
- /**
- * URS注册农场用户Webhook处理器
- *
- * 专门处理URS用户注册农场用户的Webhook通知
- */
- class UrsRegisterFarmUserWebhook extends WebhookReceiver
- {
- /**
- * 构造函数
- *
- * @param string $serviceCode 服务代码
- * @param Request $request 请求对象
- * @param ServiceModel $service 服务配置对象
- */
- public function __construct(string $serviceCode, Request $request, ServiceModel $service)
- {
- parent::__construct($serviceCode, $request, $service);
- }
- /**
- * 处理注册农场用户通知
- *
- * @param string $action 操作类型(固定为register_farm_user)
- * @param Request $request 请求对象
- * @return array
- * @throws \Exception
- */
- protected function handler(string $action, Request $request): array
- {
- // 验证操作类型
- if ($action !== 'register_farm_user') {
- throw new \Exception("此处理器只能处理register_farm_user操作,当前操作: {$action}");
- }
- // 验证必需字段
- $this->validateRegisterRequest($request);
- // 处理注册农场用户通知
- return $this->processRegisterFarmUser(
- $request->get('user_id'),
- $request->get('user_key'),
- $request->get('nickname')
- );
- }
- /**
- * 验证注册请求
- *
- * @param Request $request 请求对象
- * @throws \Exception
- */
- protected function validateRegisterRequest(Request $request): void
- {
- $requiredFields = ['user_id', 'user_key'];
- foreach ($requiredFields as $field) {
- if (!$request->has($field)) {
- throw new \Exception("缺少必需字段: {$field}");
- }
- }
- // 验证用户ID
- $userId = $request->input('user_id');
- if (!is_numeric($userId) || $userId <= 0) {
- throw new \Exception('用户ID格式无效');
- }
- // 验证用户密钥
- $userKey = $request->input('user_key');
- if (empty($userKey)) {
- throw new \Exception('用户密钥不能为空');
- }
- // 验证用户昵称
- $nickname = $request->input('nickname');
- if (empty($nickname)) {
- throw new \Exception('用户昵称不能为空');
- }
- }
- /**
- * 处理注册农场用户
- *
- * @param int $ursUserId URS用户ID
- * @param string $userKey 用户密钥
- * @return array
- */
- protected function processRegisterFarmUser($ursUserId, $userKey,$nickname): array
- {
- // 记录处理日志
- Log::info("URS注册农场用户处理开始", [
- 'urs_user_id' => $ursUserId,
- 'user_key_length' => strlen($userKey),
- 'request_id' => $this->getRequestId(),
- ]);
- try {
- // 使用UrsUserMappingService的公共逻辑获取或创建农场用户ID
- $farmUserId = UrsUserMappingService::getFarmUserIdByUserKeyWithAutoCreate($userKey, $ursUserId);
- if (!$farmUserId) {
- Log::error("URS注册农场用户失败:无法获取或创建农场用户ID", [
- 'urs_user_id' => $ursUserId,
- 'user_key_length' => strlen($userKey),
- ]);
- throw new \Exception("无法获取或创建农场用户ID");
- }
- // 记录成功日志
- Log::info("URS注册农场用户成功", [
- 'urs_user_id' => $ursUserId,
- 'farm_user_id' => $farmUserId,
- 'user_key_length' => strlen($userKey),
- ]);
- // 登陆一次
- $logininfo = \App\Module\AppGame\Handler\Public\Login4uHandler::completeUrsLogin($ursUserId,$farmUserId,$userKey);
- // 设置昵称和头像(随机1-8),逻辑参考 app/Module/AppGame/Handler/User/EditinfoHandler.php
- $this->setUserNicknameAndAvatar($farmUserId, $nickname);
- // 返回成功响应
- return [
- 'farm_user_id' => $farmUserId,
- 'logininfo'=>$logininfo['userDto'],
- 'status' => 'success'
- ];
- } catch (\Exception $e) {
- // 记录异常日志
- Log::error("URS注册农场用户处理异常", [
- 'urs_user_id' => $ursUserId,
- 'user_key_length' => strlen($userKey),
- 'error' => $e->getMessage(),
- 'trace' => $e->getTraceAsString(),
- ]);
- // 重新抛出异常,让上层处理
- throw $e;
- }
- }
- /**
- * 设置用户昵称和头像
- *
- * @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;
- }
- }
- }
|