網易雲信 SDK

<?php
namespace yunxin;
/**

  • 網易雲信server API 接口 2.0
  • Class ServerAPI
  • @author [email protected]
  • @created date 2015-10-27 16:30
  • @modified date 2016-06-15 19:30
  • 添加直播相關示例接口
  • ***/

class ServerAPI{
private $AppKey; //開發者平臺分配的AppKey
private $AppSecret; //開發者平臺分配的AppSecret,可刷新
private $Nonce; //隨機數(最大長度128個字符)
private $CurTime; //當前UTC時間戳,從1970年1月1日0點0 分0 秒開始到現在的秒數(String)
private $CheckSum; //SHA1(AppSecret + Nonce + CurTime),三個參數拼接的字符串,進行SHA1哈希計算,轉化成16進制字符(String,小寫)
const HEX_DIGITS = "0123456789abcdef";

/**
 * 參數初始化
 * @param $AppKey
 * @param $AppSecret
 * @param $RequestType [選擇php請求方式,fsockopen或curl,若爲curl方式,請檢查php配置是否開啓]
 */
public function __construct(){
    $this->AppKey    = "3c033041a57d967c704939c0f738d20c";
    $this->AppSecret = "b4a195302963";
    $this->RequestType = "curl";
}

/**
 * API checksum校驗生成
 * @param  void
 * @return $CheckSum(對象私有屬性)
 */
public function checkSumBuilder(){
    //此部分生成隨機字符串
    $hex_digits = self::HEX_DIGITS;
    $this->Nonce;
    for($i=0;$i<128;$i++){          //隨機字符串最大128個字符,也可以小於該數
        $this->Nonce.= $hex_digits[rand(0,15)];
    }
    $this->CurTime = (string)(time());  //當前時間戳,以秒爲單位

    $join_string = $this->AppSecret.$this->Nonce.$this->CurTime;
    $this->CheckSum = sha1($join_string);
    //print_r($this->CheckSum);
}

/**
 * 將json字符串轉化成php數組
 * @param  $json_str
 * @return $json_arr
 */
public function json_to_array($json_str){
    // version 1.6 code ...
    // if(is_null(json_decode($json_str))){
    //     $json_str = $json_str;
    // }else{
    //     $json_str = json_decode($json_str);
    // }
    // $json_arr=array();
    // //print_r($json_str);
    // foreach($json_str as $k=>$w){
    //     if(is_object($w)){               
    //         $json_arr[$k]= $this->json_to_array($w); //判斷類型是不是object
    //     }else if(is_array($w)){
    //         $json_arr[$k]= $this->json_to_array($w);
    //     }else{
    //         $json_arr[$k]= $w;
    //     }
    // }
    // return $json_arr;

    if(is_array($json_str) || is_object($json_str)){
        $json_str = $json_str;
    }else if(is_null(json_decode($json_str))){
        $json_str = $json_str;
    }else{
        $json_str =  strval($json_str);
        $json_str = json_decode($json_str,true);
    }
    $json_arr=array();
    foreach($json_str as $k=>$w){
        if(is_object($w)){               
            $json_arr[$k]= $this->json_to_array($w); //判斷類型是不是object
        }else if(is_array($w)){
            $json_arr[$k]= $this->json_to_array($w);
        }else{
            $json_arr[$k]= $w;
        }
    }
    return $json_arr;
}

/**
 * 使用CURL方式發送post請求
 * @param  $url     [請求地址]
 * @param  $data    [array格式數據]
 * @return $請求返回結果(array)
 */
public function postDataCurl($url,$data){
    $this->checkSumBuilder();       //發送請求前需先生成checkSum

    $timeout = 5000;  
    $http_header = array(
        'AppKey:'.$this->AppKey,
        'Nonce:'.$this->Nonce,
        'CurTime:'.$this->CurTime,
        'CheckSum:'.$this->CheckSum,
        'Content-Type:application/x-www-form-urlencoded;charset=utf-8'
    );
    //print_r($http_header);

    // $postdata = '';
    $postdataArray = array();
    foreach ($data as $key=>$value){
        array_push($postdataArray, $key.'='.urlencode($value));
        // $postdata.= ($key.'='.urlencode($value).'&');
    }
    $postdata = join('&', $postdataArray);

    $ch = curl_init(); 
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt ($ch, CURLOPT_HEADER, false ); 
    curl_setopt ($ch, CURLOPT_HTTPHEADER,$http_header);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,false); //處理http證書問題  
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($ch);  
    if (false === $result) {
        $result =  curl_errno($ch);
    }
    curl_close($ch);    
    return $this->json_to_array($result) ;
}

/**
 * 使用FSOCKOPEN方式發送post請求
 * @param  $url     [請求地址]
 * @param  $data    [array格式數據]
 * @return $請求返回結果(array)
 */
public function postDataFsockopen($url,$data){
    $this->checkSumBuilder();       //發送請求前需先生成checkSum

    // $postdata = '';
    $postdataArray = array();
    foreach ($data as $key=>$value){
        array_push($postdataArray, $key.'='.urlencode($value));
        // $postdata.= ($key.'='.urlencode($value).'&');
    }
    $postdata = join('&', $postdataArray);
    // building POST-request: 
    $URL_Info=parse_url($url);
    if(!isset($URL_Info["port"])){  
        $URL_Info["port"]=80;  
    }  
    $request = ''; 
    $request.="POST ".$URL_Info["path"]." HTTP/1.1\r\n";  
    $request.="Host:".$URL_Info["host"]."\r\n";   
    $request.="Content-type: application/x-www-form-urlencoded;charset=utf-8\r\n";  
    $request.="Content-length: ".strlen($postdata)."\r\n";  
    $request.="Connection: close\r\n"; 
    $request.="AppKey: ".$this->AppKey."\r\n"; 
    $request.="Nonce: ".$this->Nonce."\r\n"; 
    $request.="CurTime: ".$this->CurTime."\r\n"; 
    $request.="CheckSum: ".$this->CheckSum."\r\n";  
    $request.="\r\n";  
    $request.=$postdata."\r\n";
    // print_r($request);
    $fp = fsockopen($URL_Info["host"],$URL_Info["port"]);  
    fputs($fp, $request); 
    $result = '';
    while(!feof($fp)) { 
        $result .= fgets($fp, 128);   
    }  
    fclose($fp);

    $str_s = strpos($result,'{');   
    $str_e = strrpos($result,'}'); 
    $str = substr($result, $str_s,$str_e-$str_s+1);
    return $this->json_to_array($str);
}

/**
 * 使用CURL方式發送post請求(JSON類型)
 * @param  $url     [請求地址]
 * @param  $data    [array格式數據]
 * @return $請求返回結果(array)
 */
public function postJsonDataCurl($url,$data){
    $this->checkSumBuilder();       //發送請求前需先生成checkSum

    $timeout = 5000;  
    $http_header = array(
        'AppKey:'.$this->AppKey,
        'Nonce:'.$this->Nonce,
        'CurTime:'.$this->CurTime,
        'CheckSum:'.$this->CheckSum,
        'Content-Type:application/json;charset=utf-8'
    );
    //print_r($http_header);

    $postdata = json_encode($data);

    $ch = curl_init(); 
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_POST, 1);
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata);
    curl_setopt ($ch, CURLOPT_HEADER, false ); 
    curl_setopt ($ch, CURLOPT_HTTPHEADER,$http_header);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER,false); //處理http證書問題  
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

    $result = curl_exec($ch);  
    if (false === $result) {
        $result =  curl_errno($ch);
    }
    curl_close($ch);    
    return $this->json_to_array($result) ;
}

/**
 * 使用FSOCKOPEN方式發送post請求(json)
 * @param  $url     [請求地址]
 * @param  $data    [array格式數據]
 * @return $請求返回結果(array)
 */
public function postJsonDataFsockopen($url, $data){
    $this->checkSumBuilder();       //發送請求前需先生成checkSum

    $postdata = json_encode($data);

    // building POST-request: 
    $URL_Info=parse_url($url);
    if(!isset($URL_Info["port"])){  
        $URL_Info["port"]=80;  
    }  
    $request = ''; 
    $request.="POST ".$URL_Info["path"]." HTTP/1.1\r\n";  
    $request.="Host:".$URL_Info["host"]."\r\n";   
    $request.="Content-type: application/json;charset=utf-8\r\n";  
    $request.="Content-length: ".strlen($postdata)."\r\n";  
    $request.="Connection: close\r\n"; 
    $request.="AppKey: ".$this->AppKey."\r\n"; 
    $request.="Nonce: ".$this->Nonce."\r\n"; 
    $request.="CurTime: ".$this->CurTime."\r\n"; 
    $request.="CheckSum: ".$this->CheckSum."\r\n";  
    $request.="\r\n";  
    $request.=$postdata."\r\n";  

    print_r($request);
    $fp = fsockopen($URL_Info["host"],$URL_Info["port"]);  
    fputs($fp, $request); 
    $result = '';
    while(!feof($fp)) { 
        $result .= fgets($fp, 128);   
    }  
    fclose($fp);

    $str_s = strpos($result,'{');   
    $str_e = strrpos($result,'}'); 
    $str = substr($result, $str_s,$str_e-$str_s+1);
    return $this->json_to_array($str);
}

/**
 * 創建雲信ID
 * 1.第三方帳號導入到雲信平臺;
 * 2.注意accid,name長度以及考慮管理祕鑰token
 * @param  $accid     [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @param  $name      [雲信ID暱稱,最大長度64字節,用來PUSH推送時顯示的暱稱]
 * @param  $props     [json屬性,第三方可選填,最大長度1024字節]
 * @param  $icon      [雲信ID頭像URL,第三方可選填,最大長度1024]
 * @param  $token     [雲信ID可以指定登錄token值,最大長度128字節,並更新,如果未指定,會自動生成token,並在創建成功後返回]
 * @return $result    [返回array數組對象]
 */
public function createUserId($accid,$name='',$props='{}',$icon='',$token=''){
    $url = 'https://api.netease.im/nimserver/user/create.action';
    $data= array(
        'accid' => $accid,
        'name'  => $name,
        'props' => $props,
        'icon'  => $icon,
        'token' => $token
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 更新雲信ID
 * @param  $accid     [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @param  $name      [雲信ID暱稱,最大長度64字節,用來PUSH推送時顯示的暱稱]
 * @param  $props     [json屬性,第三方可選填,最大長度1024字節]
 * @param  $token     [雲信ID可以指定登錄token值,最大長度128字節,並更新,如果未指定,會自動生成token,並在創建成功後返回]
 * @return $result    [返回array數組對象]
 */
public function updateUserId($accid,$name='',$icon='',$props='{}',$token=''){
    $url = 'https://api.netease.im/nimserver/user/update.action';
    $data= array(
        'accid' => $accid,
        'name'  => $name,
        'icon'  => $icon,
        'props' => $props,
        'token' => $token
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 更新並獲取新token
 * @param  $accid     [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @return $result    [返回array數組對象]
 */
public function updateUserToken($accid){
    $url = 'https://api.netease.im/nimserver/user/refreshToken.action';
    $data= array(
        'accid' => $accid
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 封禁雲信ID
 * 第三方禁用某個雲信ID的IM功能,封禁雲信ID後,此ID將不能登陸雲信imserver
 * @param  $accid     [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @return $result    [返回array數組對象]
 */
public function blockUserId($accid){
    $url = 'https://api.netease.im/nimserver/user/block.action';
    $data= array(
        'accid' => $accid
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 解禁雲信ID
 * 第三方禁用某個雲信ID的IM功能,封禁雲信ID後,此ID將不能登陸雲信imserver
 * @param  $accid     [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @return $result    [返回array數組對象]
 */
public function unblockUserId($accid){
    $url = 'https://api.netease.im/nimserver/user/unblock.action';
    $data= array(
        'accid' => $accid
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 更新用戶名片
 * @param  $accid       [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @param  $name        [雲信ID暱稱,最大長度64字節,用來PUSH推送時顯示的暱稱]
 * @param  $icon        [用戶icon,最大長度256字節]
 * @param  $sign        [用戶簽名,最大長度256字節]
 * @param  $email       [用戶email,最大長度64字節]
 * @param  $birth       [用戶生日,最大長度16字節]
 * @param  $mobile      [用戶mobile,最大長度32字節]
 * @param  $ex          [用戶名片擴展字段,最大長度1024字節,用戶可自行擴展,建議封裝成JSON字符串]
 * @param  $gender      [用戶性別,0表示未知,1表示男,2女表示女,其它會報參數錯誤]
 * @return $result      [返回array數組對象]
 */
public function updateUinfo($accid,$name='',$icon='',$sign='',$email='',$birth='',$mobile='',$gender='0',$ex=''){
    $url = 'https://api.netease.im/nimserver/user/updateUinfo.action';
    $data= array(
        'accid' => $accid,
        'name' => $name,
        'icon' => $icon,
        'sign' => $sign,
        'email' => $email,
        'birth' => $birth,
        'mobile' => $mobile,
        'gender' => $gender,
        'ex' => $ex
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 獲取用戶名片,可批量
 * @param  $accids    [用戶帳號(例如:JSONArray對應的accid串,如:"zhangsan",如果解析出錯,會報414)(一次查詢最多爲200)]
 * @return $result    [返回array數組對象]
 */
public function getUinfos($accids){
    $url = 'https://api.netease.im/nimserver/user/getUinfos.action';
    $data= array(
        'accids' => json_encode($accids)
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 好友關係-加好友
 * @param  $accid       [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @param  $faccid        [雲信ID暱稱,最大長度64字節,用來PUSH推送時顯示的暱稱]
 * @param  $type        [用戶type,最大長度256字節]
 * @param  $msg        [用戶簽名,最大長度256字節]
 * @return $result      [返回array數組對象]
 */
public function addFriend($accid,$faccid,$type='1',$msg=''){
    $url = 'https://api.netease.im/nimserver/friend/add.action';
    $data= array(
        'accid' => $accid,
        'faccid' => $faccid,
        'type' => $type,
        'msg' => $msg
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 好友關係-更新好友信息
 * @param  $accid       [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @param  $faccid        [要修改朋友的accid]
 * @param  $alias        [給好友增加備註名]
 * @return $result      [返回array數組對象]
 */
public function updateFriend($accid,$faccid,$alias){
    $url = 'https://api.netease.im/nimserver/friend/update.action';
    $data= array(
        'accid' => $accid,
        'faccid' => $faccid,
        'alias' => $alias
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 好友關係-獲取好友關係
 * @param  $accid       [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @return $result      [返回array數組對象]
 */
public function getFriend($accid){
    $url = 'https://api.netease.im/nimserver/friend/get.action';
    $data= array(
        'accid' => $accid,
        'createtime' => (string)(time()*1000)
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 好友關係-刪除好友信息
 * @param  $accid       [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @param  $faccid        [要修改朋友的accid]
 * @return $result      [返回array數組對象]
 */
public function deleteFriend($accid,$faccid){
    $url = 'https://api.netease.im/nimserver/friend/delete.action';
    $data= array(
        'accid' => $accid,
        'faccid' => $faccid
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 好友關係-設置黑名單
 * @param  $accid       [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @param  $targetAcc        [被加黑或加靜音的帳號]
 * @param  $relationType        [本次操作的關係類型,1:黑名單操作,2:靜音列表操作]
 * @param  $value        [操作值,0:取消黑名單或靜音;1:加入黑名單或靜音]
 * @return $result      [返回array數組對象]
 */
public function specializeFriend($accid,$targetAcc,$relationType='1',$value='1'){
    $url = 'https://api.netease.im/nimserver/user/setSpecialRelation.action';
    $data= array(
        'accid' => $accid,
        'targetAcc' => $targetAcc,
        'relationType' => $relationType,
        'value' => $value
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 好友關係-查看黑名單列表
 * @param  $accid       [雲信ID,最大長度32字節,必須保證一個APP內唯一(只允許字母、數字、半角下劃線_、@、半角點以及半角-組成,不區分大小寫,會統一小寫處理)]
 * @return $result      [返回array數組對象]
 */
public function listBlackFriend($accid){
    $url = 'https://api.netease.im/nimserver/user/listBlackAndMuteList.action';
    $data= array(
        'accid' => $accid
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 消息功能-發送普通消息
 * @param  $from       [發送者accid,用戶帳號,最大32字節,APP內唯一]
 * @param  $ope        [0:點對點個人消息,1:羣消息,其他返回414]
 * @param  $to        [ope==0是表示accid,ope==1表示tid]
 * @param  $type        [0 表示文本消息,1 表示圖片,2 表示語音,3 表示視頻,4 表示地理位置信息,6 表示文件,100 自定義消息類型]
 * @param  $body       [請參考下方消息示例說明中對應消息的body字段。最大長度5000字節,爲一個json字段。]
 * @param  $option       [發消息時特殊指定的行爲選項,Json格式,可用於指定消息的漫遊,存雲端歷史,發送方多端同步,推送,消息抄送等特殊行爲;option中字段不填時表示默認值]
 * @param  $pushcontent      [推送內容,發送消息(文本消息除外,type=0),option選項中允許推送(push=true),此字段可以指定推送內容。 最長200字節]
 * @return $result      [返回array數組對象]
 */
public function sendMsg($from,$ope,$to,$type,$body,$option=array("push"=>false,"roam"=>true,"history"=>false,"sendersync"=>true, "route"=>false),$pushcontent=''){
    $url = 'https://api.netease.im/nimserver/msg/sendMsg.action';
    $data= array(
        'from' => $from,
        'ope' => $ope,
        'to' => $to,
        'type' => $type,
        'body' => json_encode($body),
        'option' => json_encode($option),
        'pushcontent' => $pushcontent
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 消息功能-發送自定義系統消息
 * 1.自定義系統通知區別於普通消息,方便開發者進行業務邏輯的通知。
 * 2.目前支持兩種類型:點對點類型和羣類型(僅限高級羣),根據msgType有所區別。
 * @param  $from       [發送者accid,用戶帳號,最大32字節,APP內唯一]
 * @param  $msgtype        [0:點對點個人消息,1:羣消息,其他返回414]
 * @param  $to        [msgtype==0是表示accid,msgtype==1表示tid]
 * @param  $attach        [自定義通知內容,第三方組裝的字符串,建議是JSON串,最大長度1024字節]
 * @param  $pushcontent       [ios推送內容,第三方自己組裝的推送內容,如果此屬性爲空串,自定義通知將不會有推送(pushcontent + payload不能超過200字節)]
 * @param  $payload       [ios 推送對應的payload,必須是JSON(pushcontent + payload不能超過200字節)]
 * @param  $sound      [如果有指定推送,此屬性指定爲客戶端本地的聲音文件名,長度不要超過30個字節,如果不指定,會使用默認聲音]
 * @return $result      [返回array數組對象]
 */
public function sendAttachMsg($from,$msgtype,$to,$attach,$pushcontent='',$payload=array(),$sound=''){
    $url = 'https://api.netease.im/nimserver/msg/sendAttachMsg.action';
    $data= array(
        'from' => $from,
        'msgtype' => $msgtype,
        'to' => $to,
        'attach' => $attach,
        'pushcontent' => $pushcontent,
        'payload' => json_encode($payload),
        'sound' => $sound
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 消息功能-文件上傳
 * @param  $content       [字節流base64串(Base64.encode(bytes)) ,最大15M的字節流]
 * @param  $type        [上傳文件類型]       
 * @return $result      [返回array數組對象]
 */
public function uploadMsg($content,$type='0'){
    $url = 'https://api.netease.im/nimserver/msg/upload.action';
    $data= array(
        'content' => $content,
        'type' => $type
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 消息功能-文件上傳(multipart方式)
 * @param  $content       [字節流base64串(Base64.encode(bytes)) ,最大15M的字節流]
 * @param  $type        [上傳文件類型]       
 * @return $result      [返回array數組對象]
 */
public function uploadMultiMsg($content,$type='0'){
    $url = 'https://api.netease.im/nimserver/msg/fileUpload.action';
    $data= array(
        'content' => $content,
        'type' => $type
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-創建羣
 * @param  $tname       [羣名稱,最大長度64字節]
 * @param  $owner       [羣主用戶帳號,最大長度32字節]
 * @param  $members     [["aaa","bbb"](JsonArray對應的accid,如果解析出錯會報414),長度最大1024字節]
 * @param  $announcement [羣公告,最大長度1024字節]
 * @param  $intro       [羣描述,最大長度512字節]
 * @param  $msg       [邀請發送的文字,最大長度150字節]
 * @param  $magree      [管理後臺建羣時,0不需要被邀請人同意加入羣,1需要被邀請人同意纔可以加入羣。其它會返回414。]
 * @param  $joinmode    [羣建好後,sdk操作時,0不用驗證,1需要驗證,2不允許任何人加入。其它返回414]
 * @param  $custom      [自定義高級羣擴展屬性,第三方可以跟據此屬性自定義擴展自己的羣屬性。(建議爲json),最大長度1024字節.]
 * @return $result      [返回array數組對象]
 */
public function createGroup($tname,$owner,$members,$announcement='',$intro='',$msg='',$magree='0',$joinmode='0',$custom='0'){
    $url = 'https://api.netease.im/nimserver/team/create.action';
    $data= array(
        'tname' => $tname,
        'owner' => $owner,
        'members' => json_encode($members),
        'announcement' => $announcement,
        'intro' => $intro,
        'msg' => $msg,
        'magree' => $magree,
        'joinmode' => $joinmode,
        'custom' => $custom
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-拉人入羣
 * @param  $tid       [雲信服務器產生,羣唯一標識,創建羣時會返回,最大長度128字節]
 * @param  $owner       [羣主用戶帳號,最大長度32字節]
 * @param  $members     [["aaa","bbb"](JsonArray對應的accid,如果解析出錯會報414),長度最大1024字節]
 * @param  $magree      [管理後臺建羣時,0不需要被邀請人同意加入羣,1需要被邀請人同意纔可以加入羣。其它會返回414。]
 * @param  $joinmode    [羣建好後,sdk操作時,0不用驗證,1需要驗證,2不允許任何人加入。其它返回414]
 * @param  $custom      [自定義高級羣擴展屬性,第三方可以跟據此屬性自定義擴展自己的羣屬性。(建議爲json),最大長度1024字節.]
 * @return $result      [返回array數組對象]
 */
public function addIntoGroup($tid,$owner,$members,$magree='0',$msg='請您入夥'){
    $url = 'https://api.netease.im/nimserver/team/add.action';
    $data= array(
        'tid' => $tid,
        'owner' => $owner,
        'members' => json_encode($members),
        'magree' => $magree,
        'msg' => $msg
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-踢人出羣
 * @param  $tid       [雲信服務器產生,羣唯一標識,創建羣時會返回,最大長度128字節]
 * @param  $owner       [羣主用戶帳號,最大長度32字節]
 * @param  $member     [被移除人得accid,用戶賬號,最大長度字節]
 * @return $result      [返回array數組對象]
 */
public function kickFromGroup($tid,$owner,$member){
    $url = 'https://api.netease.im/nimserver/team/kick.action';
    $data= array(
        'tid' => $tid,
        'owner' => $owner,
        'member' => $member
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-解散羣
 * @param  $tid       [雲信服務器產生,羣唯一標識,創建羣時會返回,最大長度128字節]
 * @param  $owner       [羣主用戶帳號,最大長度32字節]
 * @return $result      [返回array數組對象]
 */
public function removeGroup($tid,$owner){
    $url = 'https://api.netease.im/nimserver/team/remove.action';
    $data= array(
        'tid' => $tid,
        'owner' => $owner
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-更新羣資料
 * @param  $tid       [雲信服務器產生,羣唯一標識,創建羣時會返回,最大長度128字節]
 * @param  $owner       [羣主用戶帳號,最大長度32字節]
 * @param  $tname     [羣主用戶帳號,最大長度32字節]
 * @param  $announcement [羣公告,最大長度1024字節]
 * @param  $intro       [羣描述,最大長度512字節]
 * @param  $joinmode    [羣建好後,sdk操作時,0不用驗證,1需要驗證,2不允許任何人加入。其它返回414]
 * @param  $custom      [自定義高級羣擴展屬性,第三方可以跟據此屬性自定義擴展自己的羣屬性。(建議爲json),最大長度1024字節.]
 * @return $result      [返回array數組對象]
 */
public function updateGroup($tid,$owner,$tname,$announcement='',$intro='',$joinmode='0',$custom=''){
    $url = 'https://api.netease.im/nimserver/team/update.action';
    $data= array(
        'tid' => $tid,
        'owner' => $owner,
        'tname' => $tname,
        'announcement' => $announcement,
        'intro' => $intro,
        'joinmode' => $joinmode,
        'custom' => $custom
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-羣信息與成員列表查詢
 * @param  $tids       [羣tid列表,如[\"3083\",\"3084"]]
 * @param  $ope       [1表示帶上羣成員列表,0表示不帶羣成員列表,只返回羣信息]
 * @return $result      [返回array數組對象]
 */
public function queryGroup($tids,$ope='1'){
    $url = 'https://api.netease.im/nimserver/team/query.action';
    $data= array(
        'tids' => json_encode($tids),
        'ope' => $ope
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-移交羣主
 * @param  $tid       [雲信服務器產生,羣唯一標識,創建羣時會返回,最大長度128字節]
 * @param  $owner       [羣主用戶帳號,最大長度32字節]
 * @param  $newowner     [新羣主帳號,最大長度32字節]
 * @param  $leave       [1:羣主解除羣主後離開羣,2:羣主解除羣主後成爲普通成員。其它414]
 * @return $result      [返回array數組對象]
 */
public function changeGroupOwner($tid,$owner,$newowner,$leave='2'){
    $url = 'https://api.netease.im/nimserver/team/changeOwner.action';
    $data= array(
        'tid' => $tid,
        'owner' => $owner,
        'newowner' => $newowner,
        'leave' => $leave
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-任命管理員
 * @param  $tid       [雲信服務器產生,羣唯一標識,創建羣時會返回,最大長度128字節]
 * @param  $owner       [羣主用戶帳號,最大長度32字節]
 * @param  $members     [["aaa","bbb"](JsonArray對應的accid,如果解析出錯會報414),長度最大1024字節(羣成員最多10個)]
 * @return $result      [返回array數組對象]
 */
public function addGroupManager($tid,$owner,$members){
    $url = 'https://api.netease.im/nimserver/team/addManager.action';
    $data= array(
        'tid' => $tid,
        'owner' => $owner,
        'members' => json_encode($members)
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-移除管理員
 * @param  $tid       [雲信服務器產生,羣唯一標識,創建羣時會返回,最大長度128字節]
 * @param  $owner       [羣主用戶帳號,最大長度32字節]
 * @param  $members     [["aaa","bbb"](JsonArray對應的accid,如果解析出錯會報414),長度最大1024字節(羣成員最多10個)]
 * @return $result      [返回array數組對象]
 */
public function removeGroupManager($tid,$owner,$members){
    $url = 'https://api.netease.im/nimserver/team/removeManager.action';
    $data= array(
        'tid' => $tid,
        'owner' => $owner,
        'members' => json_encode($members)
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-獲取某用戶所加入的羣信息
 * @param  $accid       [要查詢用戶的accid]
 * @return $result      [返回array數組對象]
 */
public function joinTeams($accid){
    $url = 'https://api.netease.im/nimserver/team/joinTeams.action';
    $data= array(
        'accid' => $accid
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 羣組功能(高級羣)-修改羣暱稱
 * @param  $tid       [雲信服務器產生,羣唯一標識,創建羣時會返回,最大長度128字節]
 * @param  $owner       [羣主用戶帳號,最大長度32字節]
 * @param  $accid     [要修改羣暱稱對應羣成員的accid]
 * @param  $nick     [accid對應的羣暱稱,最大長度32字節。]     
 * @return $result      [返回array數組對象]
 */
public function updateGroupNick($tid,$owner,$accid,$nick){
    $url = 'https://api.netease.im/nimserver/team/updateTeamNick.action';
    $data= array(
        'tid' => $tid,
        'owner' => $owner,
        'accid' => $accid,
        'nick' => $nick
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}
/**
 * 歷史記錄-單聊
 * @param  $from       [發送者accid]
 * @param  $to         [接收者accid]
 * @param  $begintime  [開始時間,ms 13位時間戳] 
 * @param  $endtime    [截止時間,ms 13位時間戳]
 * @param  $limit      [本次查詢的消息條數上限(最多100條),小於等於0,或者大於100,會提示參數錯誤]
 * @param  $reverse    [1按時間正序排列,2按時間降序排列。其它返回參數414.默認是按降序排列。]
 * @return $result     [返回array數組對象]
 */
public function querySessionMsg($from,$to,$begintime,$endtime='',$limit='100',$reverse='1'){
    $url = 'https://api.netease.im/nimserver/history/querySessionMsg.action';
    $data= array(
        'from'      => $from,
        'to'        => $to,
        'begintime' => $begintime,
        'endtime'   => $endtime,
        'limit'     => $limit,
        'reverse'   => $reverse
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 歷史記錄-羣聊
 * @param  $tid       [羣id]
 * @param  $accid          [查詢用戶對應的accid.]
 * @param  $begintime     [開始時間,ms]
 * @param  $endtime     [截止時間,ms]
 * @param  $limit       [本次查詢的消息條數上限(最多100條),小於等於0,或者大於100,會提示參數錯誤]
 * @param  $reverse    [1按時間正序排列,2按時間降序排列。其它返回參數414.默認是按降序排列。]
 * @return $result      [返回array數組對象]
 */
public function queryGroupMsg($tid,$accid,$begintime,$endtime='',$limit='100',$reverse='1'){
    $url = 'https://api.netease.im/nimserver/history/queryTeamMsg.action';
    $data= array(
        'tid' => $tid,
        'accid' => $accid,
        'begintime' => $begintime,
        'endtime' => $endtime,
        'limit' => $limit,
        'reverse' => $reverse
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 發送短信驗證碼
 * @param  $mobile       [目標手機號]
 * @param  $deviceId     [目標設備號,可選參數]
 * @return $result      [返回array數組對象]
 */
public function sendSmsCode($mobile,$deviceId=''){
    $url = 'https://api.netease.im/sms/sendcode.action';
    $data= array(
        'mobile' => $mobile,
        'deviceId' => $deviceId
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 校驗驗證碼
 * @param  $mobile       [目標手機號]
 * @param  $code          [驗證碼]
 * @return $result      [返回array數組對象]
 */
public function verifycode($mobile,$code=''){
    $url = 'https://api.netease.im/sms/verifycode.action';
    $data= array(
        'mobile' => $mobile,
        'code' => $code
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 發送模板短信
 * @param  $templateid       [模板編號(由客服配置之後告知開發者)]
 * @param  $mobiles          [驗證碼]
 * @param  $params          [短信參數列表,用於依次填充模板,JSONArray格式,如["xxx","yyy"];對於不包含變量的模板,不填此參數表示模板即短信全文內容]
 * @return $result      [返回array數組對象]
 */
public function sendSMSTemplate($templateid,$mobiles=array(),$params=array()){
    $url = 'https://api.netease.im/sms/sendtemplate.action';
    $data= array(
        'templateid' => $templateid,
        'mobiles' => json_encode($mobiles),
        'params' => json_encode($params)
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 查詢模板短信發送狀態
 * @param  $sendid       [發送短信的編號sendid]
 * @return $result      [返回array數組對象]
 */
public function querySMSStatus($sendid){
    $url = 'https://api.netease.im/sms/querystatus.action';
    $data= array(
        'sendid' => $sendid
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 發起單人專線電話
 * @param  $callerAcc       [發起本次請求的用戶的accid]
 * @param  $caller          [主叫方電話號碼(不帶+86這類國家碼,下同)]
 * @param  $callee          [被叫方電話號碼]
 * @param  $maxDur          [本通電話最大可持續時長,單位秒,超過該時長時通話會自動切斷]
 * @return $result      [返回array數組對象]
 */
public function startcall($callerAcc,$caller,$callee,$maxDur='60'){
    $url = 'https://api.netease.im/call/ecp/startcall.action';
    $data= array(
        'callerAcc' => $callerAcc,
        'caller' => $caller,
        'callee' => $callee,
        'maxDur' => $maxDur
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 發起專線會議電話
 * @param  $callerAcc       [發起本次請求的用戶的accid]
 * @param  $caller          [主叫方電話號碼(不帶+86這類國家碼,下同)]
 * @param  $callee          [所有被叫方電話號碼,必須是json格式的字符串,如["13588888888","13699999999"]]
 * @param  $maxDur          [本通電話最大可持續時長,單位秒,超過該時長時通話會自動切斷]
 * @return $result      [返回array數組對象]
 */
public function startconf($callerAcc,$caller,$callee,$maxDur='60'){
    $url = 'https://api.netease.im/call/ecp/startconf.action';
    $data= array(
        'callerAcc' => $callerAcc,
        'caller' => $caller,
        'callee' => json_encode($callee),
        'maxDur' => $maxDur
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 查詢單通專線電話或會議的詳情
 * @param  $session       [本次通話的id號]
 * @param  $type          [通話類型,1:專線電話;2:專線會議]
 * @return $result      [返回array數組對象]
 */
public function queryCallsBySession($session,$type){
    $url = 'https://api.netease.im/call/ecp/queryBySession.action';
    $data= array(
        'session' => $session,
        'type' => $type
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/* 2016-06-15 新增php調用直播接口示例 */

/**
 * 獲取語音視頻安全認證簽名
 * @param  $uid       [用戶帳號唯一標識,必須是Long型]
 */
public function getUserSignature($uid){
    $url = 'https://api.netease.im/nimserver/user/getToken.action';
    $data= array(
        'uid' => $uid
    );
    if($this->RequestType=='curl'){
        $result = $this->postDataCurl($url,$data);
    }else{
        $result = $this->postDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 創建一個直播頻道
 * @param  $name       [頻道名稱, string]
 * @param  $type       [頻道類型(0:rtmp;1:hls;2:http)]
 */
public function channelCreate($name,$type){
    $url = 'https://vcloud.163.com/app/channel/create';
    $data= array(
        'name' => $name,
        'type' => $type
    );
    if($this->RequestType=='curl'){
        $result = $this->postJsonDataCurl($url,$data);
    }else{
        $result = $this->postJsonDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 修改直播頻道信息
 * @param  $name       [頻道名稱, string]
 * @param  $cid       [頻道ID,32位字符串]
 * @param  $type       [頻道類型(0:rtmp;1:hls;2:http)]
 */
public function channelUpdate($name, $cid, $type){
    $url = 'https://vcloud.163.com/app/channel/update';
    $data= array(
        'name' => $name,
        'cid' => $cid,
        'type' => $type
    );
    if($this->RequestType=='curl'){
        $result = $this->postJsonDataCurl($url,$data);
    }else{
        $result = $this->postJsonDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 刪除一個直播頻道
 * @param  $cid       [頻道ID,32位字符串]
 */
public function channelDelete($cid){
    $url = 'https://vcloud.163.com/app/channel/delete';
    $data= array(
        'cid' => $cid
    );
    if($this->RequestType=='curl'){
        $result = $this->postJsonDataCurl($url,$data);
    }else{
        $result = $this->postJsonDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 獲取一個直播頻道的信息
 * @param  $cid       [頻道ID,32位字符串]
 */
public function channelStats($cid){
    $url = 'https://vcloud.163.com/app/channelstats';
    $data= array(
        'cid' => $cid
    );
    if($this->RequestType=='curl'){
        $result = $this->postJsonDataCurl($url,$data);
    }else{
        $result = $this->postJsonDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 獲取用戶直播頻道列表
 * @param  $records       [單頁記錄數,默認值爲10]
 * @param  $pnum = 1       [要取第幾頁,默認值爲1]
 * @param  $ofield       [排序的域,支持的排序域爲:ctime(默認)]
 * @param  $sort            [升序還是降序,1升序,0降序,默認爲desc]
 */
public function channelList($records = 10, $pnum = 1, $ofield = 'ctime', $sort = 0){
    $url = 'https://vcloud.163.com/app/channellist';
    $data= array(
        'records' => $records,
        'pnum' => $pnum,
        'ofield' => $ofield,
        'sort' => $sort
    );
    if($this->RequestType=='curl'){
        $result = $this->postJsonDataCurl($url,$data);
    }else{
        $result = $this->postJsonDataFsockopen($url,$data);
    }
    return $result;
}

/**
 * 重新獲取推流地址
 * @param  $cid       [頻道ID,32位字符串]
 */
public function channelRefreshAddr($cid){
    $url = 'https://vcloud.163.com/app/address';
    $data= array(
        'cid' => $cid
    );
    if($this->RequestType=='curl'){
        $result = $this->postJsonDataCurl($url,$data);
    }else{
        $result = $this->postJsonDataFsockopen($url,$data);
    }
    return $result;
}

}

?>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章