开发文档
- Request URL:http(s)://api.3023data.com + Path & Query String
 - Request Header:key: key
 
或者使用链接(key in URL)请求,如:
http://api.3023data.com/apple/activationlock?key=key&sn=359167074097936
Request Timeout 请求超时时间
300秒
为了防止不可预期的网络波动,请设置足够长的请求超时时间,最长300秒。
如:curl_setopt($ch,CURLOPT_TIMEOUT,300);
并发/线程数限制
对于耗时 1 秒以上的查询,并发/线程数控制在 10 及以内。
原因:过高并发会导致直接判定为无效或不存在(404)。
其他毫秒级响应的服务无并发/线程数限制。
接口错误码所有接口错误码一致
| 400 | Bad Request | 请求参数错误 | 
| 404 | Not Found | 无效或不存在 | 
| 502 | Bad Gateway | 不支持或查询失败 | 
| 503 | Service Unavailable | 繁忙或者临时维护,请稍后重试 | 
| 410 | Gone | 接口已失效/下线 | 
code = 错误码 (int),message = 错误信息 (string)
查询成功:code===0
每次请求均会返回 cost(扣费) 和 balance(余额),方便随时记录和监控
错误(400)和无效(404)一般扣费 0.05 元,其他错误不扣费
用户错误码
| 401 | Unauthorized | 密钥无效 | 
| 402 | Payment Required | 余额不足 | 
| 403 | Forbidden | 无权限(IP白名单限制) | 
接口具体错误信息见 message
如果前端需要返回错误信息,请直接返回 message 的内容
查询成功 code===0
{
	"code": 0,
	"data": {
		"sn": "354434065184270",
		"model": "iPhone 6",
		"fmi": "On"
	},
	"source": "f-i",
	"cost": 0.4,  //扣费
	"balance": 3023  //余额(随时记录和监控余额变化)
}
* 可在每次请求时判断余额到达阈值时触发相应预警逻辑
查询失败
{
	"code": 400,  //错误码
	"message": "请输入正确的IMEI/序列号",  //错误信息
	"cost": 0.02,
	"balance": 3023
}
PHP
<?php
$sn = trim($_GET["sn"]);
$conf = array(
    'key'=>'key',
    'url'=>'http://api.3023data.com/apple/activationlock?sn='.$sn,
    'timeout'=>300
    );
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$conf['url']);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('key: '.$conf['key']));
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
curl_setopt($ch,CURLOPT_DNS_CACHE_TIMEOUT,28800);
curl_setopt($ch,CURLOPT_TIMEOUT,$conf['timeout']);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,10);
$resp = curl_exec($ch);
curl_close($ch);
//echo $resp;
$array = json_decode($resp, true);
if($array['code']===0){  //查询成功(code===0)
	print_r($array);  //返回查询结果
}else{  //查询失败
	if($array['message']){  //可根据情况判断错误码
		echo $array['message'];  //返回错误信息
	}else{
		echo 'Error :'.$resp;  //请求失败(连接超时/网络故障/HTTP 404/服务器无响应等)
	}
}
JAVA
public static void main(String[] args) {
String host = "http://api.3023data.com";
String path = "/apple/activationlock";
String method = "GET";
String key = "key";
Map headers = new HashMap();
headers.put("key", key);
Map querys = new HashMap();
querys.put("sn", "359167074097936");
try {
	HttpResponse response = HttpUtils.doGet(host, path, method, headers, querys);
	System.out.println(response.toString());
	//获取response的body
	//System.out.println(EntityUtils.toString(response.getEntity()));
} catch (Exception e) {
	e.printStackTrace();
}
}    
Python
import urllib, urllib2, sys
import ssl
host = 'http://api.3023data.com'
path = '/apple/activationlock'
method = 'GET'
key = 'key'
querys = 'sn=359167074097936'
bodys = {}
url = host + path + '?' + querys
request = urllib2.Request(url)
request.add_header('key', key)
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
response = urllib2.urlopen(request, context=ctx)
content = response.read()
if (content):
    print(content)
cURL
curl -i -k --get --include 'http://api.3023data.com/apple/activationlock?sn=359167074097936' -H 'key: key'
Objective-C
NSString *key = @"key";
NSString *host = @"http://api.3023data.com";
NSString *path = @"/apple/activationlock";
NSString *method = @"GET";
NSString *querys = @"?sn=359167074097936";
NSString *url = [NSString stringWithFormat:@"%@%@%@",  host,  path , querys];
NSString *bodys = @"";
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString: url]  cachePolicy:1  timeoutInterval:  5];
request.HTTPMethod  =  method;
[request addValue:  [NSString  stringWithFormat:@"%@" ,  key]  forHTTPHeaderField:  @"key"];
NSURLSession *requestSession = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSURLSessionDataTask *task = [requestSession dataTaskWithRequest:request
    completionHandler:^(NSData * _Nullable body , NSURLResponse * _Nullable response, NSError * _Nullable error) {
    NSLog(@"Response object: %@" , response);
    NSString *bodyString = [[NSString alloc] initWithData:body encoding:NSUTF8StringEncoding];
    NSLog(@"Response body: %@" , bodyString);
    }];
[task resume];