网易通讯与视频


http://www.upwqy.com/details/104.html

最近做的一个项目.其中涉及到音视频,  开始使用的是环信,但时客户需要在,视频通话中,,附带美颜效果.环信这边联系客户好像没有这一块.所以又重新找了一个平台:网易云通讯与视频


文档地址:

http://dev.netease.im/docs/product/IM%E5%8D%B3%E6%97%B6%E9%80%9A%E8%AE%AF/%E6%9C%8D%E5%8A%A1%E7%AB%AFAPI%E6%96%87%E6%A1%A3/%E6%8E%A5%E5%8F%A3%E6%A6%82%E8%BF%B0

接口使用的过程 ,最主要的是一个checksum的生成,和请求参数的构造.


checksum的生成

/**
 * 生成 checksum
 */
private function getCheckSum(){
    $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);
}


请求参数的构造.


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


以下演示了几个实例,其他的api基本上都是一样的,只要上面的配置弄好,基本上没啥问题


/**
 * Created by PhpStorm.
 * User: [一秋]
 * Date: 2018/2/2
 * Time: 16:22
 * Desc: 成功源于点滴
 */

namespace cmf\service;

//网易音视频

class WangYiService{
    private $appKey;
    private $appSecret;
    private $nonce;
    private $curTime;
    private $checkSum;
    const   HEX_DIGITS = "0123456789abcdef";

    public function __construct()
    {
        $this->appKey = '';
        $this->appSecret = '';
    }

    /**
     * 新建通讯用户id
     * @return array
     */
    public function createAccid($accid,$token){
        $url = 'https://api.netease.im/nimserver/user/create.action';
        $data= array(
            'accid' => $accid,
            'token'=>$token
        );
        $result = $this->postDataCurl($url,$data);
        return $result;

    }

    /**
     * 更新用户基本信息
     * @return array
     */
    public function updateAccid($accid){

        $url = 'https://api.netease.im/nimserver/user/update.action';
        $data= array(
            'accid' => $accid
        );
        $result = $this->postDataCurl($url,$data);
        return $result;
    }

    /**
     * 更新token     * @param $accid
     * @return array
     *
     */
    public function refreshToken($accid){
        $url = 'https://api.netease.im/nimserver/user/refreshToken.action';
        $data= array(
            'accid' => $accid
        );
        $result = $this->postDataCurl($url,$data);
        return $result;
    }

    /**
     * 封禁网易云通信ID
     */
    public function blockAccid($accid){
        $url = 'https://api.netease.im/nimserver/user/block.action';
        $data= array(
            'accid' => $accid,
            'needkick'=>true  //是否踢掉被禁用户,truefalse,默认false
        );
        $result = $this->postDataCurl($url,$data);
        return $result;
    }

    /**
     * 解禁网易云通信ID
     */
    public function unblockAccid($accid){
        $url = 'https://api.netease.im/nimserver/user/unblock.action';
        $data= array(
            'accid' => $accid
        );
        $result = $this->postDataCurl($url,$data);
        return $result;
    }



    public function postDataCurl($url,$data){
        $this->getCheckSum();       //发送请求前需先生成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'
        );

        $postDataArray = array();
        foreach ($data as $key=>$value){
            array_push($postDataArray, $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);
    }


    /**
     * 生成 checksum
     */
    private function getCheckSum(){
        $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);
    }

    /**
     * json转数组
     */
    private function json_to_array($json_str){

        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;
    }

    private function gengerateToken(){
        return  md5(uniqid()) . md5(uniqid());
    }
}





你可能感兴趣的:(php)