123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- namespace app\expand\controller;
- use app\common\service\HelperService;
- use think\Cache;
- use think\Validate;
- /**
- * 环信接口
- * Class Easemob
- * @package app\expand\controller
- */
- class Easemob extends BaseAuth
- {
- private $_baseUrl = 'https://a1.easemob.com/';
- private $_easemobAccount = null;
- public function __construct(){
- parent::__construct();
- $this->_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}/";
- }
- }
|