请求结构
更新时间: 2024/07/24 10:02:26
发起 API 请求的 URL 由不同参数拼接而成,有固定的请求结构。本产品服务端 API 请求结构主要由三部分组成:
-
URL:指向具体的业务请求,请参考各个 API 接口文档。
-
Header:包括云信 App Key、CheckSum 等在内的鉴权信息。
-
Body:包括 API 对应的请求参数。若接口没有请求参数,则无需传递 Body。
每篇 API 文档均给出了请求示例供您参考,请在发起请求前自行编码。接口调用成功会显示返回参数,调用失败则显示相应报错,您可以根据错误码分析排查。
Header
Header 中包括用于鉴权的相关公共参数,用于标识用户和接口签名。如非必要,每个单独的接口文档中不再对这些参数进行说明,但每次请求均需要携带这些参数,才能正常发起请求。
参数名称 | 是否必选 | 描述 |
---|---|---|
AppKey | 必选 | 网易云信控制台中指定应用对应的 App Key。 |
Nonce | 必选 | 随机数,最大长度为 128 个字符。 |
CurTime | 必选 | 当前 Unix 时间戳,即从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到现在的秒数。数据类型为 String。 |
CheckSum | 必选 | CheckSum 的值为 String 格式,小写。其计算方式为:将 AppSecret、Nonce 和 CurTime 三个参数拼接的字符串经过 SHA1 哈希计算,并将结果转化成 16 进制字符。即 CheckSum = sha1(AppSecret + Nonce + CurTime)。 出于安全性考虑,每个 CheckSum 的有效期为 CurTime 时间开始之后的 5 分钟内。建议每次请求都生成新的 CheckSum,同时请确认发起请求的服务器与标准时间同步,例如 NTP 服务。 |
CheckSum 校验
您可以参考以下代码计算 CheckSum。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class CheckSumBuilder {
private static final Logger logger = LoggerFactory.getLogger(CheckSumBuilder.class);
private static final char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
public static String getCheckSum(String nonce, String curTime, String appSecret) {
String plaintext = appSecret + nonce + curTime;
return encode(plaintext, "SHA1");
}
public static String getCheckSum(String nonce, String curTime, String appSecret, String data) {
String plaintext = appSecret + nonce + curTime + data;
return encode(plaintext, "SHA1");
}
// 计算并获取md5值
public static String getMD5(String requestBody) {
return encode(requestBody, "md5");
}
private static String encode(String plaintext, String method) {
try {
MessageDigest messageDigest = MessageDigest.getInstance(method);
messageDigest.update(plaintext.getBytes(StandardCharsets.UTF_8));
return getFormattedText(messageDigest.digest());
} catch (NoSuchAlgorithmException e) {
logger.error("Encode error {} msg {}", plaintext, e.getMessage());
}
return "";
}
/**
* Takes the raw bytes from the digest and formats them correct.
*
* @param bytes
* the raw bytes from the digest.
* @return the formatted bytes.
*/
protected static String getFormattedText(byte[] bytes) {
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
// 把密文转换成十六进制的字符串形式
for (byte aByte : bytes) {
buf.append(HEX_DIGITS[(aByte >> 4) & 0x0f]);
buf.append(HEX_DIGITS[aByte & 0x0f]);
}
return buf.toString();
}
}
Body
服务端 API 请求的 Content-Type 为 application/json。传入的 Body 必须为 JSON 格式。
服务地址
网易会议组件 API 的服务接入地址为:https://roomkit.netease.im
。
通信协议
网易云信所有接口均支持通过 HTTPS 协议进行通信,保障更高的安全性。
字符编码
请求及返回结果均使用 UTF-8 字符集编码。
此文档是否对你有帮助?