* @version : Huosdk 8.0 */ namespace mini\sdk\controller; use ban\Ban; use huo\controller\common\HuoCookie; use huo\controller\common\HuoSession; use huo\controller\game\GameCache; use huo\controller\pay\PayShow; use huo\controller\pay\PaySwitch; use huo\model\member\MemoauthModel; use huolib\constant\CommonConst; use huolib\constant\GameConst; use huolib\constant\OauthConst; use huolib\constant\OrderConst; use huolib\status\CommonStatus; use huolib\status\MemberStatus; use huolib\tool\SimpleSec; use huomp\controller\member\MemberOut; use huomp\controller\member\OauthOut; use huomp\controller\order\OrderOut; use huomp\model\game\GameMiniModel; use mini\common\controller\V2ApiBaseController; use think\Log; use wxapp\aes\ErrorCode; use wxapp\aes\WXBizDataCrypt; class OauthController extends V2ApiBaseController { function _initialize() { parent::_initialize(); // Log::write( // $this->request->scheme().'://'.$this->request->server('HTTP_HOST').$this->request->server('REQUEST_URI').'?' // .$this->request->getContent(), // Log::LOG // ); } /** * http://doc.1tsdk.com/159?page_id=4378 * 小程序登陆 * 【域名】/mp/wx/login */ public function callbackWeixin() { $_code = get_val($this->rq_data, 'code'); $_state = get_val($this->rq_data, 'state'); $_game_rq = $this->setGameData(); $_channel_rq = $this->setChannelData(); $_device_rq = $this->setDeviceData(); $_mem_rq = $this->setMemData(); $_rs = (new OauthOut())->oauthLogin( $_code, $_state, $_game_rq, $_channel_rq, $_device_rq, $_mem_rq ); if (MemberStatus::NO_ERROR != $_rs['code']) { $this->error($_rs['msg']); } $_mem_data = $_rs['data']; //$_mg_mem_id = (new HuoSession($this->mem_id, $_game_rq->getHAppId()))->getMgMemId(); $_mg_mem_id = (new MemberOut())->getMgMemId($_game_rq->getHAppId(), $_mem_data['mem_id']); $_token = HuoCookie::getMemToken(); $_image = (new OrderOut())->getMemAppQrCode($_mem_data['mem_id'], $_game_rq->getHAppId()); if (empty($_image)) { $_image = ''; } $_data = [ 'mg_mem_id' => $_mg_mem_id, 'mem_id' => $_mem_data['mem_id'], 'agentgame' => $_mem_data['agent_game'], 'cp_user_token' => SimpleSec::encode($_token, config('CPAUTHCODE')), 'user_token' => $_token, 'image' => $_image, ]; $_is_ban = (new Ban())->checkMemEnv($_mem_data['mem_id'], $_device_rq->getIp()); if ($_is_ban != CommonStatus::NO_ERROR) { $_error_code = MemberStatus::MEM_ACCOUNT_ANOMALY; $this->error($_is_ban, [], $_error_code); } $_code = CommonStatus::NO_ERROR; $this->success(CommonStatus::getMsg($_code), $_data, $_code); } /** * http://doc.1tsdk.com/159?page_id=4379 * 小程序上传用户信息 * 【域名】/mp/wx/updateinfo */ public function upMemInfo() { $this->checkLogin(); $_mem_id = $this->mem_id; $_game_rq = $this->setGameData(); /* 加解密数据 */ $_encrypted_data = $this->request->param('encrypted_data/s', ''); $_iv = $this->request->param('iv/s', ''); $_wx_id = (new GameMiniModel())->getMpIdByAppId($_game_rq->getHAppId()); $_oauth_data = (new MemoauthModel())->getInfoByAppMemId($_game_rq->getHAppId(), $this->mem_id); if (empty($_oauth_data) || empty($_oauth_data['access_token'])) { Log::write( "func=".__FUNCTION__."&class=".__CLASS__."&mem_id=".$this->mem_id."&wi_id=".$_wx_id."&oauth_data=" .json_encode($_oauth_data) ."¶m=" .$this->request->getContent(), LOG::ERROR ); $_error_code = CommonStatus::INVALID_PARAMS; $this->error(CommonStatus::getMsg($_error_code).'1', [], $_error_code); } $_session_key = $_oauth_data['access_token']; $_pc = new WXBizDataCrypt($_wx_id, $_session_key); $_err_code = $_pc->decryptData($_encrypted_data, $_iv, $_wx_data); if (ErrorCode::$OK != $_err_code) { $_type = OauthConst::OAUTH_MP; $_app_id = $_game_rq->getHAppId(); $_oauth_data = (new MemoauthModel())->getInfoByAppMemId($_app_id, $this->mem_id); $_open_id = $_oauth_data['openid']; $_rdata = (new MemberOut())->getMemInfo($_mem_id, $_open_id, $_type, $this->token, $_app_id); $this->returnData($_rdata); // Log::write( // "func=".__FUNCTION__."&class=".__CLASS__."&wx_id=".$_wx_id."&session_key=".$_session_key."&err_code=" // .$_err_code."¶m=" // .$this->request->getContent(), // LOG::ERROR // ); // $_error_code = CommonStatus::INVALID_PARAMS; // $this->error(CommonStatus::getMsg($_error_code).'2', [], $_error_code); } $_wx_data = json_decode($_wx_data, true); $_type = OauthConst::OAUTH_MP; $_rdata = (new MemberOut())->upMemInfo( $_mem_id, $_oauth_data['openid'], $_wx_data, $_type, $this->device_type, $_game_rq->getHAppId() ); if (CommonStatus::NO_ERROR != $_rdata['code']) { $this->returnData($_rdata); } $this->mem_id = $_rdata['data']['mem_id']; $_token = HuoCookie::getMemToken(); HuoSession::setAppId($_token, $_game_rq->getHAppId()); //$_mg_mem_id = (new HuoSession($this->mem_id, $_game_rq->getHAppId()))->getMgMemId(); $_mg_mem_id = (new MemberOut())->getMgMemId($_game_rq->getHAppId(), $this->mem_id); $_rdata['data']['mg_mem_id'] = $_mg_mem_id; $_image = (new OrderOut())->getMemAppQrCode($_mem_id, $_game_rq->getHAppId()); if (empty($_image)) { $_image = ''; } $_rdata['data']['image'] = $_image; $this->returnData($_rdata); } /** * http://doc.1tsdk.com/159?page_id=4380 * 小程序获取用户信息 * 【域名】/mp/wx/getuserinfo */ public function getMemInfo() { $this->checkLogin(); $_channel_rq = $this->setChannelData(); $_mem_rq = $this->setMemData(); $_role_rq = $this->setRoleData(); $_order_rq = $this->setOrderData(); $_device_rq = $this->setDeviceData(); $_game_rq = $this->setGameData(); $_app_id = $_game_rq->getHAppId(); $_oauth_data = (new MemoauthModel())->getInfoByAppMemId($_app_id, $this->mem_id); $_open_id = $_oauth_data['openid']; $_mem_id = $this->mem_id; $_is_ban = (new Ban())->checkMemEnv($this->mem_id, $_device_rq->getIp()); if ($_is_ban != CommonStatus::NO_ERROR) { $_rdata['code'] = MemberStatus::MEM_ACCOUNT_ANOMALY; $_rdata['msg'] = $_is_ban; $_rdata['data'] = []; $this->returnData($_rdata); exit; } $_type = OauthConst::OAUTH_MP; $_rdata = (new MemberOut())->getMemInfo($_mem_id, $_open_id, $_type, $this->token, $_app_id); //$_mg_mem_id = (new HuoSession($this->mem_id, $_app_id))->getMgMemId(); $_mg_mem_id = (new MemberOut())->getMgMemId($_game_rq->getHAppId(), $_mem_id); $_rdata['data']['mg_mem_id'] = $_mg_mem_id; HuoSession::setAppId($this->token, $_app_id); $_image = (new OrderOut())->getMemAppQrCode($_mem_id, $_app_id); if (empty($_image)) { $_image = ''; } $_rdata['data']['image'] = $_image; $_pay_check = OrderConst::PAY_SWITCH_NO; /* 判断系统是否切换支付 */ /* 判断支付切换 */ if (GameConst::GAME_MP_GAME == $_game_rq->getPkgName()) { $_pay_switch = new PaySwitch(); $_pay_check = $_pay_switch->getPaySwitch( $_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq ); $_pay_check = $_pay_switch->checkShowPay($_pay_check, $_device_rq); if ($this->request->ip() == '120.236.141.221') { $_pay_show = new PayShow(); $_show_status = $_pay_show->getPayShow( $_order_rq, $_role_rq, $_mem_rq, $_game_rq, $_channel_rq, $_device_rq ); if (CommonConst::STATUS_NO == $_show_status) { $_pay_check = OrderConst::PAY_SWITCH_IOS_NO; } } } if (OrderConst::PAY_SWITCH_NO == $_pay_check && in_array( $_game_rq->getHAppId(), ['81234712', '81234716', '81234715'] )) { $_pay_check = OrderConst::PAY_SWITCH_IOS_NO; } /* ip屏蔽处理 */ if ($this->request->ip() == '221.229.173.156') { $_pay_check = OrderConst::PAY_SWITCH_IOS_NO; } $_rdata['data']['check'] = $_pay_check; /* IOS 充值提示 */ $_game_data = GameCache::ins()->getInfoByAppId($_app_id); $_rdata['data']['ios_text'] = empty($_game_data['ext_info']['ios_text']) ? '' : $_game_data['ext_info']['ios_text']; $this->returnData($_rdata); } }