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

PHP调用外部车辆查询API如何捕获错误并向用户反馈

错误处理实现方案

你遇到Undefined index报错的核心原因是:直接读取$decoded['errors']前没有判断该字段是否存在,同时缺失了cURL层请求错误、HTTP响应状态码两层必要校验。

完整处理代码示例

$registration = $_GET['registration'];
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://uat.driver-vehicle-licensing.api.gov.uk/vehicle-enquiry/v1/vehicles",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
    CURLOPT_POSTFIELDS => json_encode(['registrationNumber' => $registration]),
    CURLOPT_HTTPHEADER => array(
        "x-api-key: myapikey",
        "Content-Type: application/json"
    ),
));

$response = curl_exec($curl);

// 1. 处理cURL本身的请求错误(比如网络不通、域名解析失败等)
if (curl_errno($curl)) {
    $showError = '服务请求失败:' . curl_error($curl);
    curl_close($curl);
    // 这里直接输出$showError给用户即可
    echo $showError;
    exit;
}

// 2. 获取API返回的HTTP状态码,判断是否是错误响应
$httpStatusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);

// 3. 解析响应JSON,处理解析失败的情况
$decoded = json_decode($response, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    $showError = '响应解析异常,请稍后重试';
    echo $showError;
    exit;
}

// 4. 处理API返回的业务错误
if ($httpStatusCode >= 400 && isset($decoded['errors'])) {
    // 取第一个错误的详情提示给用户
    $errorInfo = $decoded['errors'][0] ?? [];
    $showError = $errorInfo['detail'] ?? '输入的车辆号牌格式有误,请检查后重新提交';
    echo $showError;
    exit;
}

// 到这里就是正常响应,继续处理车辆数据逻辑即可
var_dump($decoded);

关键逻辑说明

  • 所有读取数组字段的操作前都用isset()或者空合并运算符??做存在性判断,避免出现索引未定义的报错
  • 区分cURL请求错误、HTTP协议错误、业务逻辑错误三类异常场景,分别对应不同的提示文案
  • 错误提示可以直接输出到前端页面展示给终端用户,不需要暴露多余的技术细节

内容的提问来源于stack exchange,提问作者API-heartache

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 02:09:01