签名规则
API 调用签名规则¶
本文档中所有请求融云服务端 API 接口的请求均使用此规则校验,以下不再重复说明。
每次请求 API 接口时,均需要提供 4 个 HTTP Request Header,具体如下:
名称
类型
说明
RC-App-Key
String
开发者平台分配的 App Key。
RC-Nonce
String
随机数,无长度限制。
RC-Timestamp
String
时间戳,从 1970 年 1 月 1 日 0 点 0 分 0 秒开始到当前时间(北京时间)的毫秒数。(请严格参照此执行,服务器端会校验此信息)
RC-Signature
String
数据签名。
RC-Signature (数据签名)计算方法:将系统分配的 App Secret、RC-Nonce (随机数)、RC-Timestamp (时间戳)三个字符串按先后顺序拼接成一个字符串并进行 SHA1 哈希计算。如果调用的数据签名验证失败,接口调用会返回 HTTP 状态码 401。其他状态码请参见状态码表。
签名生成代码示例¶
PHP 语言的代码示例:
// 重置随机数种子。
srand((double)microtime()*1000000);
$appSecret = 'Y1W2MeFwwwRxa0'; // 开发者平台分配的 App Secret。
$nonce = rand(); // 获取随机数。
$timestamp = time()*1000; // 获取时间戳(毫秒)。
$signature = sha1($appSecret.$nonce.$timestamp);
HTTP 请求示例:
POST /user/getToken.json HTTP/1.1
Host: api.cn.ronghub.com
RC-App-Key: uwd1c0sxdlx2
RC-Nonce: 14314
RC-Timestamp: 1408710653491
RC-Signature: 890b422b75c1c5cb706e4f7921df1d94e69c17f4
Content-Type: application/x-www-form-urlencoded
Content-Length: 78
userId=jlk456j5&name=Ironman&portraitUri=http%3A%2F%2Fabc.com%2Fmyportrait.jpg
API 接收签名规则¶
融云服务器向应用服务器推送数据(调用应用服务器接口)时会添加 3 个 GET 请求参数(在 URL 上添加的参数),具体如下:
名称
类型
说明
rc-nonce
String
随机数,无长度限制。
rc-timestamp
String
时间戳,从1970年1月1日0点0分0秒开始到现在的秒数。
rc-signature
String
数据签名。
RC-Signature (数据签名)计算方法:将系统分配的 App Secret、RC-Nonce (随机数)、RC-Timestamp (时间戳)三个字符串按先后顺序拼接成一个字符串并进行 SHA1 哈希计算。
签名校验代码示例¶
PHP 语言的代码示例:
$appSecret = 'Y1W2MeFwwwRxa0'; // 开发者平台分配的 App Secret。
$nonce = $_GET['rc-nonce']; // 获取随机数。
$timestamp = $_GET['rc-timestamp']; // 获取时间戳。
$signature = $_GET['rc-signature']; // 获取数据签名。
$local_signature = sha1($appSecret.$nonce.$timestamp); // 生成本地签名。
if(strcmp($signature, $local_signature)===0){
// TODO: 此处添加业务逻辑。
echo 'OK';
} else {
echo 'Error';
}