开发指南:
签名生成步骤:
-
获取当前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 = '';
$secretKey = 'd41d8cd98f00b204e9800998ecf8427e';
$baseUrl = 'https://www.zhiaoapi.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 "\n\n=== 签名生成过程 ===\n";
echo "1. 使用的时间戳: {$timestamp}\n";
echo "2. 签名字符串: \"{$signString}\"\n";
echo "3. 生成的签名: {$signature}\n";
echo "4. 发送的请求头: \n";
print_r($headers);