* @version : HUOSDK 8.0 */ namespace api\sdk\controller\v8; use api\common\controller\V2ApiBaseController; use ban\Ban; use ban\BanConst; use huo\controller\app\FloatPoint; use huo\controller\common\HuoCookie; use huo\controller\member\FindPwd; use huo\controller\member\Login; use huo\controller\member\Member; use huo\controller\member\Register; use huo\logic\member\MemberLogic; use huo\model\log\MemLoginLogModel; use huo\model\member\MemberModel; use huoIdentify\controller\Identify; use huolib\sms\Sms; use huolib\sms\SmsType; use huolib\status\MemberStatus; use huolib\tool\SimpleSec; use huolib\tool\StrUtils; use think\Cookie; use think\Log; use think\Session; class MemberController extends V2ApiBaseController { public function _initialize() { parent::_initialize(); } public function getReturn($mem_data, $app_id = 0, $device_id = '') { $_rdata = (new FloatPoint())->getFloat($app_id); $_rdata['mem_id'] = $mem_data['mem_id']; $_rdata['agentgame'] = $mem_data['agent_game']; $_token = HuoCookie::getMemToken(); $_rdata['user_token'] = $_token; $_rdata['is_bind'] = $mem_data['is_bind']; $_rdata['cp_user_token'] = SimpleSec::encode($_token, config('CPAUTHCODE')); $_rdata['url'] = $mem_data['url']; /* Modified by chenbingling BEGIN 2019/11/29 ISSUES:10837 实名认证新规调整 */ $_auth_info = (new Identify())->getMemIdentifyInfo($app_id, $mem_data['mem_id'], $device_id); $_rdata['url'] = get_val($_auth_info, 'url', ''); $_rdata['auth_info'] = get_val($_auth_info, 'auth_info', null); /* END 2019/11/29 ISSUES:10837 */ /* Modified by chenbingling BEGIN 2021/9/7 ISSUES:#15622 产品需求 未成年玩家优先弹出限制,不显示小号*/ if (!empty($_rdata['auth_info']['age']) && $_rdata['auth_info']['age'] < 18 && !empty($_rdata['url'])) { $_rdata['account_url'] = ''; } /* END 2021/9/7 ISSUES:#15622 */ return $_rdata; } public function getUrl() { return ''; } /** * 一键注册 * http://doc.1tsdk.com/138?page_id=2900 * 【域名】/v8/user/regone */ public function regOne() { $_channel_rq = $this->setChannelData(); $_mem_class = new Member(); $_rdata['username'] = $_mem_class->genUsername(); $_rdata['password'] = StrUtils::getRandChars(8); $_rdata['agentgame'] = $_channel_rq->getAgentGame(); $_rdata['status'] = 1; $_rdata['type'] = 2; $this->success(lang('SUCCESS'), $_rdata); } /** * 普通注册 * http://doc.1tsdk.com/138?page_id=2901 * 【域名】/v8/user/reg */ public function register() { $_game_rq = $this->setGameData(); $_channel_rq = $this->setChannelData(); $_device_rq = $this->setDeviceData(); $_mem_rq = $this->setMemData(true); $_mr_class = new Register(); $_status = $this->request->param('status', 1); if (!empty($_status)) { $_mem_rq->setStatus($_status); } $_rdata = $_mr_class->register($_game_rq, $_channel_rq, $_device_rq, $_mem_rq); if (MemberStatus::NO_ERROR != $_rdata['code']) { $this->error($_rdata['msg'], [], $_rdata['code']); } $this->success( $_rdata['msg'], $this->getReturn($_rdata['data'], $_game_rq->getHAppId(), $_device_rq->getDeviceId()), $_rdata['code'] ); } /** * 手机注册 * http://doc.1tsdk.com/138?page_id=2902 * 【域名】/v8/user/regm */ public function regMobile() { $_game_rq = $this->setGameData(); $_channel_rq = $this->setChannelData(); $_device_rq = $this->setDeviceData(); $_mem_rq = $this->setMemData(); $_sms_data = $this->rq_data['sms']; $_mobile = $_sms_data['mobile']; $_type = $_sms_data['type']; $_code = $_sms_data['code']; /** 注册前校验IP封禁 */ // if ((new Ban())->isBan(BanConst::BAN_TYPE_IP, $_device_rq->getIp())) { // $this->error(BanConst::IP_BAN_MSG, [], MemberStatus::MEM_ACCOUNT_ANOMALY); // } /* 校验短信是否正确 */ $_sms_rs = (new Sms())->check($_mobile, $_code, $_type); if (MemberStatus::NO_ERROR != $_sms_rs['code']) { $this->error($_sms_rs['msg'], [], $_sms_rs['code']); } $_mr_class = new Register(); $_rdata = $_mr_class->regMobile($_game_rq, $_channel_rq, $_device_rq, $_mem_rq, $_mobile); if (MemberStatus::NO_ERROR != $_rdata['code']) { $this->error($_rdata['msg'], [], $_rdata['code']); } $this->success( lang('SUCCESS'), $this->getReturn($_rdata['data'], $_game_rq->getHAppId(), $_device_rq->getDeviceId()) ); } /** * 普通登录 * http://doc.1tsdk.com/138?page_id=2903 * 【域名】/v8/user/login */ public function login() { $_game_rq = $this->setGameData(); $_channel_rq = $this->setChannelData(); $_device_rq = $this->setDeviceData(); $_mem_rq = $this->setMemData(); $_mr_class = new Login(); $_rdata = $_mr_class->login($_game_rq, $_channel_rq, $_device_rq, $_mem_rq); if (MemberStatus::NO_ERROR != $_rdata['code']) { $this->error($_rdata['msg'], [], $_rdata['code']); } $this->success( $_rdata['msg'], $this->getReturn($_rdata['data'], $_game_rq->getHAppId(), $_device_rq->getDeviceId()), $_rdata['code'] ); } /** * 手机短信登录 * http://doc.1tsdk.com/138?page_id=2904 * 【域名】/v8/user/loginm */ public function loginMobile() { $_game_rq = $this->setGameData(); $_channel_rq = $this->setChannelData(); $_device_rq = $this->setDeviceData(); $_mem_rq = $this->setMemData(); $_sms_data = $this->rq_data['sms']; $_mobile = $_sms_data['mobile']; $_type = $_sms_data['type']; $_code = $_sms_data['code']; /* 校验短信是否正确 */ $_sms_rs = (new Sms())->check($_mobile, $_code, $_type); if (MemberStatus::NO_ERROR != $_sms_rs['code']) { $this->error($_sms_rs['msg'], [], $_sms_rs['code']); } $_mr_class = new Login(); $_rdata = $_mr_class->loginMobile($_game_rq, $_channel_rq, $_device_rq, $_mem_rq, $_mobile); if (MemberStatus::NO_ERROR != $_rdata['code']) { $this->error($_rdata['msg'], [], $_rdata['code']); } $this->success( $_rdata['msg'], $this->getReturn($_rdata['data'], $_game_rq->getHAppId(), $_device_rq->getDeviceId()), $_rdata['code'] ); } /** * 第三方登录 * http://doc.1tsdk.com/138?page_id=2905 * 【域名】/v8/user/loginoauth */ public function oauthLogin() { } /** * 玩家登出 * http://doc.1tsdk.com/138?page_id=2906 * 【域名】/v8/user/logout */ public function logout() { $_rdata['url'] = $this->getUrl(); // TODO: wuyonghong 2018/5/30 异步任务处理 调用低层处理 Session::clear(); Cookie::clear(); HuoCookie::delMemToken(); /* Modified by luowei BEGIN 2021-03-11 ISSUES:14299 实名认证数据上报 */ $_game_rq = $this->setGameData(); $_mem_rq = $this->setMemData(); if (!empty($_game_rq->getHAppId()) && !empty($_mem_rq->getMemId())) { $_class_name = '\huoIdentify\controller\Identify'; if (class_exists($_class_name)) { (new $_class_name())->reportLogoutBehavior($_game_rq->getHAppId(), $_mem_rq->getMemId()); } } /* END 2021-03-11 ISSUES:14299 */ Session::set('is_wx_login_out', 1); $this->success(lang('SUCCESS'), $_rdata); } /** * 获取用户信息 * http://doc.1tsdk.com/138?page_id=3131 * 【域名】/user/detail */ public function read() { // h5i不走此方法 $this->checkLogin(); $_rdata = (new Member())->getMemInfo($this->mem_id); /* Modified by chenbingling BEGIN 2019/11/29 ISSUES:10837 实名认证新规调整 */ $_game_rq = $this->setGameData(); $_device_rq = $this->setDeviceData(); $_auth_info = (new Identify())->getMemIdentifyInfo( $_game_rq->getHAppId(), $this->mem_id, $_device_rq->getDeviceId(), $this->token ); $_rdata['url'] = get_val($_auth_info, 'url', ''); $_rdata['auth_info'] = get_val($_auth_info, 'auth_info', null); $siteInfo = cmf_get_site_info(); $_rdata['wap_app_down_url'] = get_val($siteInfo, 'wap_app_down_url', ''); /* END 2019/11/29 ISSUES:10837 */ $_code = MemberStatus::NO_ERROR; $this->success(MemberStatus::getMsg($_code), $_rdata); } /** * 获取找回密码验证token * http://doc.1tsdk.com/138?page_id=3138 * 【域名】/user/passwd/sms_check */ public function smsCheck() { $_sms_data = get_val($this->rq_data, 'sms', []); $_mobile = get_val($_sms_data, 'mobile', ''); $_type = get_val($_sms_data, 'type', SmsType::SMS_ID_VERIFY); $_code = get_val($_sms_data, 'code', ''); /* 校验短信是否正确 */ $_sms_rs = (new Sms())->check($_mobile, $_code, $_type); if (MemberStatus::NO_ERROR != $_sms_rs['code']) { $this->error($_sms_rs['msg'], [], $_sms_rs['code']); } $_chk_rs = (new FindPwd())->checkMobile($_mobile); if (MemberStatus::NO_ERROR != $_chk_rs['code']) { $this->error($_chk_rs['msg'], [], $_chk_rs['code']); } $_member_list = (new MemberModel())->getMemListByMobile($_mobile); $_r_data['data'] = $_member_list; $_data['verify_token'] = StrUtils::genToken(); Session::set('verify_token', $_data['verify_token']); $_r_data['verify_token'] = $_data['verify_token']; Session::set('find_pwd_mobile', $_mobile); $this->success($_sms_rs['msg'], $_r_data, $_sms_rs['code']); $this->error($_chk_rs['msg'], $_data, $_chk_rs['code']); } /** * 重置密码 * http://doc.1tsdk.com/138?page_id=3141 * 【域名】/v8//user/passwd/reset * 【域名】/user/passwd/reset * */ public function updatePassword() { $_verify_token = get_val($this->rq_data, 'verify_token', ''); $_check_token = Session::get('verify_token'); if ($_verify_token != $_check_token) { $_code = MemberStatus::INVALID_PARAMS; $this->error(MemberStatus::getMsg($_code), [], $_code); } $_mobile = Session::get('find_pwd_mobile'); Session::delete('find_pwd_mobile'); Session::delete('verify_token'); $_mem_rq = $this->setMemData(); $_password = $_mem_rq->getPassword(); $_rs = (new FindPwd())->updatePasswordByUsername($_mem_rq->getUsername(), $_password); if (MemberStatus::NO_ERROR != $_rs['code']) { $this->error($_rs['msg'], [], $_rs['code']); } $this->success($_rs['msg'], [], $_rs['code']); } /*** * 获取设备登录过的账号 * http://doc.1tsdk.com/138?page_id=3519 * 【域名】/user/device_user */ public function recoverAccount() { $_game_rq = $this->setGameData(); $_device_rq = $this->setDeviceData(); $_param['app_id'] = $_game_rq->getHAppId(); $_param['device_id'] = $_device_rq->getDeviceId(); $_mem_log_model = new MemLoginLogModel(); $_i = 0; do { $_param['time'] = strtotime('-'.$_i++.'month'); $_data = $_mem_log_model->getDeviceGameUser($_param); } while (empty($_data) && $_i < 3); //为空,只取3个月内记录 $this->success(MemberStatus::getMsg(MemberStatus::NO_ERROR), $_data, MemberStatus::NO_ERROR); } /** * 账号绑定信息 * http://doc.1tsdk.com/138?page_id=3520 * 【域名】/user/bind_info */ public function accountBindInfo() { $_mem_rq = $this->setMemData(); $_username = $_mem_rq->getUsername(); $_is_uname = (new Member())->checkUserName($_username); if (false == $_is_uname) { $this->error( MemberStatus::getMsg(MemberStatus::USERNAME_NOT_EXISTS), [], MemberStatus::USERNAME_NOT_EXISTS ); } $_data = (new MemberLogic())->getMobileEmailByName($_username); if (empty($_data['mobile'])) { $this->error(MemberStatus::getMsg(MemberStatus::PHONE_NOT_BIND), [], MemberStatus::PHONE_NOT_BIND); } Session::set('bing_mobile_'.$_username, $_data['mobile']); $_data['mobile'] = substr_replace($_data['mobile'], '****', 3, 4); $this->success(MemberStatus::getMsg(MemberStatus::NO_ERROR), $_data, MemberStatus::NO_ERROR); } /** * 找回密码发送短信 * http://doc.1tsdk.com/138?page_id=3521 * 【域名】/password/send_sms */ public function recoverPwdSendMsm() { $_mem_rq = $this->setMemData(); $_username = $_mem_rq->getUsername(); $_mobile = Session::get('bing_mobile_'.$_username); if (empty($_mobile)) { $this->error(MemberStatus::getMsg(MemberStatus::PHONE_EMPTY), [], MemberStatus::PHONE_EMPTY); } $_rs = (new Sms())->send($_mobile, SmsType::SMS_FIND_PWD); if (MemberStatus::NO_ERROR == $_rs['code']) { $this->success($_rs['msg'], $_rs['data'], $_rs['code']); } $this->error($_rs['msg'], $_rs['data'], $_rs['code']); } /** * 验证找回密码短信验证码 * http://doc.1tsdk.com/138?page_id=3522 * 【域名】/password/sms_verify */ public function recoverPwdCheckVerify() { $_mem_rq = $this->setMemData(); $_username = $_mem_rq->getUsername(); $_sms_data = $this->rq_data['sms']; $_code = $_sms_data['code']; $_mobile = Session::get('bing_mobile_'.$_username); /* 校验短信是否正确 */ $_sms_rs = (new Sms())->check($_mobile, $_code, SmsType::SMS_FIND_PWD); if (MemberStatus::NO_ERROR != $_sms_rs['code']) { $this->error($_sms_rs['msg'], [], $_sms_rs['code']); } $_member_list = (new MemberModel())->getMemListByMobile($_mobile); Session::set('change_pwd_'.$_username, 1); $this->success($_sms_rs['msg'], [], $_sms_rs['code']); } /** * 重置用户密码 * http://doc.1tsdk.com/138?page_id=3524 * 【域名】/password/reset */ public function resetPwd() { $_mem_rq = $this->setMemData(); $_username = $_mem_rq->getUsername(); $_password = $_mem_rq->getPassword(); $_is_change = Session::get('change_pwd_'.$_username); if (empty($_is_change)) { $this->error(MemberStatus::getMsg(MemberStatus::UNKNOWN_ERROR), [], MemberStatus::UNKNOWN_ERROR); } Session::delete('change_pwd_'.$_username); Session::delete('bing_mobile_'.$_username); $_mem_id = (new MemberLogic())->getIdByName($_username); if (empty($_mem_id)) { $this->error( MemberStatus::getMsg(MemberStatus::USERNAME_NOT_EXISTS), [], MemberStatus::USERNAME_NOT_EXISTS ); } $_rs = (new Member())->updatePassword($_mem_id, $_password); if (is_numeric($_rs)) { $this->success(MemberStatus::getMsg($_rs), [], $_rs); } elseif (false !== $_rs) { $this->error(MemberStatus::getMsg(MemberStatus::NO_ERROR), [], MemberStatus::NO_ERROR); } else { $this->error(MemberStatus::getMsg(MemberStatus::UNKNOWN_ERROR), [], MemberStatus::UNKNOWN_ERROR); } } }