号码状态检测
2024.11.20 10:20:47
对接运营商权威数据源,根据手机号判断手机号的在网状态,支持实时和离线。
接口说明
- 只支持移动,电信,联通下发的手机卡,广电号暂不支持
- 超时时间建议设置为5S。
鉴权说明
易盾信息认证服务使用签名方法对接口进行鉴权,所有接口每一次请求都需要包含签名信息(signature参数),以验证用户身份,防止信息被恶意篡改。目前支持MD5,SHA1,SHA256,SM3几种加密算法,详细信息,请参见接口鉴权
请求
请求地址
名称 | 值 |
---|---|
HTTP URL | https://verify.dun.163.com/v1/idlephone/check |
HTTP Method | POST |
请求头
名称 | 类型 | 必填 | 描述 |
---|---|---|---|
Content-Type | String | 是 | 固定值:"application/x-www-form-urlencoded" |
请求参数
请求参数由请求公共参数和请求业务参数两部分组成,通用参数见请求通用字段
参数名称 | 类 型 | 必填 | 最大长度 | 描述 |
---|---|---|---|---|
phoneList | String | 是 | 50 | 检测手机号,仅支持国内11位号码。若为空号检测实时版,则仅支持传递1个手机号。若为空号检测离线版,每次最多检测50个手机号,多个手机号码用英文半角逗号隔开。 |
encryptType | String | 是 | 4 | 手机号序列加密方式。 若为空号检测实时版,支持明文和AES两种方式。 0:不加密,2:AES方式,加密密钥为易盾方分配的secretKey。若为空号检测离线版,支持明文和MD5两种方式。0:不加密,1:MD5(32位小写)。选择加密方式时,请将单个手机号加密后再用逗号隔开。 |
请求体示例
phoneList=136xxxxxxxxx&encryptType=0&version=v1&businessId=xxx×tamp=1638180222235&nonce=xxx&secretId=xxx&signature=xxx
响应
响应结果
响应字段如下,响应通用字段已省略,详细见响应公共字段
参数名称 | 类型 | 必须返回 | 描述 |
---|---|---|---|
status | Number | 是 | 检测结果,1 成功,2 失败。 |
requestId | String | 是 | 本次请求数据标识,可以根据该标识查询数据最新结果。 |
isPayed | Number | 是 | 本次请求是否收费标识,1代表收费,0代表不收费。 |
chargeCount | Number | 是 | 计费条数。 |
phoneInfo | Object | 否 | 查询的手机号信息。 |
∟ mobile | String | 否 | 手机号,仅支持国内号码,11位 |
∟ area | String | 否 | 手机号所属区域。样例:省-市。 若手机号是Md5方式加密,将不返回该信息。 |
∟ numberType | String | 否 | 手机号运营商类型。样例:中国移动 GSM。若手机号是Md5加密,将不返回该信息。 |
∟ status | String | 否 | 检测结果,枚举值: 若为空号检测实时版:0:正常使用 1:停机 2:在网但不可用 3:不在网/销号/未启用/异常 4:预销户 5:虚拟号或者号码错误 6:查无记录(号码已收回或者号码从未放出)7:数据源异常,请重试 8:号码频繁使用(24小时内15次) 若为空号检测离线版:0:空号 1:实号 2:停机 3:库无 4:沉默号 5:风险号。 |
响应体示例
{
"code":200,
"msg":"ok",
"result":{
"requestId":"6c2e08568573402eb57d2eadb85fd8eb",
"status":1,
"isPayed":1,
"chargeCount":1,
"phoneInfo":[
{
"mobile":"136xxxxxxxxx",
"area":"浙江-杭州",
"numberType":"中国移动 GSM",
"status":"1"
}
]
}
}
响应返回码
响应返回码见:响应返回码
AES加密代码
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
public class SecurityAESTool {
/**
* AES加密
*
* @param str
* 明文
* @param key
* 秘钥
* @return
*/
public static String encrypt(String str, String key) {
byte[] crypted = null;
try {
SecretKeySpec skey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skey);
String enStr = str;
crypted = cipher.doFinal(enStr.getBytes("UTF-8"));
} catch (Exception e) {
System.out.println(e.toString());
}
String body = Base64.encodeBase64String(crypted);
return body;
}
/**
* AES解密
*
* @param input
* @param key
* @return
*/
public static String decrypt(String input, String key) {
byte[] output = null;
String body = null;
if (input == null || key == null) {
return null;
}
try {
SecretKeySpec skey = new SecretKeySpec(key.getBytes("UTF-8"), "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, skey);
byte[] b = Base64.decodeBase64(input);
// 解密
output = cipher.doFinal(b);
body = new String(output, "UTF-8");
} catch (Exception e) {
System.out.println(e.toString());
}
return body;
}
public static void main(String[] args) {
String key = "12345678123456781234567812345678"; // 易盾分配的密钥
String data = "12312341234"; // 手机号
String encodeKey = DigestUtils.md5Hex(key).toLowerCase().substring(0, 16);
String enStr = SecurityAESTool.encrypt(data, encodeKey);
System.out.println(enStr);
}
}