发送post请求到API | PHP



实际上,我需要将适当的POST请求发送到以下包裹跟踪API,该API返回所提供的快递员的运输数据:

API文档:https://www.kd100.com/docs/real-time-shipment-tracking

我遇到的问题是响应:

[code] => 104
[message] => Invalid signature

有没有人可以看看我下面的请求,告诉我我是否根据文件犯了错误?假设密钥、密钥和跟踪数据是正确的,我的请求应该是完全有效的。

My POST Request so far:

$key = 'KEY';
$secret = 'SECRET KEY';
$param = array (
'carrier_id' => 'usps',
'tracking_number' => 'TRACKING #'
);
$post_data = array();
$post_data['param'] = json_encode($param, JSON_UNESCAPED_UNICODE);
$header_data = array();
$header_data['API-Key'] = $key;
$sign = md5($post_data['param'].$key.$secret);
$header_data['signature'] = strtoupper($sign);
$url = 'https://www.kd100.com/api/v1/tracking/realtime';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"signature: $sign",
"API-Key: $key"
));
$result = curl_exec($ch);
$data = json_decode($result, true);
echo '<br/><br/>Start:<br/><pre>';
echo print_r($data);
echo '</pre>';

您的签名不是大写的。您设置了$sign变量,但实际上从未将其设置为大写。你实际上把大写设置为$header_data['signature'],然后从不使用它。

$sign = md5($post_data['param'].$key.$secret);
$header_data['signature'] = strtoupper($sign);

如果你这样写,你的问题就解决了:

$sign = strtoupper(md5(post_data['param'].$key.$secret));

记得清理代码。你实际上没有在任何地方使用$header_data

最新更新