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

HikCentral Professional OpenAPI认证异常:200状态无有效JSON响应求助

问题:PHP cURL调用HikCentral Professional停车费计算API返回200但无法解析JSON

我使用PHP cURL调用HikCentral Professional的parkingfee/calculate API时,请求返回200状态码,但解码响应时提示**“控制字符错误,可能编码不正确”**,无法获取预期的停车费计算JSON结果。此前曾遇到400错误,调整请求头后状态码变为200,但问题仍未解决。怀疑问题出在签名计算或请求头配置上,联系海康技术支持未获得针对性帮助,附上相关代码及错误信息,恳请协助排查。

相关代码

<?php
$apiUrl = "https://your-hikcentral-domain/parkingfee/calculate";
$apiKey = "YOUR_API_KEY";
$apiSecret = "YOUR_API_SECRET";

// 构造请求参数
$requestParams = [
    "parkingLotId" => "PL_001",
    "plateNo" => "京A12345",
    "entryTime" => "2024-06-01 09:00:00",
    "exitTime" => "2024-06-01 11:30:00"
];

// 签名计算(按自身理解实现的逻辑)
$signRaw = http_build_query($requestParams) . $apiSecret;
$sign = md5($signRaw);

// 初始化cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $apiUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestParams));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "X-Api-Key: {$apiKey}",
    "X-Signature: {$sign}"
]);

// 执行请求
$response = curl_exec($ch);
$httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

// 尝试解析JSON
var_dump($httpStatusCode); // 输出:int(200)
$parsedData = json_decode($response, true);
var_dump(json_last_error_msg()); // 输出:string(42) "控制字符错误,可能编码不正确"
?>

错误信息

json_last_error_msg() 返回:控制字符错误,可能编码不正确

排查建议

  • 检查响应原始内容:直接var_dump($response)或用bin2hex($response)查看十六进制形式,确认返回内容是否为标准JSON,是否存在不可见控制字符(如\0、\x01等)或乱码。
  • 核对签名计算逻辑:严格对照海康API文档的签名规则:
    • 确认参数是否按指定规则排序(如字典序升序)
    • 确认签名拼接字符串是否包含所有必要元素(如请求方法、URL路径、参数串、密钥的组合顺序)
    • 确认哈希算法是否与文档一致(如SHA256而非MD5)
  • 校验请求头配置:
    • 确认Content-Type与API要求匹配(部分API可能要求application/x-www-form-urlencoded而非application/json)
    • 检查请求头是否存在多余空格、换行符或编码错误的字符
  • 处理响应压缩:添加cURL选项CURLOPT_ENCODING => 'gzip, deflate',自动解压API返回的压缩内容,避免因未解压导致的解析异常。
  • 统一响应编码:用mb_detect_encoding($response)检测响应编码,若不是UTF-8,转码后再解析:
    $response = mb_convert_encoding($response, 'UTF-8', mb_detect_encoding($response));
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 03:10:14