jsCode = $this->request->input('js_code'); $phoneCode = $this->request->input('phone_code'); if (empty($this->jsCode) || empty($phoneCode)) throw new ErrException('登录参数错误'); $wxInfo = $this->jsCodeGetOpenId($this->jsCode); $this->openId = $wxInfo['openid']; $this->unionId = $wxInfo['unionid'] ?? ''; $this->jsCodeGetPhoneNumber($phoneCode); $this->mobile = $wxPhone['phone_info']['purePhoneNumber'] ?? ''; $this->checkLock(self::LOGIN_TYPE); $this->register(); $this->login(); $this->updateMobile(); $this->redis->delLock($this->lockKey); return $this->getReturn(); } /** * @return void */ private function updateMobile(): void { if (empty($this->mobile)) return; if ($this->userInfo->mobile == $this->mobile) return; $this->userInfo->mobile = $this->mobile; if (!$this->userInfo->save()) throw new ErrException('更新手机号失败'); } /** * 注册 * @return void */ protected function register(): void { $thirdInfo = $this->userThirdModel->getThirdInfoByOpenId($this->openId); if (!empty($thirdInfo)) { $this->userId = $thirdInfo->user_id; return; } // todo 设备封禁不可注册 注册限制 Db::transaction(function () { $this->addUser(); $this->addUserThird(); $this->addAccount(); $this->addInviteCode(); // 邀请过来的 邀请方有没有奖励 被邀请方有没有奖励 $this->checkInvite(); // 有没有注册奖励 事件机制 // $this->addCoupon(); $this->eventDispatcher->dispatch(new RegistrationEvent($this->userId)); }); } /** * @return void */ private function addUserThird(): void { $model = new UserThird(); $model->user_id = $this->userId; $model->open_id = $this->openId; $model->union_id = $this->unionId; $model->type = ThirdCode::WX_LOGIN; if (!$model->save()) throw new ErrException('注册失败-00001'); } }