diff --git a/app/api/service/passport/Login.php b/app/api/service/passport/Login.php index ee6dad14..a3e3042d 100644 --- a/app/api/service/passport/Login.php +++ b/app/api/service/passport/Login.php @@ -56,6 +56,15 @@ class Login extends BaseService { // 数据验证 $this->validate($data); + //新增小程序登录 + if (!empty($data['ucode'])) { + // 推荐人ID + $refereeId = 0; + if (!empty($data['refereeId'])) { + $refereeId = intval($data['refereeId']); + } + return $this->loginMinWx($data['ucode'], $refereeId); + } // 自动登录注册 $this->register($data); // 保存第三方用户信息 @@ -63,6 +72,35 @@ class Login extends BaseService // 记录登录态 return $this->setSession(); } + + private function loginMinWx($code, $refereeId): bool + { + // 获取微信小程序登录态(session) + $wxSession = PartyService::getMpWxSession($code); + // 判断openid是否存在 + $userId = OauthService::getUserIdByOauthId($wxSession['openid'], ClientEnum::MP_WEIXIN); + // 获取用户信息 + $userInfo = !empty($userId) ? UserModel::detail($userId) : null; + // 用户信息存在, 更新登录信息 + if (!empty($userInfo)) { + // 更新用户登录信息 + $this->updateUser($userInfo, true); + // 记录登录态 + return $this->setSession(); + } + // 用户信息不存在 => 注册新用户 或者 跳转到绑定手机号页 + $setting = SettingModel::getItem(SettingEnum::REGISTER); + // 后台设置了需强制绑定手机号, 返回前端isBindMobile, 跳转到手机号验证页 + if ($setting['isForceBindMpweixin']) { + throwError('当前用户未绑定手机号', null, ['isBindMobile' => true]); + } + // 用户不存在: 创建一个新用户 + $this->createUser('', true, [], (int)$refereeId); + // 保存第三方用户信息 + $this->createUserOauth($this->getUserId(), true); + // 记录登录态 + return $this->setSession(); + } /** * 快捷登录:微信小程序用户