zoukankan      html  css  js  c++  java
  • 环信即时通讯——集成客户端

    最近公司在开发一款 APP,需要使用环信即时通讯来做及时聊天和直播,找了好多官方的 REST API 发现并没有把直播集成服务写完,于是自己完善了一下,与大家分享 O (∩_∩) O
    话不多说上代码

    namespace yournamespace
    
    class Easemob{
        private $client_id;
        private $client_secret;
        private $org_name;
        private $app_name;
        private $url;
    //------------------------------------------------------用户体系    
            /**
         * 初始化参数
         *
         * @param array $options   
         * @param $options['client_id']     
         * @param $options['client_secret'] 
         * @param $options['org_name']      
         * @param $options['app_name']          
         */
        public function __construct($options) {
            $this->client_id = 'XXXXXXXXXXXXXX';
            $this->client_secret =  'XXXXXXXXXXXXXX';
            $this->org_name = 'XXXXXXXXXXXXXX';
            $this->app_name =  'XXXXXXXXXXXXXX';
            if (! empty ( $this->org_name ) && ! empty ( $this->app_name )) {
                $this->url = 'https://a1.easemob.com/' . $this->org_name . '/' . $this->app_name . '/';
            }
        }   
        /**
        *获取token 
        */
        function getToken()
        {
            $options=array(
            "grant_type"=>"client_credentials",
            "client_id"=>$this->client_id,
            "client_secret"=>$this->client_secret
            );
            //json_encode()函数,可将PHP数组或对象转成json字符串,使用json_decode()函数,可以将json字符串转换为PHP数组或对象
            $body=json_encode($options);
            //使用 $GLOBALS 替代 global
            $url=$this->url.'token';
            //$url=$base_url.'token';
            $tokenResult = $this->postCurl($url,$body,$header=array());
            //var_dump($tokenResult['expires_in']);
            //return $tokenResult;
            return "Authorization:Bearer ".$tokenResult['access_token'];
    
        }
        /**
          授权注册
        */
        function createUser($username,$password){
            $url=$this->url.'users';
            $options=array(
                "username"=>$username,
                "password"=>$password
            );
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            批量注册用户
        */
        function createUsers($options){
            $url=$this->url.'users';
    
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            重置用户密码
        */
        function resetPassword($username,$newpassword){
            $url=$this->url.'users/'.$username.'/password';
            $options=array(
                "newpassword"=>$newpassword
            );
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,"PUT");
            return $result;
        }
    
        /*
            获取单个用户
        */
        function getUser($username){
            $url=$this->url.'users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            return $result;
        }
        /*
            获取批量用户----不分页
        */
        function getUsers($limit=0){
            if(!empty($limit)){
                $url=$this->url.'users?limit='.$limit;
            }else{
                $url=$this->url.'users';
            }
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            return $result;
        }
        /*
            获取批量用户---分页
        */
        function getUsersForPage($limit=0,$cursor=''){
            $url=$this->url.'users?limit='.$limit.'&cursor='.$cursor;
    
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            if(!empty($result["cursor"])){
                $cursor=$result["cursor"];
                $this->writeCursor("userfile.txt",$cursor);
            }
            //var_dump($GLOBALS['cursor'].'00000000000000');
            return $result;
        }
    
        //创建文件夹
        function mkdirs($dir, $mode = 0777)
         {
             if (is_dir($dir) || @mkdir($dir, $mode)) return TRUE;
             if (!mkdirs(dirname($dir), $mode)) return FALSE;
             return @mkdir($dir, $mode);
         } 
         //写入cursor
        function writeCursor($filename,$content){
            //判断文件夹是否存在,不存在的话创建
            if(!file_exists("resource/txtfile")){
                mkdirs("resource/txtfile");
            }
            $myfile=@fopen("resource/txtfile/".$filename,"w+") or die("Unable to open file!");
            @fwrite($myfile,$content);
            fclose($myfile);    
        }
         //读取cursor
        function readCursor($filename){
            //判断文件夹是否存在,不存在的话创建
            if(!file_exists("resource/txtfile")){
                mkdirs("resource/txtfile");
            }
            $file="resource/txtfile/".$filename;
            $fp=fopen($file,"a+");//这里这设置成a+
            if($fp){
                while(!feof($fp)){
                    //第二个参数为读取的长度
                    $data=fread($fp,1000);  
                }   
                fclose($fp);
            }    
            return $data;   
        }
        /*
            删除单个用户
        */
        function deleteUser($username){
            $url=$this->url.'users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            删除批量用户
            limit:建议在100-500之间,、
            注:具体删除哪些并没有指定, 可以在返回值中查看。
        */
        function deleteUsers($limit){
            $url=$this->url.'users?limit='.$limit;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
    
        }
        /*
            修改用户昵称
        */
        function editNickname($username,$nickname){
            $url=$this->url.'users/'.$username;
            $options=array(
                "nickname"=>$nickname
            );
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'PUT');
            return $result;
        }
        /*
            添加好友-
        */
        function addFriend($username,$friend_name){
            $url=$this->url.'users/'.$username.'/contacts/users/'.$friend_name;
            $header=array($this->getToken(),'Content-Type:application/json');
            $result=$this->postCurl($url,'',$header,'POST');
            return $result; 
    
        }
    
        /*
            删除好友
        */
        function deleteFriend($username,$friend_name){
            $url=$this->url.'users/'.$username.'/contacts/users/'.$friend_name;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result; 
    
        }
        /*
            查看好友
        */
        function showFriends($username){
            $url=$this->url.'users/'.$username.'/contacts/users';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result; 
        }
        /*
            查看用户黑名单
        */
        function getBlacklist($username){
            $url=$this->url.'users/'.$username.'/blocks/users';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
    
        }
        /*
            往黑名单中加人
        */
        function addUserForBlacklist($username,$usernames){
            $url=$this->url.'users/'.$username.'/blocks/users';
            $body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'POST');
            return $result; 
    
        }
        /*
            从黑名单中减人
        */
        function deleteUserFromBlacklist($username,$blocked_name){
            $url=$this->url.'users/'.$username.'/blocks/users/'.$blocked_name;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result; 
    
        }
         /*
            查看用户是否在线
         */
        function isOnline($username){
            $url=$this->url.'users/'.$username.'/status';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result; 
    
        }
        /*
            查看用户离线消息数
        */
        function getOfflineMessages($username){
            $url=$this->url.'users/'.$username.'/offline_msg_count';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result; 
    
        }
        /*
            查看某条消息的离线状态
            ----deliverd 表示此用户的该条离线消息已经收到
        */
        function getOfflineMessageStatus($username,$msg_id){
            $url=$this->url.'users/'.$username.'/offline_msg_status/'.$msg_id;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result; 
    
        }
        /*
            禁用用户账号
        */ 
        function deactiveUser($username){
            $url=$this->url.'users/'.$username.'/deactivate';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header);
            return $result;
        }
        /*
            解禁用户账号
        */ 
        function activeUser($username){
            $url=$this->url.'users/'.$username.'/activate';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header);
            return $result;
        } 
    
        /*
            强制用户下线
        */ 
        function disconnectUser($username){
            $url=$this->url.'users/'.$username.'/disconnect';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        //--------------------------------------------------------上传下载
        /*
            上传图片或文件
        */
        function uploadFile($filePath){
            $url=$this->url.'chatfiles';
            $file=file_get_contents($filePath);
            $body['file']=$file;
            $header=array('enctype:multipart/form-data',$this->getToken(),"restrict-access:true");
            $result=$this->postCurl($url,$body,$header,'XXX');
            return $result;
    
        }
        /*
            下载文件或图片
        */
        function downloadFile($uuid,$shareSecret){
            $url=$this->url.'chatfiles/'.$uuid;
            $header = array("share-secret:".$shareSecret,"Accept:application/octet-stream",$this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            $filename = md5(time().mt_rand(10, 99)).".png"; //新图片名称
            if(!file_exists("resource/down")){
                //mkdir("../image/down");
                mkdirs("resource/down/");
            }
    
            $file = @fopen("resource/down/".$filename,"w+");//打开文件准备写入
            @fwrite($file,$result);//写入
            fclose($file);//关闭
            return $filename;
    
        }
        /*
            下载图片缩略图
        */
        function downloadThumbnail($uuid,$shareSecret){
            $url=$this->url.'chatfiles/'.$uuid;
            $header = array("share-secret:".$shareSecret,"Accept:application/octet-stream",$this->getToken(),"thumbnail:true");
            $result=$this->postCurl($url,'',$header,'GET');
            $filename = md5(time().mt_rand(10, 99))."th.png"; //新图片名称
            if(!file_exists("resource/down")){
                //mkdir("../image/down");
                mkdirs("resource/down/");
            }
    
            $file = @fopen("resource/down/".$filename,"w+");//打开文件准备写入
            @fwrite($file,$result);//写入
            fclose($file);//关闭
            return $filename;
        }
        //-------------------------------------------------------------直播间操作
        /*
            设置直播流地址
        */
        function set_tream_url($pc_pull,$mobile_push,$mobile_pull,$pc_push){
            $url=$this->url.'liverooms/stream_url';
            $options=array(
                 "pc_pull"=>$pc_pull,
                 "pc_push"=>$pc_push,
                 "mobile_push"=>$mobile_push,
                 "mobile_pull"=>$mobile_pull,
             );
            $b=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
    
        /*
            获取某端直播流地址
        */
         function getpull($types){
             $url=$this->url.'liverooms/stream_url?type='.$types;
             $header=array($this->getToken());
             $result=$this->postCurl($url,'',$header,"GET");
             return $result;
         }
    
        /*
            给用户赋予主播身份
        */
        function addsuperadmin($admin){
             $url=$this->url.'chatrooms/super_admin';
             $options=array(
                 "superadmin"=>$admin
             );
             $body=json_encode($options);
             $header=array($this->getToken());
             $result=$this->postCurl($url,$body,$header);
             return $result;
         }
    
         /*
            创建直播聊天室
        */
        function addliveroom($liveroom_name,$desc,$superadmin){
             $url=$this->url.'chatdemoui/liverooms';
             $options=array(
                 "title"=>$liveroom_name,
                 "desc"=>$desc,
                 "anchor"=>$superadmin,
             );
             $body=json_encode($options);
             $header=array($this->getToken());
             $result=$this->postCurl($url,$body,$header);
             return $result;
         }
    
        //--------------------------------------------------------发送消息
        /*
            发送文本消息
        */
        function sendText($from="admin",$target_type,$target,$content,$ext){
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="txt";
            $options['msg']=$content;
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
        /*
            发送透传消息
        */
        function sendCmd($from="admin",$target_type,$target,$action,$ext){
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="cmd";
            $options['action']=$action;
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());   
            //$b=json_encode($body,true);
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
        /*
            发图片消息
        */ 
        function sendImage($filePath,$from="admin",$target_type,$target,$filename,$ext){
            $result=$this->uploadFile($filePath);
            $uri=$result['uri'];
            $uuid=$result['entities'][0]['uuid'];
            $shareSecret=$result['entities'][0]['share-secret'];
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="img";
            $options['url']=$uri.'/'.$uuid;
            $options['filename']=$filename;
            $options['secret']=$shareSecret;
            $options['size']=array(
                "width"=>480,
                "height"=>720
            );
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());   
            //$b=json_encode($body,true);
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
        /*
            发语音消息
        */
        function sendAudio($filePath,$from="admin",$target_type,$target,$filename,$length,$ext){
            $result=$this->uploadFile($filePath);
            $uri=$result['uri'];
            $uuid=$result['entities'][0]['uuid'];
            $shareSecret=$result['entities'][0]['share-secret'];
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="audio";
            $options['url']=$uri.'/'.$uuid;
            $options['filename']=$filename;
            $options['length']=$length;
            $options['secret']=$shareSecret;
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());   
            //$b=json_encode($body,true);
            $result=$this->postCurl($url,$b,$header);
            return $result;}
        /*
            发视频消息
        */
        function sendVedio($filePath,$from="admin",$target_type,$target,$filename,$length,$thumb,$thumb_secret,$ext){
        $result=$this->uploadFile($filePath);
            $uri=$result['uri'];
            $uuid=$result['entities'][0]['uuid'];
            $shareSecret=$result['entities'][0]['share-secret'];
            $url=$this->url.'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="video";
            $options['url']=$uri.'/'.$uuid;
            $options['filename']=$filename;
            $options['thumb']=$thumb;
            $options['length']=$length;
            $options['secret']=$shareSecret;
            $options['thumb_secret']=$thumb_secret;
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array($this->getToken());   
            //$b=json_encode($body,true);
            $result=$this->postCurl($url,$b,$header);
            return $result;
        }
        /*
        发文件消息
        */
        function sendFile($filePath,$from="admin",$target_type,$target,$filename,$length,$ext){
            $result=$this->uploadFile($filePath);
            $uri=$result['uri'];
            $uuid=$result['entities'][0]['uuid'];
            $shareSecret=$result['entities'][0]['share-secret'];
            $url=$GLOBALS['base_url'].'messages';
            $body['target_type']=$target_type;
            $body['target']=$target;
            $options['type']="file";
            $options['url']=$uri.'/'.$uuid;
            $options['filename']=$filename;
            $options['length']=$length;
            $options['secret']=$shareSecret;
            $body['msg']=$options;
            $body['from']=$from;
            $body['ext']=$ext;
            $b=json_encode($body);
            $header=array(getToken());  
            //$b=json_encode($body,true);
            $result=postCurl($url,$b,$header);
            return $result;
        }
        //-------------------------------------------------------------群组操作
    
        /*
            获取app中的所有群组----不分页
        */
        function getGroups($limit=0){
            if(!empty($limit)){
                $url=$this->url.'chatgroups?limit='.$limit;
            }else{
                $url=$this->url.'chatgroups';
            }
    
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            return $result;
        }
        /*
            获取app中的所有群组---分页
        */
        function getGroupsForPage($limit=0,$cursor=''){
            $url=$this->url.'chatgroups?limit='.$limit.'&cursor='.$cursor;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
    
            if(!empty($result["cursor"])){
                $cursor=$result["cursor"];
                $this->writeCursor("groupfile.txt",$cursor);
            }
            //var_dump($GLOBALS['cursor'].'00000000000000');
            return $result;
        }
        /*
            获取一个或多个群组的详情
        */
        function getGroupDetail($group_ids){
            $g_ids=implode(',',$group_ids);
            $url=$this->url.'chatgroups/'.$g_ids;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        /*
            创建一个群组
        */
        function createGroup($options){
            $url=$this->url.'chatgroups';
            $header=array($this->getToken());
            $body=json_encode($options);
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            修改群组信息
        */
        function modifyGroupInfo($group_id,$options){
            $url=$this->url.'chatgroups/'.$group_id;
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'PUT');
            return $result; 
        }
        /*
            删除群组
        */
        function deleteGroup($group_id){
            $url=$this->url.'chatgroups/'.$group_id;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            获取群组中的成员
        */
        function getGroupUsers($group_id){
            $url=$this->url.'chatgroups/'.$group_id.'/users';   
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        /*
            群组单个加人
        */
        function addGroupMember($group_id,$username){
            $url=$this->url.'chatgroups/'.$group_id.'/users/'.$username;
            $header=array($this->getToken(),'Content-Type:application/json');
            $result=$this->postCurl($url,'',$header);
            return $result;
        }
        /*
            群组批量加人
        */
        function addGroupMembers($group_id,$usernames){
            $url=$this->url.'chatgroups/'.$group_id.'/users';
            $body=json_encode($usernames);
            $header=array($this->getToken(),'Content-Type:application/json');
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            群组单个减人
        */
        function deleteGroupMember($group_id,$username){
            $url=$this->url.'chatgroups/'.$group_id.'/users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            群组批量减人
        */
        function deleteGroupMembers($group_id,$usernames){
            $url=$this->url.'chatgroups/'.$group_id.'/users/'.$usernames;
            //$body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            获取一个用户参与的所有群组
        */
        function getGroupsForUser($username){
            $url=$this->url.'users/'.$username.'/joined_chatgroups';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        /*
            群组转让
        */
        function changeGroupOwner($group_id,$options){
            $url=$this->url.'chatgroups/'.$group_id;
            $body=json_encode($options);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'PUT');
            return $result;
        }
        /*
            查询一个群组黑名单用户名列表
        */
        function getGroupBlackList($group_id){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        /*
            群组黑名单单个加人
        */
        function addGroupBlackMember($group_id,$username){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header);
            return $result;
        }
        /*
            群组黑名单批量加人
        */
        function addGroupBlackMembers($group_id,$usernames){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users';
            $body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            群组黑名单单个减人
        */
        function deleteGroupBlackMember($group_id,$username){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            群组黑名单批量减人
        */
        function deleteGroupBlackMembers($group_id,$usernames){
            $url=$this->url.'chatgroups/'.$group_id.'/blocks/users';
            $body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header,'DELETE');
            return $result;
        }
        //-------------------------------------------------------------聊天室操作
        /*
            创建聊天室
        */
        function createChatRoom($options){
            $url=$this->url.'chatrooms';
            $header=array($this->getToken());
            $body=json_encode($options);
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            修改聊天室信息
        */
        function modifyChatRoom($chatroom_id,$options){
            $url=$this->url.'chatrooms/'.$chatroom_id;
            $body=json_encode($options);
            $result=$this->postCurl($url,$body,$header,'PUT');
            return $result; 
        }
        /*
            删除聊天室
        */
        function deleteChatRoom($chatroom_id){
            $url=$this->url.'chatrooms/'.$chatroom_id;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            获取app中所有的聊天室
        */
        function getChatRooms(){
            $url=$this->url.'chatrooms';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            return $result;
        }
    
        /*
            获取一个聊天室的详情
        */
        function getChatRoomDetail($chatroom_id){
            $url=$this->url.'chatrooms/'.$chatroom_id;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        /*
            获取一个用户加入的所有聊天室
        */
        function getChatRoomJoined($username){
            $url=$this->url.'users/'.$username.'/joined_chatrooms';
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'GET');
            return $result;
        }
        /*
            聊天室单个成员添加
        */
        function addChatRoomMember($chatroom_id,$username){
            $url=$this->url.'chatrooms/'.$chatroom_id.'/users/'.$username;
            //$header=array($this->getToken());
            $header=array($this->getToken(),'Content-Type:application/json');
            $result=$this->postCurl($url,'',$header);
            return $result;
        }
        /*
            聊天室批量成员添加
        */
        function addChatRoomMembers($chatroom_id,$usernames){
            $url=$this->url.'chatrooms/'.$chatroom_id.'/users';
            $body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,$body,$header);
            return $result;
        }
        /*
            聊天室单个成员删除
        */
        function deleteChatRoomMember($chatroom_id,$username){
            $url=$this->url.'chatrooms/'.$chatroom_id.'/users/'.$username;
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        /*
            聊天室批量成员删除
        */
        function deleteChatRoomMembers($chatroom_id,$usernames){
            $url=$this->url.'chatrooms/'.$chatroom_id.'/users/'.$usernames;
            //$body=json_encode($usernames);
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,'DELETE');
            return $result;
        }
        //-------------------------------------------------------------聊天记录
    
        /*
            导出聊天记录----不分页
        */
        function getChatRecord($ql){
            if(!empty($ql)){
                $url=$this->url.'chatmessages?ql='.$ql;
            }else{
                $url=$this->url.'chatmessages';
            }
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            return $result;
        }
        /*
            导出聊天记录---分页
        */
        function getChatRecordForPage($ql,$limit=0,$cursor){
            if(!empty($ql)){
                $url=$this->url.'chatmessages?ql='.$ql.'&limit='.$limit.'&cursor='.$cursor;
            }
            $header=array($this->getToken());
            $result=$this->postCurl($url,'',$header,"GET");
            $cursor=$result["cursor"];
            $this->writeCursor("chatfile.txt",$cursor);
            //var_dump($GLOBALS['cursor'].'00000000000000');
            return $result;
        }
    
        /**
         *$this->postCurl方法
         */
        function postCurl($url,$body,$header,$type="POST"){
            //1.创建一个curl资源
            $ch = curl_init();
            //2.设置URL和相应的选项
            curl_setopt($ch,CURLOPT_URL,$url);//设置url
            //1)设置请求头
            //array_push($header, 'Accept:application/json');
            //array_push($header,'Content-Type:application/json');
            //array_push($header, 'http:multipart/form-data');
            //设置为false,只会获得响应的正文(true的话会连响应头一并获取到)
            curl_setopt($ch,CURLOPT_HEADER,0);
            curl_setopt ( $ch, CURLOPT_TIMEOUT,5); // 设置超时限制防止死循环
            //设置发起连接前的等待时间,如果设置为0,则无限等待。
            curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,5);
            //将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            //2)设备请求体
            if (count($body)>0) {
                //$b=json_encode($body,true);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $body);//全部数据使用HTTP协议中的"POST"操作来发送。
            }
            //设置请求头
            if(count($header)>0){
                curl_setopt($ch,CURLOPT_HTTPHEADER,$header);
            }
            //上传文件相关设置
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 对认证证书来源的检查
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);// 从证书中检查SSL加密算
    
            //3)设置提交方式
            switch($type){
                case "GET":
                    curl_setopt($ch,CURLOPT_HTTPGET,true);
                    break;
                case "POST":
                    curl_setopt($ch,CURLOPT_POST,true);
                    break;
                case "PUT"://使用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请                                                      求。这对于执行"DELETE" 或者其他更隐蔽的HTT
                    curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"PUT");
                    break;
                case "DELETE":
                    curl_setopt($ch,CURLOPT_CUSTOMREQUEST,"DELETE");
                    break;
            }
    
            //4)在HTTP请求中包含一个"User-Agent: "头的字符串。-----必设
    
            curl_setopt($ch, CURLOPT_USERAGENT, 'SSTS Browser/1.0');
            curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
    
            curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)' ); // 模拟用户使用的浏览器
            //5)
    
            //3.抓取URL并把它传递给浏览器
            $res=curl_exec($ch);
    
            $result=json_decode($res,true);
            //4.关闭curl资源,并且释放系统资源
            curl_close($ch);
            if(empty($result))
                return $res;
            else
                return $result;
    
        }
    }

    将这个 class 保存到项目路径中,在 controller 中 use 引入
    For example :

    
    public function registerImuser($username,$password,$nickname){
            $e = new Easemob();
            $result_u = $e->createUser($username,$password);
            $result_n = $e->editNickname($username,$nickname);
            return $result_n;
        }

    使用:

    $this->registerImuser($post_name,$post_password,$post_nickname);

    注意创建直播的流程 给用户添加主播身份 , 设置直播流 , 创建直播间(创建直播间的同时环信会自动为我们创建直播间对应的聊天室)
    Thinks!

    转载:https://learnku.com/articles/6721/ring-messenger-instant-messaging-integrated-client

  • 相关阅读:
    TLS1.3&TLS1.2形式化分析(二)
    浏览器代理设置和取消代理
    jdk在window系统中的配置
    pycharm2017.3版本永久激活
    Scyther 形式化分析工具资料整理(三)
    百度快照的检索和反馈删除
    Scyther-Semantics and verification of Security Protocol 翻译 (第二章 2.2.2----2.3)
    双一流学校名单
    Scyther tools 协议形式化分析帮助文档翻译
    全国书画艺术之乡-----通渭
  • 原文地址:https://www.cnblogs.com/lxwphp/p/10863718.html
Copyright © 2011-2022 走看看