Appearance
必优科技接口调用鉴权与签名
必要的全局参数 :
- 访问ID: 联系必优科技提供
- 签名秘钥: 联系必优科技提供
- 版本: v1
- 渠道: 联系必优科技提供
1.环境说明
环境域名:api.yoojober.com
2.全局参数
名称 | 位置 | 类型 | 必选 | 说明 |
---|---|---|---|---|
accesskeyid | header | string | 是 | 访问ID |
ver | header | string | 是 | 请求接口的版本,目前值为v1 |
channel | header | string | 是 | 请求接口的渠道 |
timestamp | query或body | string | 否 | 存在业务参数时,当前签名时的时间戳 |
sign | query或body | string | 否 | 存在业务参数时,需要的签名字段 |
3.签名规则
存在业务参数才需要签名,不存在不用做任何处理,传值为空的字段也不需要进行签名
- 假如存在业务参数:
- z=11
- b=13
- 把当前时间戳(10位)加入签名参数,那么签名参数变成:
z=11
b=13
timestamp=1656082397
- 业务字段根据key进行自然升序:
- b=13
- timestamp=1656082397
- z=11
- 然后用符号
=
拼接键值,再用&
拼接所有键值:b=13×tamp=1656082397&z=11 - 最后用
&
拼接签名秘钥:b=13×tamp=1656082397&z=11& - 得出签名值:md5(b=13×tamp=1656082397&z=11&{签名秘钥})
JS版本代码实现带签名的业务参数:
json
// 待签名的业务参数
let params = {
user_id:'12dd',
mobile:'13800138000',
area_code:'86',
nickname:'xiaoy'
};
// 必优提供的签名密钥,需要更改
const signSerct = 'ssssdsdsdsd';
// 当前的时间戳
const timestamp = parseInt(new Date().getTime() / 1000);
// 存放所有需要用来签名的参数
let param = {};
for(let i in params){
if (params[i] !== '' && params[i] !== null) { // 非空参数值的参数才参与签名
param[i] = params[i];
}
}
param['timestamp'] = timestamp;
// 取 key
let keys = Object.keys(param);
if (keys.length > 1) {
// 参数名 ASCII 码从小到大排序(字典序)
keys.sort();
// 转成键值对
let paramPair = [];
for (let i = 0, len = keys.length; i < len; i++) {
if (keys[i] === 'sign') continue;
let k = keys[i];
paramPair.push(k + '=' + param[k])
}
// 拼接
let stringSignTemp = paramPair.join('&');
let sign = CryptoJS.MD5(stringSignTemp+'&'+signSerct).toString();
params['timestamp'] = timestamp;
params['sign'] = sign;
}
4.关于返回值,返回格式为json格式
字段 | 类型 | 说明 |
---|---|---|
code | integer | 状态码,=200时代表处理业务成功,其它值为失败 |
msg | string | 状态码对应的信息 |
data | mixed | 业务数据 |
requestId | string | 请求 id |