RestAPI
token 签名规则
注:此签名由用户服务器端生成,不能直接放到客户端,否则影响安全性;
接口请求全部以 POST 提交 (不支持json格式提交);
请求参数里 app_id 值必传;
验证参数 token 生成规则 (此参数也必传);
- 3.1 生成规则:md5(md5( app_id + BodyStr) + md5(SecretKey)).
- 3.2 app_id : 可通过企业管理后台查找 APPID.
- 3.3 BodyStr : POST 提交参数( token 后续生成追加,不在 bodyStr 内),将提交参数按照指定规则排序,然后将其生成一个字符串.
- 3.4 SecretKey : 默认管理后台自动生成,后续客户可自行修改.
下方贴出 PHP 生成 token 案例:token 生成后,将其放在 Post 提交参数里一起提交
<?php
/**
* 获取token
* @param $postData Post 提交参数
* @param $appId app_id 企业 app_id 值
* @param $secretKey
* @return string
*/
function getToken($postData,$appId,$secretKey){
// 剔除此2项,不进行字符串生成
unset($postData['token']);
unset($postData['app_id']);
// 将Post 提交参数 生成一个字符串
$bodyStr = $postData?getBodyStr($postData):'';
// 生成规则 md5(企业key + bodyStr字符串 + 企业随机字符串);
return md5(md5($appId.$bodyStr).md5($secretKey));
}
/**
* [将对应不规则数组转成一个字符串]
* @param [type] $data [Post 提交参数]
* @param [type] $str [description]
* @return [type] [description]
*/
function getBodyStr($data, $str = '') {
// 对数据键值进行排序
ksort($data);
foreach ($data as $key => $value) {
if (is_array($value)) {
if ($value) {
$str .= $key;
$str = getBodyStr($value, $str);
}
} else {
if (($value || $value === 0 || $value === '0') && $value !== null && $value !== false && $value !== true) {
$str .= $key . $value;
}
}
}
return $str;
}