* @version : HuoMp 1.0 */ namespace mini\sdk\controller; use huo\controller\common\HuoSession; use huo\controller\game\Game; use huo\controller\member\Role; use huo\model\log\MemRoleLogModel; use think\Controller; class CpRoleController extends Controller { private $mg_mem_id; private $mem_id; private $app_id; private $event; private $server_id; private $server_name; private $role_id; private $role_name; private $role_level; private $role_vip; private $sign; private $app_key; private $combat_num; function _initialize() { parent::_initialize(); } private function cpReturn($status = '0', $msg = '请求参数错误') { $_rdata = array( 'status' => $status, 'msg' => $msg ); echo json_encode($_rdata); exit; } /** * CP游戏角色信息上报 * http://doc.1tsdk.com/160?page_id=4831 * 【域名】/cp/role/report * */ public function report() { /* 1 查询是否具有访问权限 */ $_rs = $this->checkAuth(); if (false == $_rs) { $this->cpReturn('100', '没有接口访问权限'); } $_url_data = $this->request->param(); $this->app_id = get_val($_url_data, 'app_id'); $this->mg_mem_id = get_val($_url_data, 'mem_id'); $this->event = get_val($_url_data, 'event'); $this->server_id = get_val($_url_data, 'server_id'); $this->server_name = get_val($_url_data, 'server_name'); $this->role_id = get_val($_url_data, 'role_id'); $this->role_name = get_val($_url_data, 'role_name'); $this->role_level = get_val($_url_data, 'role_level'); $this->combat_num = get_val($_url_data, 'combat_num'); $this->role_vip = get_val($_url_data, 'role_vip'); $this->sign = get_val($_url_data, 'sign'); /* 0 检查参数 */ $this->checkParam(); /* 11 校验APPID */ $this->checkAppid(); /* 15 校验玩家 */ $this->checkUser(); /* 12 校验签名 */ $this->verifySign(); /* 16 检查访问次数 */ $this->checkCnt(); $_rs = $this->insertData(); if (false !== $_rs) { $this->cpReturn('1', '上报成功'); } } public function insertData() { $_role_class = new Role(); $_role_model = new MemRoleLogModel(); $_data['app_id'] = $this->app_id; $_data['mg_mem_id'] = $this->mg_mem_id; $_data['server_id'] = $this->server_id; $_data['server_name'] = $this->server_name; $_data['role_id'] = $this->role_id; $_data['role_name'] = $this->role_name; $_data['role_level'] = $this->role_level; $_data['role_vip'] = $this->role_vip; $_data['combat_num'] = $this->combat_num; $_data['money'] = 0; $_data['last_login_time'] = time(); $_data['create_time'] = time(); $_role_model->insertLog($_data); $_role_class->updateData($_data); } /** * @return bool */ private function checkAppid() { $_app_key = (new Game())->getAppKey($this->app_id); if (empty($_app_key)) { $this->cpReturn('11', '游戏ID(app_id)错误'); } $this->app_key = $_app_key; return true; } /** * @return bool */ private function checkUser() { $_mg_mem_id = (new HuoSession($this->mem_id, $this->app_id))->getMgMemId(); if ($_mg_mem_id != $this->mg_mem_id) { $this->cpReturn('15', '玩家未登陆'); } return true; } /** * 1 校验参数 */ private function checkParam() { if (empty($this->app_id) || $this->app_id < 0) { $this->cpReturn('0', '请求参数为空 app_id'); } if (empty($this->mg_mem_id) || $this->mg_mem_id < 0) { $this->cpReturn('0', '请求参数为空 mem_id'); } if (empty($this->sign)) { $this->cpReturn('0', '请求参数为空 sign'); } if (empty($this->event) || $this->event < 0) { $this->cpReturn('0', '请求参数错误 event'); } } /** * 校验权限 * * @return bool */ private function checkAuth() { // $this->cpReturn('100','没有接口访问权限'); return true; } /** * 检查次数 * * @return bool */ private function checkCnt() { // $this->cpReturn('16','访问太频繁,超过访问次数'); $_cnt = HuoSession::getCpReleReportCnt($this->mg_mem_id); if (empty($_cnt)) { $_cnt = 0; } $_cnt++; HuoSession::setCpReleReportCnt($this->mg_mem_id, $_cnt); return true; } /*12 校验签名 */ private function verifySign() { $_signstr = "app_id=".$this->app_id. "&combat_num=".$this->combat_num. "&event=".$this->event. "&mem_id=".$this->mg_mem_id. "&role_id=".$this->role_id. "&role_name=".$this->role_name. "&role_level=".$this->role_level. "&role_vip=".$this->role_vip. "&server_id=".$this->server_id. "&server_name=".$this->server_name. "&app_key=".$this->app_key; $_verify_sign = md5($_signstr); if ($this->sign != $_verify_sign) { $this->cpReturn('12', '签名校验不通过'); } return true; } }