请选择 进入手机版 | 继续访问电脑版
查看: 9068|回复: 11

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

[复制链接]

623

主题

643

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
99885
发表于 2017-11-23 11:41:13 | 显示全部楼层 |阅读模式
这个帖子中集中了各大主流语言调用云信服务器接口的示范,包括 C++、C# 、Objective-C、 Swift、JAVA,PHP、Python、nodejs 等。
但只推荐在应用服务器调用相应的云信服务器接口,在客户端 (App 或 Web前端 ) 调用这些接口有暴露 AppKey 和 App Secret 的风险。
回复

使用道具 举报

623

主题

643

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
99885
 楼主| 发表于 2017-11-23 11:43:34 | 显示全部楼层
PHP版SDK API下载



带sdk使用封装类+类使用示例文件包 (已更新视频直播服务端接口调用示例):


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格式的字符串!!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

623

主题

643

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
99885
 楼主| 发表于 2017-11-23 11:44:56 | 显示全部楼层
Python版 SDK API下载

2016-05-17 更新版本: 增加了直接使用ssl socket发送请求的接口,应对部分客户urllib2库不支持https的情况



#! /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库。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

623

主题

643

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
99885
 楼主| 发表于 2017-11-23 11:51:23 | 显示全部楼层
nodejs版


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

623

主题

643

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
99885
 楼主| 发表于 2017-11-23 11:52:57 | 显示全部楼层
C++版





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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

623

主题

643

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
99885
 楼主| 发表于 2017-11-23 11:53:45 | 显示全部楼层
C#版本



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

623

主题

643

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
99885
 楼主| 发表于 2017-11-23 11:54:49 | 显示全部楼层
Objective-C版

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

623

主题

643

帖子

9万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
99885
 楼主| 发表于 2017-11-23 11:55:40 | 显示全部楼层
swift 版



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

0

主题

1

帖子

16

积分

云客

Rank: 1

积分
16
发表于 2018-2-22 23:34:51 | 显示全部楼层
admin 发表于 2017-11-23 11:44
Python版 SDK API下载

2016-05-17 更新版本: 增加了直接使用ssl socket发送请求的接口,应对部分客户urll ...

如何支持中文? 测试表明中文的{msg:''}, 符合json,但在其他客户端显示错误
回复

使用道具 举报

0

主题

1

帖子

4

积分

云客

Rank: 1

积分
4
发表于 2018-2-27 11:49:22 | 显示全部楼层
楼主,没有java的啊?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表