PHP Google Calendar API无错误返回:如何捕获无效日历ID的错误JSON
解决Google Calendar ID校验时的错误捕获问题
嘿,这个问题我之前对接Google Calendar API的时候也踩过坑!你现在的代码没有处理异常,当请求不存在的日历ID时,Google的PHP客户端会直接抛出Google_Service_Exception,导致页面崩溃。要拿到错误的JSON,你需要用异常捕获机制来接住这个错误,然后提取里面的响应信息。
核心思路
Google Calendar PHP客户端在请求失败(比如404找不到资源)时,会抛出Google_Service_Exception异常,这个异常里包含了完整的HTTP响应信息,包括原始的错误JSON。我们只需要用try-catch块包裹请求代码,就能捕获并处理这个错误。
修改后的代码示例
$cal = "GOOGLE CALENDAR ID"; $service = new Google_Service_Calendar($client); try { // 尝试获取日历信息 $calendar = $service->calendars->get($cal); // ID存在时的正常逻辑,比如返回日历标题 echo json_encode([ 'status' => 'success', 'data' => [ 'calendar_id' => $cal, 'title' => $calendar->getSummary() ] ]); } catch (Google_Service_Exception $e) { // 捕获Google服务端返回的错误 // 获取原始错误响应JSON $errorJson = $e->getResponseBody(); // 设置对应的HTTP状态码(比如404) http_response_code($e->getCode()); // 直接输出Google返回的错误JSON echo $errorJson; // 如果你想自定义错误格式,也可以解析后重新输出: // $errorData = json_decode($errorJson, true); // echo json_encode([ // 'status' => 'error', // 'code' => $e->getCode(), // 'message' => $errorData['error']['message'] // ]); } catch (Exception $e) { // 捕获其他非服务端错误(比如网络问题、客户端配置错误) http_response_code(500); echo json_encode([ 'status' => 'error', 'message' => '请求失败:' . $e->getMessage() ]); }
关键说明
Google_Service_Exception:这是Google API客户端库专门用于抛出服务端错误的异常类,当请求返回4xx/5xx状态码时会触发。getResponseBody():这个方法可以直接获取Google返回的原始错误JSON字符串,比如日历ID不存在时,会返回类似这样的内容:{"error":{"code":404,"message":"Not Found","errors":[{"message":"Not Found","domain":"global","reason":"notFound"}],"status":"NOT_FOUND"}}getErrors():如果你不想直接用原始JSON,这个方法会返回一个解析后的错误数组,方便你提取具体的错误信息(比如$e->getErrors()[0]['message'])。- HTTP状态码:用
http_response_code()设置正确的状态码,能让前端或调用方更清晰地判断错误类型。
这样修改后,不管日历ID是否存在,脚本都能正常返回JSON响应,不会再出现页面崩溃的情况。
内容的提问来源于stack exchange,提问作者Lnunes
相关产品推荐
相关产品推荐

