|
|
@@ -54,111 +54,150 @@ class Login4uHandler extends BaseHandler
|
|
|
throw new \Exception('登录密钥不能为空');
|
|
|
}
|
|
|
|
|
|
- // 2. 使用URS获取用户信息
|
|
|
- Log::info('开始获取URS用户信息');
|
|
|
- $ursUserInfo = $this->getUrsUserInfo($keylogin);
|
|
|
- $ursUserId = $ursUserInfo['userId'];
|
|
|
+ // 2. 使用公共静态方法处理URS登录逻辑
|
|
|
+ $loginResult = self::processUrsLoginByUserKey($keylogin);
|
|
|
|
|
|
- Log::info('URS用户信息获取成功', [
|
|
|
- 'urs_user_id' => $ursUserId,
|
|
|
- 'user_info_keys' => array_keys($ursUserInfo)
|
|
|
- ]);
|
|
|
+ // 3. 创建响应对象
|
|
|
+ $response = new ResponsePublicLogin4u();
|
|
|
+ $response->setToken($loginResult['sessionId']);
|
|
|
|
|
|
- // 3. 获取或创建农场用户ID(同时保存userKey)
|
|
|
- Log::info('开始获取农场用户ID', [
|
|
|
- 'urs_user_id' => $ursUserId,
|
|
|
- 'user_key_length' => strlen($keylogin)
|
|
|
- ]);
|
|
|
- $farmUserId = UrsUserMappingService::getFarmUserIdByUserKeyWithAutoCreate($keylogin, $ursUserId);
|
|
|
- if (!$farmUserId) {
|
|
|
- Log::error('获取农场用户ID失败', [
|
|
|
- 'urs_user_id' => $ursUserId,
|
|
|
- 'farm_user_id' => $farmUserId,
|
|
|
- 'user_key_length' => strlen($keylogin)
|
|
|
- ]);
|
|
|
- throw new \Exception('获取农场用户ID失败');
|
|
|
- }
|
|
|
|
|
|
- Log::info('农场用户ID获取成功', [
|
|
|
- 'urs_user_id' => $ursUserId,
|
|
|
- 'farm_user_id' => $farmUserId
|
|
|
- ]);
|
|
|
|
|
|
- // 4. 获取农场用户信息
|
|
|
- Log::info('开始获取农场用户信息', ['farm_user_id' => $farmUserId]);
|
|
|
- $userDto = UserService::info($farmUserId);
|
|
|
- if (!$userDto) {
|
|
|
- Log::error('农场用户不存在', [
|
|
|
- 'farm_user_id' => $farmUserId,
|
|
|
- 'user_dto' => $userDto
|
|
|
- ]);
|
|
|
- throw new \Exception('农场用户不存在');
|
|
|
- }
|
|
|
|
|
|
- Log::info('农场用户信息获取成功', [
|
|
|
- 'farm_user_id' => $farmUserId,
|
|
|
- 'user_name' => $userDto->name ?? 'unknown'
|
|
|
+
|
|
|
+ return $response;
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('URS login4u登录失败', [
|
|
|
+ 'keylogin' => $keylogin ?? '',
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ 'trace' => $e->getTraceAsString()
|
|
|
]);
|
|
|
|
|
|
- // 5. 同步上下级关系
|
|
|
- $isFirstEntry = $this->syncReferralRelations($ursUserId, $farmUserId);
|
|
|
+ throw new $e;
|
|
|
+ }
|
|
|
+ return $response;
|
|
|
|
|
|
- // 6. 触发用户进入农场事件(在推荐关系同步完成后)
|
|
|
- if ($isFirstEntry) {
|
|
|
- $this->triggerUserEnteredFarmEvent($ursUserId, $farmUserId, $keylogin);
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- // 8. 设置用户登录状态
|
|
|
- $user = \App\Module\User\Models\User::find($farmUserId);
|
|
|
- if (!$user) {
|
|
|
- throw new \Exception('用户模型获取失败');
|
|
|
- }
|
|
|
+ /**
|
|
|
+ * 通过UserKey处理URS登录的公共静态方法
|
|
|
+ *
|
|
|
+ * @param string $userKey 用户密钥
|
|
|
+ * @return array 包含sessionId、farmUserId、ursUserId等信息
|
|
|
+ * @throws \Exception
|
|
|
+ */
|
|
|
+ public static function processUrsLoginByUserKey(string $userKey): array
|
|
|
+ {
|
|
|
+ Log::info('开始处理URS UserKey登录', [
|
|
|
+ 'user_key_length' => strlen($userKey)
|
|
|
+ ]);
|
|
|
|
|
|
- SessionApp::setLogin($user);
|
|
|
- $sessionId = SessionApp::getSessionId();
|
|
|
+ // 1. 使用URS获取用户信息
|
|
|
+ $ursUserInfo = self::getUrsUserInfoByUserKey($userKey);
|
|
|
+ $ursUserId = $ursUserInfo['userId'];
|
|
|
|
|
|
- // 9. 触发登录成功事件
|
|
|
- Event::dispatch(new LoginSuccessEvent($user, $sessionId));
|
|
|
+ // 2. 获取或创建农场用户ID
|
|
|
+ $farmUserId = UrsUserMappingService::getFarmUserIdByUserKeyWithAutoCreate($userKey, $ursUserId);
|
|
|
+ if (!$farmUserId) {
|
|
|
+ throw new \Exception('获取农场用户ID失败');
|
|
|
+ }
|
|
|
|
|
|
- // 10. 记录登录日志
|
|
|
- Log::info('URS login4u登录成功', [
|
|
|
- 'urs_user_id' => $ursUserId,
|
|
|
- 'farm_user_id' => $farmUserId,
|
|
|
- 'username' => $user->username,
|
|
|
- 'session_id' => $sessionId
|
|
|
- ]);
|
|
|
+ // 3. 完成登录流程
|
|
|
+ return self::completeUrsLogin($ursUserId, $farmUserId, $userKey);
|
|
|
+ }
|
|
|
|
|
|
- // 11. 创建响应对象
|
|
|
- $response = new ResponsePublicLogin4u();
|
|
|
- $response->setToken($sessionId);
|
|
|
+ /**
|
|
|
+ * 通过手机号密码处理URS登录的公共静态方法
|
|
|
+ *
|
|
|
+ * @param string $mobile 手机号
|
|
|
+ * @param string $password 密码
|
|
|
+ * @return array 包含sessionId、farmUserId、ursUserId等信息
|
|
|
+ * @throws \Exception
|
|
|
+ */
|
|
|
+ public static function processUrsLoginByMobilePassword(string $mobile, string $password): array
|
|
|
+ {
|
|
|
+ Log::info('开始处理URS手机号密码登录', [
|
|
|
+ 'mobile' => $mobile
|
|
|
+ ]);
|
|
|
|
|
|
+ // 1. 使用URS登录获取用户信息
|
|
|
+ $loginResult = \ThirdParty\Urs\Services\UrsService::login($mobile, $password);
|
|
|
+ $ursUserId = $loginResult['userId'];
|
|
|
+ $userKey = $loginResult['userKey'];
|
|
|
|
|
|
+ // 2. 获取或创建农场用户ID
|
|
|
+ $farmUserId = UrsUserMappingService::getFarmUserIdByUserKeyWithAutoCreate($userKey, $ursUserId);
|
|
|
+ if (!$farmUserId) {
|
|
|
+ throw new \Exception('获取农场用户ID失败');
|
|
|
+ }
|
|
|
|
|
|
+ // 3. 完成登录流程
|
|
|
+ return self::completeUrsLogin($ursUserId, $farmUserId, $userKey);
|
|
|
+ }
|
|
|
|
|
|
+ /**
|
|
|
+ * 完成URS登录的公共逻辑
|
|
|
+ *
|
|
|
+ * @param int $ursUserId URS用户ID
|
|
|
+ * @param int $farmUserId 农场用户ID
|
|
|
+ * @param string $userKey 用户密钥
|
|
|
+ * @return array 包含sessionId、farmUserId、ursUserId等信息
|
|
|
+ * @throws \Exception
|
|
|
+ */
|
|
|
+ public static function completeUrsLogin(int $ursUserId, int $farmUserId, string $userKey): array
|
|
|
+ {
|
|
|
+ // 1. 获取农场用户信息
|
|
|
+ $userDto = UserService::info($farmUserId);
|
|
|
+ if (!$userDto) {
|
|
|
+ throw new \Exception('农场用户不存在');
|
|
|
+ }
|
|
|
|
|
|
- return $response;
|
|
|
+ // 2. 同步上下级关系
|
|
|
+ $isFirstEntry = self::syncReferralRelations($ursUserId, $farmUserId);
|
|
|
|
|
|
- } catch (\Exception $e) {
|
|
|
- Log::error('URS login4u登录失败', [
|
|
|
- 'keylogin' => $keylogin ?? '',
|
|
|
- 'error' => $e->getMessage(),
|
|
|
- 'trace' => $e->getTraceAsString()
|
|
|
- ]);
|
|
|
+ // 3. 触发用户进入农场事件(在推荐关系同步完成后)
|
|
|
+ if ($isFirstEntry) {
|
|
|
+ self::triggerUserEnteredFarmEvent($ursUserId, $farmUserId, $userKey);
|
|
|
+ }
|
|
|
|
|
|
- throw new $e;
|
|
|
+ // 4. 设置用户登录状态
|
|
|
+ $user = \App\Module\User\Models\User::find($farmUserId);
|
|
|
+ if (!$user) {
|
|
|
+ throw new \Exception('用户模型获取失败');
|
|
|
}
|
|
|
- return $response;
|
|
|
|
|
|
+ SessionApp::setLogin($user);
|
|
|
+ $sessionId = SessionApp::getSessionId();
|
|
|
+
|
|
|
+ // 5. 触发登录成功事件
|
|
|
+ Event::dispatch(new LoginSuccessEvent($user, $sessionId));
|
|
|
+
|
|
|
+ // 6. 记录登录日志
|
|
|
+ Log::info('URS登录成功', [
|
|
|
+ 'urs_user_id' => $ursUserId,
|
|
|
+ 'farm_user_id' => $farmUserId,
|
|
|
+ 'username' => $user->username,
|
|
|
+ 'session_id' => $sessionId
|
|
|
+ ]);
|
|
|
+
|
|
|
+ return [
|
|
|
+ 'sessionId' => $sessionId,
|
|
|
+ 'farmUserId' => $farmUserId,
|
|
|
+ 'ursUserId' => $ursUserId,
|
|
|
+ 'user' => $user,
|
|
|
+ 'userDto' => $userDto
|
|
|
+ ];
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取URS用户信息
|
|
|
+ * 获取URS用户信息(通过UserKey)
|
|
|
*
|
|
|
* @param string $keylogin 登录密钥
|
|
|
* @return array URS用户信息
|
|
|
* @throws \Exception
|
|
|
*/
|
|
|
- private function getUrsUserInfo(string $keylogin): array
|
|
|
+ public static function getUrsUserInfoByUserKey(string $keylogin): array
|
|
|
{
|
|
|
Log::info('开始获取URS用户信息', [
|
|
|
'keylogin_length' => strlen($keylogin),
|
|
|
@@ -212,7 +251,7 @@ class Login4uHandler extends BaseHandler
|
|
|
* @param int $farmUserId 农场用户ID
|
|
|
* @return bool 是否为首次进入农场(新创建了推荐关系)
|
|
|
*/
|
|
|
- private function syncReferralRelations(int $ursUserId, int $farmUserId): bool
|
|
|
+ public static function syncReferralRelations(int $ursUserId, int $farmUserId): bool
|
|
|
{
|
|
|
try {
|
|
|
Log::info('开始同步URS推荐关系', ['urs_user_id' => $ursUserId]);
|
|
|
@@ -298,7 +337,7 @@ class Login4uHandler extends BaseHandler
|
|
|
* @param string $userKey 用户密钥
|
|
|
* @return void
|
|
|
*/
|
|
|
- private function triggerUserEnteredFarmEvent(int $ursUserId, int $farmUserId, string $userKey): void
|
|
|
+ public static function triggerUserEnteredFarmEvent(int $ursUserId, int $farmUserId, string $userKey): void
|
|
|
{
|
|
|
try {
|
|
|
event(new \App\Module\UrsPromotion\Events\UrsUserEnteredFarmEvent($ursUserId, $farmUserId, $userKey, true));
|