规范说明

通信协议

HTTP/HTTPS 协议。

请求方法

HTTP POST, 接口仅支持POST请求, 且仅接受 application/x-www-form-urlencoded 编码的参数

字符编码

所有接口的请求和响应数据编码皆为 utf-8。

API请求结构

名称描述备注
API入口具体API接口地址https://ye.dun.163yun.com/v1/oneclick/check
公共参数每个接口都包含的通用参数详见 公共参数 说明
私有参数每个接口特有的参数详见每个API接口定义

公共参数

公共参数是用于标识产品和接口鉴权目的的参数,如非必要,在每个接口单独的接口文档中不再对这些参数进行说明,每次请求均需要携带这些参数。

请求公共参数

参数名称类型是否必选最大长度描述
secretIdStringY32产品秘钥 id ,在网易易盾创建产品时统一分配,产品标识
businessIdStringY32业务id ,在网易易盾创建产品时统一分配,业务标识
versionStringY4接口版本号,可选值 v1
timestampNumberY13请求当前 UNIX 时间戳,请注意服务器时间是否同步
nonceStringY32随机字符串,与 timestamp 联合起来,用于防止重放攻击
signatureStringY32请求签名,用来验证此次请求的合法性,具体算法见 接口鉴权

响应通用字段

所有接口响应值采用 json 格式, 如无特殊说明,每次请求的返回值中,都包含下面字段:

参数名称类型描述
codeNumber接口调用状态,200:正常,其他值:调用出错,返回码见 响应返回码
msgString结果说明,如果接口调用出错,那么返回错误描述,成功返回 ok
dataString接口返回结果,各个接口自定义

响应返回码

响应返回码(code)网易易盾服务 API 调用和执行的概要结果。当返回码不为 200 时, 表示请求未正常执行,返回码描述 (msg) 对该结果进行了细化补充,用户可根据返回码判断 API 的执行情况。

所有接口调用返回值均包含 code 和 msg 字段, code 为返回码值,msg 为返回码描述信息,返回码表如下:

返回码返回码描述说明
200ok接口调用成功
400bad request请求缺少 secretId 或 businessId
401forbiddensecretId 或 businessId 错误
405param error请求参数异常
410signature failure签名验证失败,请重新参考demo签名代码
420request expired请求过期
429too many requests次数超限
430replay attack重放攻击
440decode error解密错误
450wrong tokentoken错误
503service unavailable服务不可用
507balance not enough套餐余量不足
1002other errors其他错误(运营商取号网络超时, 用户手机号无法识别等),请联系客服处理

接口鉴权

网易易盾的所有服务使用签名方法对接口进行鉴权,所有接口每一次请求都需要包含签名信息(signature 参数),以验证用户身份,防止信息被恶意篡改。

申请安全凭证

在第一次使用 API 之前,需申请安全凭证,安全凭证包括 SecretId 和 SecretKey ,SecretId 是用于标识 API 调用者的身份,SecretKey 是用于加密签名字符串和服务器端验证签名字符串的密钥。SecretKey 必须严格保管,避免泄露。

签名生成算法

签名生成方法如下:

  • 对所有请求参数(包括公有参数和私有参数,但不包括 signature 参数),按照参数名ASCII码表升序顺序排序。如:foo=1, bar=2, foo_bar=3, baz=4 排序后的顺序是 bar=2, baz=4, foo=1, foobar=3。
  • 将排序好的参数名和参数值构造成字符串,格式为:key1+value1+key2+value2… 。根据上面的示例得到的构造结果为:bar2baz4foo1foobar3 。
  • 选择与 secretId 配对的 secretKey ,加到上一步构造好的参数字符串之后,如 secretKey=6308afb129ea00301bd7c79621d07591 ,则最后的参数字符串为 bar2baz4foo1foobar36308afb129ea00301bd7c79621d07591。
  • 把上一步骤拼装好的字符串采用 utf-8 编码,使用 MD5 算法对字符串进行摘要,计算得到 signature 参数值,将其加入到接口请求参数中即可。

签名生成示例代码

/**
 * 生成签名信息
 * @param secretKey 产品私钥
 * @param params 接口请求参数名和参数值map,不包括signature参数名
 * @return
 */
public static String genSignature(String secretKey, Map<String, String> params){
    // 1. 参数名按照ASCII码表升序排序
    String[] keys = params.keySet().toArray(new String[0]);
    Arrays.sort(keys);

    // 2. 按照排序拼接参数名与参数值
    StringBuilder sb = new StringBuilder();
    for (String key : keys) {
        sb.append(key).append(params.get(key));
    }
    // 3. 将secretKey拼接到最后
    sb.append(secretKey);

    // 4. MD5是128位长度的摘要算法,转换为十六进制之后长度为32字符
    return DigestUtils.md5Hex(sb.toString().getBytes("UTF-8"));
}
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""生成签名信息
Args:
    secretKey 产品私钥
    params 接口请求参数,不包括signature参数
"""
def gen_signature(secretKey, params=None):
        params_str = ""
        for k in sorted(params.keys()):
            params_str += str(k)+ str(params[k])
        params_str += secretKey
        return hashlib.md5(params_str).hexdigest()
/**
 * 生成签名信息
 * $secretKey 产品私钥
 * $params 接口请求参数,不包括signature参数
 */
function gen_signature($secretKey,$params){
    ksort($params);
    $buff="";
    foreach($params as $key=>$value){
        $buff .=$key;
        $buff .=$value;
    }
    $buff .= $secretKey;
    return md5(mb_convert_encoding($buff, "utf8", "auto"));
}
// 根据secretKey和parameters生成签名
public static String genSignature(String secretKey, Dictionary<String, String> parameters)
{
    parameters = parameters.OrderBy(o => o.Key).ToDictionary(o => o.Key, p => p.Value);
    StringBuilder builder = new StringBuilder();
    foreach (KeyValuePair<String, String> kv in parameters)
    {
        builder.Append(kv.Key).Append(kv.Value);
    }
    builder.Append(secretKey);
    String tmp = builder.ToString();
    MD5 md5 = new MD5CryptoServiceProvider();
    byte[] result = md5.ComputeHash(Encoding.UTF8.GetBytes(tmp));
    builder.Clear();
    foreach (byte b in result)
    {
        builder.Append(b.ToString("x2").ToLower());
    }
    return builder.ToString();
}
var genSignature=function(secretKey,paramsJson){
    var sorter=function(paramsJson){
        var sortedJson={};
        var sortedKeys=Object.keys(paramsJson).sort();
        for(var i=0;i<sortedKeys.length;i++){
            sortedJson[sortedKeys[i]] = paramsJson[sortedKeys[i]]
        }
        return sortedJson;
    }
    var sortedParam=sorter(paramsJson);
    var needSignatureStr="";
    for(var key in sortedParam){
        var value=sortedParam[key];
        needSignatureStr=needSignatureStr+key+value;
    }
    needSignatureStr+=secretKey;
    var md5er = crypto.createHash('md5');//MD5加密工具
    md5er.update(needSignatureStr,"UTF-8");
    return md5er.digest('hex');
};
//根据secretKey和parameters生成签名

func genSignature(secretKey string, params map[string]string) string {
	var keys []string
	for key, _ := range params {
		keys = append(keys, key)
	}
	sort.Strings(keys)
	buf := bytes.NewBufferString("")
	for _, key := range keys {
		buf.WriteString(key + params[key])
	}
	buf.WriteString(secretKey)
	has := md5.Sum(buf.Bytes())
	return fmt.Sprintf("%x", has)
}
Online Chat Tel:95163223