• 29008阅读
  • 49回复

[经验分享]云信服务器接口示例 [复制链接]

上一主题 下一主题
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-02-26
— 本帖被 云信小小 执行置顶操作(2017-02-10) —
这个帖子中集中了各大主流语言调用云信服务器接口的示范,包括 C++, C# , Objective-C, Swift, PHP, Python, nodejs 等。
但只推荐在应用服务器调用相应的云信服务器接口,在客户端 (App 或 Web前端 ) 调用这些接口有暴露 AppKey 和 App Secret 的风险。

只看该作者 沙发  发表于: 2016-02-26
PHP版SDK API下载

php sample.zip (9 K) 下载次数:1879

带sdk使用封装类+类使用示例文件包 (已更新视频直播服务端接口调用示例):
php sample 2.0.rar (10 K) 下载次数:2204

PHP API使用示例:
//首先引入对应的API类
require('./ServerAPI.php');

//声明appkey和secret
$AppKey = 'c371f0c2dec4.......';
$AppSecret = '9f5a69......';

//可选,分别可以使用fsockopen方式或者curl库发送请求
//$p = new ServerAPI($AppKey,$AppSecret,'fsockopen');        //fsockopen伪造请求
$p = new ServerAPI($AppKey,$AppSecret,'curl');        //php curl库
//建议使用curl库,因为fsockopen方式使用socket方式模拟https请求,需要apache开启socket支持,需要用户在安全方面做好控制,以防php被黑客挟持(socket接口),成为ddos的肉鸡

//使用类方法即可,如:
//创建云信Id
//print_r( $p->createUserId('user2') ) ;
//更新云信Id
//print_r( $p->updateUserId('user1') ) ;
//更新并获取新token
//print_r( $p->updateUserToken('user1') ) ;
//封禁云信ID
// print_r( $p->blockUserId('user1') ) ;


常见问题1:
有用户提出,使用接口,部分返回结果会报:Warning: json_decode() expects parameter 1 to be string,
由于示例只是功能上简单的实现了json转array,并不是特别严谨,当使用is_null(json_decode($json_str))进行试错时,若$json_str不为字符串就会报warning
解决方法为,对$json_str事先进行类型判断(ServerApi.php中方法)

    public 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;
    }
用户也可进行深度扩展,譬如对字符串、数字、文件等类型的处理
json_decode方法可详见:http://php.net/manual/en/function.json-decode.php


常见问题2:

    serverApi.php文件中,有关* 发起专线会议电话 * 接口中有关$callee参数的数据结构,代码中描述为:
          * @param  $callee          [所有被叫方电话号码,必须是json格式的字符串,如["13588888888","13699999999"]]
    实际这是为最终php接口跟云信服务器发起请求时的数据格式,为了方便开发者开发,参数为php的array,例如:
          $p->startconf(“用户ID”, "发起电话号码", array( 0 => "会议电话号码1", 1 => "会议电话号码2" ), '60');
   是故代码片段中也做了封装:

        $data= array(
            'callerAcc' => $callerAcc,
            'caller' => $caller,
            'callee' => json_encode($callee),
            'maxDur' => $maxDur
        );
  也有用户通过修改代码,直接将 'callee' =>$callee, 改代码,也是可以的,此时的参数则必须是json格式的字符串!!






只看该作者 板凳  发表于: 2016-02-26
Python版 SDK API下载

python sample.zip (8 K) 下载次数:228

2016-05-17 更新版本: 增加了直接使用ssl socket发送请求的接口,应对部分客户urllib2库不支持https的情况
python sample fix1.1.rar (9 K) 下载次数:323


#! /usr/bin/env python
# coding=utf-8
# 引入依赖库
import urllib2,urllib
import random,time,hashlib
import base64
from ServerAPI import ServerAPI

#声明对应的key和secret
AppKey = 'd79963a976................';
AppSecret = '38e52a6...........';

#创建类
p = ServerAPI(AppKey,AppSecret);

#直接即可使用,返回服务端状态码
##创建云信Id
##print( p.createUserId('user4') ) ;
##更新云信Id
##print( p.updateUserId('user1') ) ;
##更新并获取新token
##print( p.updateUserToken('user1') ) ;

常见问题1:
对服务器返回json字符串,python请求后会做json=>dict转换,示例中直接使用了        
        res = res_data.read()
        return eval(res);
一般情况下,云信服务器会返回标准格式的json字符,但若用户应用对稳定性要求很高,若服务器返回为null等类型(非json),python会抛出异常
建议用户在eval转换之前对res进行条件判断,甚至粗暴的使用try,catch处理,保证json->dict的准确处理。
另一个参考建议是使用python的json库,import json,然后返回json.loads(resdata),具体使用用户可以自行搜索


常见问题2:
urllib2库不支持https怎么办?
    python2.7.9及python3.4以上版本,urllib2库默认支持https,如果较低版本且源码没有编译ssl,可使用新增接口,设置UseSSLLib,使用ssl lib发送socket请求的方式模拟https请求,请求参数与结果,兼容原来使用urllib2库。








只看该作者 地板  发表于: 2016-02-26
nodejs版

nodejs sample.zip (9 K) 下载次数:444

nodejs api使用示例:

var ServerApi = require('./ServerAPI.js');

var AppKey = '。。。。。。。。。。。';
var AppSecret = '。。。。。。。。。。。。';
//创建对象实例
var p = new ServerApi(AppKey,AppSecret);

//参数包装在对象中,使用回调函数异步获取数据结果,第一个回调参数为error,第二个为真实结果,为json对象
//创建云信Id
// p.createUserId({
//         'accid':'003',
//         'name':'',
//         'props':'',
//         'icon':'',
//         'token':''
//     },function(err,data){
//         // console.log('err',err);
//         console.log('data',data)
//     });

//更新云信Id
// p.updateUserId({
//         'accid':'003',
//         'name':'003',
//         'props':'',
//         'token':''
//     },function(err,data){
//         // console.log('err',err);
//         console.log('data',data)
//     });

只看该作者 4楼 发表于: 2016-02-26
C++版

nim_server_api_cpp.zip (22 K) 下载次数:337

openssl.zip (6320 K) 下载次数:207
curl.zip (3404 K) 下载次数:220

源码和第三方源码工程为vs2010编译,如果需要vs2010以上版本开发,请升级工程,重新编译三方源码工程生成lib文件替换server api源码工程目录对应的lib文件。

只看该作者 5楼 发表于: 2016-02-26
C#版本

server_http_api.rar (5 K) 下载次数:1199


只看该作者 6楼 发表于: 2016-02-26
Objective-C版

objc-sample.zip (3 K) 下载次数:210

只看该作者 7楼 发表于: 2016-02-26
swift 版

swift-sample.zip (29 K) 下载次数:108

因为需要使用到 sha1 ,而 swift 并没有提供原生的 API ,需要使用 CommonCrypto 并以 bridge header 的形式引入。当然也可以直接使用 OC 版本,同样以 bridge header 的形式引入

只看该作者 8楼 发表于: 2016-03-03
好贴赞一个~

只看该作者 9楼 发表于: 2016-03-04
没有Java版的吗

只看该作者 10楼 发表于: 2016-03-06
JAVA的呢?

只看该作者 11楼 发表于: 2016-03-07
人民的呼声,需要java版本的demo,java后台需要。

只看该作者 12楼 发表于: 2016-03-07
JAVA示例 nim_server_api_java.zip (916 K) 下载次数:2135


以创建用户为例,其他的照着文档改地址和参数吧。

只看该作者 13楼 发表于: 2016-03-14

只看该作者 14楼 发表于: 2016-03-16
你们自己不测试下吗,php的api 把我坑惨了

只看该作者 15楼 发表于: 2016-03-16
毛学长牛牛牛

只看该作者 16楼 发表于: 2016-03-16
回 shenstef 的帖子
shenstef:[表情] 你们自己不测试下吗,php的api 把我坑惨了 (2016-03-16 11:56) 

有什么问题么?

只看该作者 17楼 发表于: 2016-03-17
帮助巨大

只看该作者 18楼 发表于: 2016-03-17
好厉害呀

只看该作者 19楼 发表于: 2016-03-24
问个问题,我现在想用后台注册用户,实现一对一聊天等场景,在知道对方id的情况下,是不是不需要添加两用户为好友?我从参数来看应该不需要,想确认下!谢谢!