开发指南:
请求参数+SK进行拼接,并计算拼接后字符串md5值(字符必须为小写),即为签名(sign):
例:请求查询IP接口
/api/ip/query?key=&ip=8.8.8.8
签名过程(后面粗体字符串是SK):
md5("key=&ip=8.8.8.8d41d8cd98f00b204e9800998ecf8427e")
签名结果:
e39b4a84ec993023d583a7273037beef
接口参数均正常请求,但
签名要在请求头Header中提交:
提交签名:用你的开发语言
添加"sign:e39b4a84ec993023d583a7273037beef"到请求头
以上是请求签名sign的计算全过程!
注意:计算 sign 要使用原始参数值,不要进行任何编码,但最终发送时的参数,是需要进行Urlencode编码的
<?php
/**
* API请求DEMO
*
* 本demo支持GET与POST请求,同时支持签名验证与无需签名。
*/
//你申请的key密钥
$API_KEY = '';
//API接口地址
$API_URL = 'https://apikey.net/api/ip/query';
$get_post_data = array(
//接口参数,一行一个,可按照用户控制台->开发工具 的参数填写,或者直接复制开发工具下面的测试代码。
'key' => $API_KEY,
'ip' => '8.8.8.8',
);
//签名校验的 SK:(在用户控制台https://apikey.net/user/key的秘钥安全设置->签名校验 开启后才会生效,没开启签名校验留空即可。)
$sk = 'd41d8cd98f00b204e9800998ecf8427e';
/*发起请求API接口:
第1个参数:API接口地址URL,跟上面的同名变量相对应,无需更改。
第2个参数:API接口参数数组,跟上面的同名变量相对应,无需更改。
第3个参数:请求协议(GET或POST),一般默认GET,部分接口需要POST请求,根据实际情况修改为POST即可。
第4个参数:是否验证签名,true验证签名,否则false不验证签名,根据用户控制台 https://apikey.net/user/key 的 秘钥安全设置->签名校验 开启后才会生效,如没开启,填写false即可。
第5个参数:如果第4个参数开启验证签名,此处必须填写 SK ,跟上面的同名变量相对应,无需更改。
*/
$resdata = api::send($API_URL, $get_post_data, 'GET', true, $sk); //发起请求,注意这里要选择接口支持的协议,默认GET,可选POST
//打印请求结果
print($resdata);
///////////////你的业务代码可写在这里处理API返回的数据
/**
* API请求类
*/
class api
{
public static function send($API_URL, $get_post_data, $type, $ifsign, $sk)
{
$get_post_data = http_build_query($get_post_data);
if ($ifsign) {
$sign = md5($get_post_data . $sk);
$res = self::send_curl($API_URL, $type, $get_post_data, $sign);
} else {
$res = self::send_curl($API_URL, $type, $get_post_data, null);
}
return $res;
}
//封装好的CURL请求函数,支持POST|GET
public static function send_curl($API_URL, $type, $get_post_data, $sign)
{
$ch = curl_init();
if ($type == 'POST') {
curl_setopt($ch, CURLOPT_URL, $API_URL);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $get_post_data);
} elseif ($type == 'GET') {
curl_setopt($ch, CURLOPT_URL, $API_URL . '?' . $get_post_data);
}
if ($sign) {
curl_setopt($ch, CURLOPT_HTTPHEADER, ['sign:' . $sign]);
}
curl_setopt($ch, CURLOPT_REFERER, $API_URL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$resdata = curl_exec($ch);
curl_close($ch);
return $resdata;
}
}