* @version : HUOSDK 8.0 */ namespace huo\controller\member; use huo\controller\request\Channel; use huo\controller\request\Device; use huo\controller\request\Game; use huo\controller\request\Mem; use huo\logic\member\AccountOrderLogic; use huolib\status\MemberStatus; use huolib\tool\StrUtils; use huolib\utils\UserUtils; use think\Log; class Login extends Member { /** * 玩家登陆 * * @param Game $game_rq * @param Channel $channel * @param Device $device * @param Mem $member * * @return mixed */ public function login(Game $game_rq, Channel $channel, Device $device, Mem $member) { $_username = $member->getUsername(); $_password = $member->getPassword(); $_rdata = $this->_login($_username, $_password, $game_rq->getHAppId(), $device->getDeviceType()); if (MemberStatus::NO_ERROR == $_rdata['code']) { $this->insertLoginLog($game_rq, $channel, $device, $member, $_rdata['data']); } return $_rdata; } /** * 手机登陆 * * @param Game $game_rq * @param Channel $channel * @param Device $device * @param Mem $member * @param $mobile * * @return mixed */ public function loginMobile(Game $game_rq, Channel $channel, Device $device, Mem $member, $mobile) { if (empty($mobile)) { return $this->retErrMsg(MemberStatus::PHONE_EMPTY); } if (true != StrUtils::checkPhone($mobile)) { return $this->retErrMsg(MemberStatus::PHONE_ERROR); } $_mem_data = $this->getInfoByMobile($mobile); if (!empty($_mem_data)) { if (3 == $_mem_data['status']) { $_rs = MemberStatus::ACCOUNT_HALT; } else { $_rdata = $this->getReturnData($_mem_data, $game_rq->getHAppId(),$device->getDeviceType()); $this->insertLoginLog($game_rq, $channel, $device, $member, $_rdata); return $this->retSucMsg(MemberStatus::NO_ERROR, $_rdata); } } if (!isset($_rs)) { $_rs = MemberStatus::PHONE_NOT_REG; } return $this->retErrMsg($_rs); } private function _login($username, $password, $app_id = 0, $device_type = '') { $_login_chk = UserUtils::checkLogin($username, $password); if (MemberStatus::NO_ERROR != $_login_chk) { Log::write( "func=".__FUNCTION__."&class=".__CLASS__."&step=1&username=$username&pwd=$password", Log::NOTICE ); return $this->retErrMsg($_login_chk); } $_um_chk = UserUtils::checkNameMobile($username); if (MemberStatus::NO_ERROR == $_um_chk) { $_mem_id = $this->getIdByName($username); } else { $_mem_id = $this->getIdByMobile($username); } $_mem_data = MemCache::ins()->getInfoById($_mem_id); if ($_mem_data) { $_chk_pwd = $this->checkPwd($password, $_mem_data['password']); if (false == $_chk_pwd) { $_rs = MemberStatus::USERNAME_OR_PASSWORD_ERR; } elseif (3 == $_mem_data['status']) { $_rs = MemberStatus::ACCOUNT_HALT; } else { $_rs = MemberStatus::NO_ERROR; } } else { $_rs = MemberStatus::USERNAME_OR_PASSWORD_ERR; Log::write( "func=".__FUNCTION__."&class=".__CLASS__."&step=2&username=$username&pwd=$password", Log::NOTICE ); return $this->retErrMsg($_rs); } if (!isset($_rs)) { $_rs = MemberStatus::USERNAME_OR_PASSWORD_ERR; } if (MemberStatus::NO_ERROR == $_rs) { //判断登陆的账号是否为审核账号 //是的话则查询 account_order 表返回对应的玩家信息 $_is_audit_account = false; // TODO: luowei 2018/6/15 根据标识判断 if ($_is_audit_account) { $_mg_mem_id = (new AccountOrderLogic())->getMgMemIdByUsername($username); if ($_mg_mem_id) { $_mem_game_info = (new MemGameCache())->getInfoById($_mg_mem_id); if (isset($_mem_game_info['mem_id'])) { $_mem_data = MemCache::ins()->getInfoById($_mem_game_info['mem_id']); } } } return $this->retSucMsg(MemberStatus::NO_ERROR, $this->getReturnData($_mem_data, $app_id, $device_type)); } else { Log::write("func=".__FUNCTION__."&class=".__CLASS__."&step=3&username=$username&pwd=$password", Log::ERROR); return $this->retErrMsg($_rs); } } }