网易云通信Server Http API接口文档

接口概述

API调用说明

本文档中,所有调用网易云通信服务端接口的请求都需要按此规则校验。

API checksum校验

以下参数需要放在Http Request Header中

参数 参数说明
AppKey 开发者平台分配的appkey
Nonce 随机数(最大长度128个字符)
CurTime 当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的秒数(String)
CheckSum SHA1(AppSecret + Nonce + CurTime),三个参数拼接的字符串,进行SHA1哈希计算,转化成16进制字符(String,小写)

CheckSum有效期:出于安全性考虑,每个checkSum的有效期为5分钟(用CurTime计算),建议每次请求都生成新的checkSum,同时请确认发起请求的服务器是与标准时间同步的,比如有NTP服务。
CheckSum检验失败时会返回414错误码,具体参看code状态表。
重要提示: 本文档中提供的所有接口均面向开发者服务器端调用,用于计算CheckSum的AppSecret开发者应妥善保管,可在应用的服务器端存储和使用,但不应存储或传递到客户端,也不应在网页等前端代码中嵌入。

计算CheckSum的java代码举例如下:

import java.security.MessageDigest;

public class CheckSumBuilder {
    // 计算并获取CheckSum
    public static String getCheckSum(String appSecret, String nonce, String curTime) {
        return encode("sha1", appSecret + nonce + curTime);
    }

    // 计算并获取md5值
    public static String getMD5(String requestBody) {
        return encode(“md5”, requestBody);
    }

    private static String encode(String algorithm, String value) {
        if (value == null) {
            return null;
        }
        try {
            MessageDigest messageDigest
                    = MessageDigest.getInstance(algorithm);
            messageDigest.update(value.getBytes());
            return getFormattedText(messageDigest.digest());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    private static String getFormattedText(byte[] bytes) {
        int len = bytes.length;
        StringBuilder buf = new StringBuilder(len * 2);
        for (int j = 0; j < len; j++) {
            buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
            buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
        }
        return buf.toString();
    }
    private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
}

接口说明

  1. 所有接口都只支持POST请求;
  2. 所有接口请求Content-Type类型为:application/x-www-form-urlencoded;charset=utf-8;
  3. 所有接口返回类型为JSON,同时进行UTF-8编码。

接口示例

网易云通信服务端接口是简单的http接口,适配各种语言。 当然我们也提供了一些简单的示例供开发者参考。 网易云通信服务器接口示例

语音视频通话

说明

1.语音视频服务属于收费功能,使用前需要联系客服开通功能;
2.加入频道支持安全模式和非安全模式两种:

为了您的账号安全,我们推荐您使用安全模式 。

获取语音视频安全认证签名

请求说明

POST https://api.netease.im/nimserver/user/getToken.action HTTP/1.1
Content-Type:application/x-www-form-urlencoded;charset=utf-8

请求中Headers的设置请参考接口概述

接口描述

获取语音视频安全认证模式下的签名。

参数说明

参数类型必须说明
uidlong用户帐号唯一标识
repeatUseBoolean是否重复使用,默认可以重复使用
expireAtint过期的秒数,默认10分钟,最大1天
channelNameString频道名称,缺失则仅以uid为维度

curl请求示例

curl -X POST -H "AppKey: go9dnk49bkd9jd9vmel1kglw0803mgq3" -H "Nonce: 4tgggergigwow323t23t" -H "CurTime: 1443592222" -H "CheckSum: 9e9db3b6c9abb2e1962cf3e6f7316fcc55583f86" -H "Content-Type: application/x-www-form-urlencoded" -d 'uid=123456' 'https://api.netease.im/nimserver/user/getToken.action'

HttpClient请求示例(以下各接口的HttpClient调用方式参考此处

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Test {
    public static void main(String[] args) throws Exception{
        DefaultHttpClient httpClient = new DefaultHttpClient();
        String url = "https://api.netease.im/nimserver/user/create.action";
        HttpPost httpPost = new HttpPost(url);

        String appKey = "94kid09c9ig9k1loimjg012345123456";
        String appSecret = "123456789012";
        String nonce =  "12345";
        String curTime = String.valueOf((new Date()).getTime() / 1000L);
        String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);//参考 计算CheckSum的java代码

        // 设置请求的header
        httpPost.addHeader("AppKey", appKey);
        httpPost.addHeader("Nonce", nonce);
        httpPost.addHeader("CurTime", curTime);
        httpPost.addHeader("CheckSum", checkSum);
        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

        // 设置请求的参数
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("accid", "helloworld"));
        httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));

        // 执行请求
        HttpResponse response = httpClient.execute(httpPost);

        // 打印执行结果
        System.out.println(EntityUtils.toString(response.getEntity(), "utf-8"));
    }
}

返回说明

Http响应JSON格式

"Content-Type": "application/json; charset=utf-8"
{
   "code":200"token":"xxxxx"  //安全认证模式下的签名。
}

主要的返回码

200、403、414、416、431、500

具体请参考code状态表


code状态表

code 详细描述
200 操作成功
201 客户端版本不对,需升级sdk
301 被封禁
302 用户名或密码错误
315 IP限制
403 非法操作或没有权限
404 对象不存在
405 参数长度过长
406 对象只读
408 客户端请求超时
413 验证失败(短信服务)
414 参数错误
415 客户端网络问题
416 频率控制
417 重复操作
418 通道不可用(短信服务)
419 数量超过上限
422 账号被禁用
431 HTTP重复请求
500 服务器内部错误
503 服务器繁忙
508 消息撤回时间超限
509 无效协议
514 服务不可用
998 解包错误
999 打包错误
群相关错误码
801 群人数达到上限
802 没有权限
803 群不存在
804 用户不在群
805 群类型不匹配
806 创建群数量达到限制
807 群成员状态错误
808 申请成功
809 已经在群内
810 邀请成功
音视频、白板通话相关错误码
9102 通道失效
9103 已经在他端对这个呼叫响应过了
11001 通话不可达,对方离线状态
聊天室相关错误码
13001 IM主连接状态异常
13002 聊天室状态异常
13003 账号在黑名单中,不允许进入聊天室
13004 在禁言列表中,不允许发言
特定业务相关错误码
10431 输入email不是邮箱
10432 输入mobile不是手机号码
10433 注册输入的两次密码不相同
10434 企业不存在
10435 登陆密码或帐号不对
10436 app不存在
10437 email已注册
10438 手机号已注册
10441 app名字已经存在