开发指南:
签名生成步骤:
获取当前UNIX时间戳(秒级)
构造签名字符串:
"key={apiKey}×tamp={timestamp}"
使用HMAC-SHA256算法和Secret Key生成签名:
hash_hmac('sha256', 签名字符串, Secret_Key);
将API Key、时间戳和签名放入请求头
请求头示例
X-Api-Key: your_api_key_123 X-Api-Timestamp: 1678901234 X-Api-Sign: 1a2b3c4d... (64字符HMAC-SHA256哈希值)
【PHP】签名生成过程:
1. 获取当前时间戳(秒级): $timestamp = time() 2. 构造签名字符串: "key={$apiKey}×tamp={$timestamp}" 3. 使用HMAC-SHA256算法生成签名: $Sign = hash_hmac('sha256', $signString, $secretKey); // 生成签名 请求头设置: X-Api-Key: 您的API Key X-Api-Timestamp: 使用的时间戳 X-Api-Sign: 生成的签名
<?php // API配置 $apiKey = 'GcDE3tht4TvCfFjJvTZoZtTkai'; $secretKey = 'a9affa8c683c9af023acb00d42cd9541'; $baseUrl = 'https://api.ip13.com/api_path'; // 接口地址 // 1. 准备签名参数 $timestamp = time(); // 当前UNIX时间戳(秒级) // 2. 生成签名字符串 $signString = "key={$apiKey}×tamp={$timestamp}"; // 3. 计算HMAC-SHA256签名 $signature = hash_hmac('sha256', $signString, $secretKey); // 4. 准备请求头 $headers = [ 'X-Api-Key: ' . $apiKey, 'X-Api-Timestamp: ' . $timestamp, 'X-Api-Sign: ' . $signature, 'Content-Type: application/json' // 示例使用JSON格式 ]; // 5. 准备请求数据 (GET请求不需要请求体) $data = [ 'key' => $apiKey, 'param2' => 'value2' ]; // 6. 初始化CURL $ch = curl_init(); // 对于GET请求,参数应该放在URL中 $url = $baseUrl . '?' . http_build_query($data); // 设置CURL选项 curl_setopt_array($ch, [ CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_TIMEOUT => 10, CURLOPT_SSL_VERIFYHOST => false, CURLOPT_SSL_VERIFYPEER => false, // 如果是POST请求,取消下面注释 // CURLOPT_POST => true, // CURLOPT_POSTFIELDS => json_encode($data), ]); // 7. 执行请求 $response = curl_exec($ch); // 检查错误 if (curl_errno($ch)) { echo 'CURL错误: ' . curl_error($ch); } else { // 获取HTTP状态码 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); echo "HTTP状态码: {$httpCode}n"; echo "响应内容: n"; print_r(json_decode($response, true)); } // 8. 关闭CURL curl_close($ch); // =============== 签名生成过程说明 =============== echo "nn=== 签名生成过程 ===n"; echo "1. 使用的时间戳: {$timestamp}n"; echo "2. 签名字符串: "{$signString}"n"; echo "3. 生成的签名: {$signature}n"; echo "4. 发送的请求头: n"; print_r($headers);