Skip to content

必优科技接口调用鉴权与签名

必要的全局参数 :

  • 访问ID: 联系必优科技提供
  • 签名秘钥: 联系必优科技提供
  • 版本: v1
  • 渠道: 联系必优科技提供

1.环境说明

环境域名:api.yoojober.com

2.全局参数

名称位置类型必选说明
accesskeyidheaderstring访问ID
verheaderstring请求接口的版本,目前值为v1
channelheaderstring请求接口的渠道
timestampquery或bodystring存在业务参数时,当前签名时的时间戳
signquery或bodystring存在业务参数时,需要的签名字段

3.签名规则

存在业务参数才需要签名,不存在不用做任何处理,传值为空的字段也不需要进行签名

  1. 假如存在业务参数:
  • z=11
  • b=13
  1. 把当前时间戳(10位)加入签名参数,那么签名参数变成:
  • z=11

  • b=13

  • timestamp=1656082397

  1. 业务字段根据key进行自然升序:
  • b=13
  • timestamp=1656082397
  • z=11
  1. 然后用符号 = 拼接键值,再用 & 拼接所有键值:b=13&timestamp=1656082397&z=11
  2. 最后用 & 拼接签名秘钥:b=13&timestamp=1656082397&z=11&
  3. 得出签名值:md5(b=13&timestamp=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格式

字段类型说明
codeinteger状态码,=200时代表处理业务成功,其它值为失败
msgstring状态码对应的信息
datamixed业务数据
requestIdstring请求 id