_easemobAccount = $this->getKey($this->_apiCode); //验证是否具有访问这个接口的权限 if(!isset($this->_easemobAccount['Easemob_org_name']) || !isset($this->_easemobAccount['Easemob_app_name']) || !isset($this->_easemobAccount['Easemob_client_secret']) || !isset($this->_easemobAccount['Easemob_client_id']) ){ HelperService::returnJson(['code'=>400,'msg'=>'Easemob interface unauthorized access','data'=>[]]); } } private function getToken($force=false){ $getTokenUrl = $this->createEasemobUrl().'token'; $clientId = $this->_easemobAccount['Easemob_client_id']; $clientSecret = $this->_easemobAccount['Easemob_client_secret']; $tokenData = Cache::get("easeKey_$clientId"); if(!empty($tokenData) && $force==false){ return $tokenData; } $data = [ 'grant_type'=>'client_credentials', 'client_id'=>$clientId, 'client_secret'=>$clientSecret ]; $easemob = HelperService::httpPost($getTokenUrl,json_encode($data),true); $resultArr = @json_decode($easemob,true); if(!isset($resultArr['access_token'])){ HelperService::returnJson(['code'=>400,'msg'=>'Easemob get token error','data'=>$easemob]); } //缓存token $tokenData = [ 'access_token'=>$resultArr['access_token'], 'application'=>$resultArr['application'] ]; Cache::set("easeKey_$clientId",$tokenData,$resultArr['expires_in']); return $tokenData; } /** * 授权注册用户 */ public function userRegister(){ $params = $this->_params; $rule = [ 'username|用户名'=>'require', 'password|密码'=>'require', 'nickname|昵称'=>'require', ]; $validate = new Validate($rule); if(!$validate->check($params)){ HelperService::returnJson(['code'=>400,'msg'=>$validate->getError(),'data'=>[]]); } $TokenInfo = $this->getToken(); //重试2次 $times = 2; userRegister: $userRegisterUrl = $this->createEasemobUrl()."users"; $token = $TokenInfo['access_token']; $header = [ "Authorization:Bearer $token", ]; $res = HelperService::httpPost($userRegisterUrl,json_encode([ 'username'=>$params['username'], 'password'=>$params['password'], 'nickname'=>$params['nickname'], ]),true,$header); //401 token失效,强制更新 if($res === false && HelperService::$_httpStatus == 401 && $times>0){ $TokenInfo = $this->getToken(true); $times--; goto userRegister; } if($res === false || HelperService::$_httpStatus != 200){ HelperService::returnJson(['code'=>400,'msg'=>'easemob interface is fail','data'=>HelperService::$_httpReturn]); } HelperService::returnJson(['code'=>200,'msg'=>'success','data'=>['originResult'=>@json_decode($res,true),'httpStatus'=>HelperService::$_httpStatus]]); } /** * 创建环信链接 * @return string */ private function createEasemobUrl(){ $org_name = $this->_easemobAccount['Easemob_org_name']; $app_name = $this->_easemobAccount['Easemob_app_name']; return $this->_baseUrl."{$org_name}/{$app_name}/"; } }