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
相关产品推荐
相关产品推荐

