You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP调用KD100实时物流追踪API返回104无效签名问题求助

KD100实时物流追踪API签名无效错误修复

问题表现

调用接口返回104错误码,提示Invalid signature,已确认API Key、Secret Key、运单查询参数填写无误。

原代码存在的规范问题

  • 签名传值不一致:代码中计算签名后已做大写转换存入$header_data数组,但实际传入curl请求头的signature字段使用的是未转大写的原始MD5值,和服务端校验要求的大写签名不匹配
  • 请求体格式与声明的Content-Type不符:请求头声明Content-Type: application/json,但实际传参使用http_build_query()将参数转为表单格式,还额外套了一层param外层键,服务端解析到的请求体和参与签名计算的内容不一致
  • 签名计算的基准内容错误:签名计算时使用的是包裹了param键的表单对应JSON串,和实际要求参与签名的、直接传递的业务参数JSON串不匹配,直接导致签名校验失败

修正后代码

$key = '你的实际API Key';
$secret = '你的实际Secret Key';
$param = array (
    'carrier_id' => 'usps',
    'tracking_number' => '实际查询运单号'
);
// 直接生成JSON格式请求体,不额外包裹param层,不做表单格式转换
$request_body = json_encode($param, JSON_UNESCAPED_UNICODE);
// 按规则生成签名:请求体JSON串拼接API Key、Secret Key后做MD5,结果转大写
$sign = strtoupper(md5($request_body . $key . $secret));

$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, $request_body);
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>';
print_r($data);
echo '</pre>';

内容的提问来源于stack exchange,提问作者user19469716

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 04:51:22