* @version : Huosdk 8.0 */ namespace box\api\controller; use ban\Ban; use box\common\controller\V2ApiBaseController; use huo\controller\agent\AgentCache; use huo\controller\common\HuoCookie; use huo\controller\game\GameCache; use huo\controller\integral\MemIa; use huo\controller\member\Member; use huo\model\finance\SettleModel; use huo\model\integral\MemItgLogModel; use huo\model\member\MemoauthModel; use huo\model\user\UserModel; use huolib\constant\AgentConst; use huolib\constant\CommonConst; use huolib\constant\IaConst; use huolib\constant\MpConfConst; use huolib\constant\OauthConst; use huolib\status\CommonStatus; use huolib\status\MemberStatus; use huomp\controller\member\MemberOut; use huomp\controller\member\OauthOut; use huomp\logic\member\HomepageLogic; use huomp\model\game\GameMiniModel; 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=4389 * 小程序登陆 * 【域名】/mp/wx/login * * @return mixed */ 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'], [], $_rs['code']); } $_mem_data = $_rs['data']; $_mem_id = $_mem_data['mem_id']; if (empty($_mem_id)) { $_error_code = CommonStatus::INNER_ERROR; $this->error(CommonStatus::getMsg($_error_code), [], $_error_code); } $_is_ban = (new Ban())->checkMemEnv($_mem_id, $_device_rq->getIp()); if ($_is_ban != CommonStatus::NO_ERROR) { $_error_code = MemberStatus::MEM_ACCOUNT_ANOMALY; $this->error($_is_ban, [], $_error_code); } //返回数据 $_token = HuoCookie::getMemToken(); $_data = [ 'user_token' => $_token, 'get_novice_award' => CommonConst::CONST_TRUE, 'get_favorite_award' => CommonConst::CONST_TRUE ]; $_isReg = isset($_mem_data['is_reg']) ? $_mem_data['is_reg'] : 0; if (!empty($_isReg)) { /* 是否领取了新手奖励 1否 2是 */ $_mil_model = new MemItgLogModel(); $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_OPEN_GAME); if ($_cnt == CommonConst::CONST_ZERO) { $_data['get_novice_award'] = CommonConst::CONST_FALSE; } /* 是否领取了收藏奖励 1否 2是 */ $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_FAVORITE, $_game_rq->getHAppId()); if ($_cnt == CommonConst::CONST_ZERO) { $_data['get_favorite_award'] = CommonConst::CONST_FALSE; } } $_homepage_logic = new HomepageLogic(); $_data['auth'] = $_homepage_logic->getAuthSet($_game_rq->getAppVer()); //生成玩家主页 $_homepage_logic->getHomepage($_mem_id); $_rdata = (new MemberOut())->getBoxMemInfo($_mem_id, $_game_rq->getHAppId(), $_data); return $this->returnData($_rdata); } /** * http://doc.1tsdk.com/159?page_id=4390 * 小程序上传用户信息 * 【域名】/mp/wx/updateinfo */ public function upMemInfo() { $this->checkLogin(); $_game_rq = $this->setGameData(); $_mem_id = $this->mem_id; $_type = OauthConst::OAUTH_MP; /* 加解密数据 */ $_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."&wx_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), [], $_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) { Log::write( "func=".__FUNCTION__."&class=".__CLASS__."&err_code=".$_err_code, LOG::ERROR ); $_error_code = CommonStatus::INVALID_PARAMS; $this->error(CommonStatus::getMsg($_error_code), [], $_error_code); } $_wx_data = json_decode($_wx_data, true); $_rdata = (new MemberOut())->upMemInfo($_mem_id, $_oauth_data['openid'], $_wx_data, $_type, $this->device_type); if (MemberStatus::NO_ERROR != $_rdata['code']) { $this->returnData($_rdata); } $_mem_data = $_rdata['data']; $this->mem_id = $_mem_data['mem_id']; $_data['user_token'] = (new Member())->updateToken($this->mem_id, $this->device_type); //发放收益 $_ext = [ 'app_id' => $_game_rq->getHAppId(), 'game_id' => $_game_rq->getHAppId() ]; $_mil_model = new MemItgLogModel(); $_data['is_old_member'] = CommonConst::CONST_TRUE; $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_OPEN_GAME); if ($_cnt == CommonConst::CONST_ZERO) { $_data['is_old_member'] = CommonConst::CONST_FALSE; } (new MemIa($this->mem_id))->doItgAct(IaConst::IA_OPEN_GAME, $_ext); $_data['get_novice_award'] = CommonConst::CONST_TRUE; $_data['get_favorite_award'] = CommonConst::CONST_TRUE; /* 是否领取了新手奖励 1否 2是 */ $_game_rq = $this->setGameData(); $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_OPEN_GAME); if ($_cnt == CommonConst::CONST_ZERO) { $_data['get_novice_award'] = CommonConst::CONST_FALSE; } /* 是否领取了收藏奖励 1否 2是 */ $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_FAVORITE, $_game_rq->getHAppId()); if ($_cnt == CommonConst::CONST_ZERO) { $_data['get_favorite_award'] = CommonConst::CONST_FALSE; } $_homepage_logic = new HomepageLogic(); $_data['auth'] = $_homepage_logic->getAuthSet($_game_rq->getAppVer()); $_rdata = (new MemberOut())->getBoxMemInfo($_mem_id, $_game_rq->getHAppId(), $_data); $this->returnData($_rdata); } /** * http://doc.1tsdk.com/159?page_id=4391 * 小程序获取用户信息 * 【域名】/mp/wx/getuserinfo */ public function getMemInfo() { $this->checkLogin(); $_mem_id = $this->mem_id; $_device_rq = $this->setDeviceData(); $_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; } $_agent_id = (new UserModel())->getIdByMemId($_mem_id); $_agent_info = (new AgentCache())->getInfoByAgentId($_agent_id); if (empty($_agent_info) && $_agent_info['role_id'] != AgentConst::AGENT_ROLE_MP_MEMBER) { $_error_code = CommonStatus::INVALID_PARAMS; $this->error(CommonStatus::getMsg($_error_code), [], $_error_code); } $_data['get_novice_award'] = CommonConst::CONST_TRUE; $_data['get_favorite_award'] = CommonConst::CONST_TRUE; /* 是否领取了新手奖励 1否 2是 */ $_game_rq = $this->setGameData(); $_mil_model = new MemItgLogModel(); $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_OPEN_GAME); if ($_cnt == CommonConst::CONST_ZERO) { $_data['get_novice_award'] = CommonConst::CONST_FALSE; } /* 是否领取了收藏奖励 1否 2是 */ $_cnt = $_mil_model->getSubCnt($this->mem_id, IaConst::IA_FAVORITE, $_game_rq->getHAppId()); if ($_cnt == CommonConst::CONST_ZERO) { $_data['get_favorite_award'] = CommonConst::CONST_FALSE; } /* 是否提现过 */ $_data['red_msg'] = MpConfConst::MP_RED_MSG_ITG; $_settle_cnt = (new SettleModel())->getCnt($_agent_id); if (CommonConst::CONST_ZERO >= $_settle_cnt) { $_data['red_msg'] = MpConfConst::MP_RED_MSG_RP; } $_mem_out_model = new MemberOut(); /* 显示红包显示为文字 或数字 */ $_data['rp_type'] = $_mem_out_model->getHomeRp(); $_homepage_logic = new HomepageLogic(); $_data['auth'] = $_homepage_logic->getAuthSet($_game_rq->getAppVer()); $_data['open_game_set'] = $_mem_out_model->getOpenGameSet(); $_rdata = $_mem_out_model->getBoxMemInfo($_mem_id, $_game_rq->getHAppId(), $_data); $this->returnData($_rdata); } /** * http://doc.1tsdk.com/159?page_id=4653 * 红包上展示的小程序信息915 * 【域名】/mp/red/info */ public function getRedInfo() { $_game_rq = $this->setGameData(); $_game_data = GameCache::ins()->getInfoByAppId($_game_rq->getHAppId()); $_rdata = [ 'icon' => cmf_get_image_url($_game_data['icon']), 'name' => $_game_data['name'], ]; $_code = CommonStatus::NO_ERROR; $this->success(CommonStatus::getMsg($_code), $_rdata, $_code); } }