Easemob.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. namespace app\expand\controller;
  3. use app\common\service\HelperService;
  4. use think\Cache;
  5. use think\Validate;
  6. /**
  7. * 环信接口
  8. * Class Easemob
  9. * @package app\expand\controller
  10. */
  11. class Easemob extends BaseAuth
  12. {
  13. private $_baseUrl = 'https://a1.easemob.com/';
  14. private $_easemobAccount = null;
  15. public function __construct(){
  16. parent::__construct();
  17. $this->_easemobAccount = $this->getKey($this->_apiCode);
  18. //验证是否具有访问这个接口的权限
  19. if(!isset($this->_easemobAccount['Easemob_org_name'])
  20. || !isset($this->_easemobAccount['Easemob_app_name'])
  21. || !isset($this->_easemobAccount['Easemob_client_secret'])
  22. || !isset($this->_easemobAccount['Easemob_client_id']) ){
  23. HelperService::returnJson(['code'=>400,'msg'=>'Easemob interface unauthorized access','data'=>[]]);
  24. }
  25. }
  26. private function getToken($force=false){
  27. $getTokenUrl = $this->createEasemobUrl().'token';
  28. $clientId = $this->_easemobAccount['Easemob_client_id'];
  29. $clientSecret = $this->_easemobAccount['Easemob_client_secret'];
  30. $tokenData = Cache::get("easeKey_$clientId");
  31. if(!empty($tokenData) && $force==false){
  32. return $tokenData;
  33. }
  34. $data = [
  35. 'grant_type'=>'client_credentials',
  36. 'client_id'=>$clientId,
  37. 'client_secret'=>$clientSecret
  38. ];
  39. $easemob = HelperService::httpPost($getTokenUrl,json_encode($data),true);
  40. $resultArr = @json_decode($easemob,true);
  41. if(!isset($resultArr['access_token'])){
  42. HelperService::returnJson(['code'=>400,'msg'=>'Easemob get token error','data'=>$easemob]);
  43. }
  44. //缓存token
  45. $tokenData = [
  46. 'access_token'=>$resultArr['access_token'],
  47. 'application'=>$resultArr['application']
  48. ];
  49. Cache::set("easeKey_$clientId",$tokenData,$resultArr['expires_in']);
  50. return $tokenData;
  51. }
  52. /**
  53. * 授权注册用户
  54. */
  55. public function userRegister(){
  56. $params = $this->_params;
  57. $rule = [
  58. 'username|用户名'=>'require',
  59. 'password|密码'=>'require',
  60. 'nickname|昵称'=>'require',
  61. ];
  62. $validate = new Validate($rule);
  63. if(!$validate->check($params)){
  64. HelperService::returnJson(['code'=>400,'msg'=>$validate->getError(),'data'=>[]]);
  65. }
  66. $TokenInfo = $this->getToken();
  67. //重试2次
  68. $times = 2;
  69. userRegister:
  70. $userRegisterUrl = $this->createEasemobUrl()."users";
  71. $token = $TokenInfo['access_token'];
  72. $header = [
  73. "Authorization:Bearer $token",
  74. ];
  75. $res = HelperService::httpPost($userRegisterUrl,json_encode([
  76. 'username'=>$params['username'],
  77. 'password'=>$params['password'],
  78. 'nickname'=>$params['nickname'],
  79. ]),true,$header);
  80. //401 token失效,强制更新
  81. if($res === false && HelperService::$_httpStatus == 401 && $times>0){
  82. $TokenInfo = $this->getToken(true);
  83. $times--;
  84. goto userRegister;
  85. }
  86. if($res === false || HelperService::$_httpStatus != 200){
  87. HelperService::returnJson(['code'=>400,'msg'=>'easemob interface is fail','data'=>HelperService::$_httpReturn]);
  88. }
  89. HelperService::returnJson(['code'=>200,'msg'=>'success','data'=>['originResult'=>@json_decode($res,true),'httpStatus'=>HelperService::$_httpStatus]]);
  90. }
  91. /**
  92. * 创建环信链接
  93. * @return string
  94. */
  95. private function createEasemobUrl(){
  96. $org_name = $this->_easemobAccount['Easemob_org_name'];
  97. $app_name = $this->_easemobAccount['Easemob_app_name'];
  98. return $this->_baseUrl."{$org_name}/{$app_name}/";
  99. }
  100. }