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

使用PHP客户端库与Google Sheets API创建表格失败无报错

问题排查与解决方案

我注意到你的代码里有几个关键问题,会导致表格创建失败却没有任何错误提示,咱们一步步来解决:

1. 必须开启Session

你的代码依赖$_SESSION存储access token,但PHP默认不会自动启动Session,所以一定要在代码最开头加上:

session_start();

如果没开Session,$_SESSION['access_token']根本无法保存,后续请求要么一直跳转到授权页面,要么因为没有有效token静默失败。

2. 添加错误捕获逻辑

Google API客户端在请求失败时会抛出异常,但你的代码完全没有捕获机制,错误信息直接被隐藏了。给创建表格的代码加上try-catch块,就能看到具体问题:

try {
    $spreadsheet = $service->spreadsheets->create($spreadsheet, array('fields' => 'spreadsheetId'));
    echo 'Spreadsheet ID: ' . $spreadsheet->getSpreadsheetId();
} catch (Google_Service_Exception $e) {
    echo 'Google API Error: ' . $e->getMessage();
    // 打印详细错误详情,方便精准排查
    echo '<pre>' . print_r($e->getErrors(), true) . '</pre>';
} catch (Exception $e) {
    echo 'General Error: ' . $e->getMessage();
}

这一步能帮你直接定位问题,比如权限不足、token过期、请求格式错误等。

3. 补充权限范围

你当前只设置了Drive的权限,虽然创建表格需要Drive权限,但建议同时添加Sheets专属权限,避免权限限制导致的静默失败:

$client->setScopes( array(
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/spreadsheets'
) );

4. 修正重定向URI

你的$redirect_uri里的{site}需要替换成实际域名,而且路径/wp-admin/plugins.php/oauth大概率有问题——plugins.php是WordPress的插件管理页面,直接在后面加/oauth不是有效端点,建议改成专门的授权回调文件,比如/wp-admin/google-sheets-callback.php,确保这个文件存在且能正常访问。

5. 调整fields参数

你设置了'fields' => 'spreadsheetId',如果请求失败,API返回的错误信息会被这个参数过滤掉。可以先暂时移除这个参数,或者改成'fields' => '*',获取完整响应内容:

$spreadsheet = $service->spreadsheets->create($spreadsheet);
// 或者
$spreadsheet = $service->spreadsheets->create($spreadsheet, array('fields' => '*'));

整合修复后的完整代码

这里把所有修复点整合到代码里,你可以直接参考:

<?php
session_start(); // 开启Session
require_once __DIR__ . '/vendor/autoload.php';

$client_id = '*********.apps.googleusercontent.com';
$client_secret = '**************************';
$redirect_uri = 'https://your-actual-domain.com/wp-admin/google-sheets-callback.php'; // 替换成实际地址
$client = new Google_Client();
$client->setClientId( $client_id );
$client->setClientSecret( $client_secret );
$client->setRedirectUri( $redirect_uri );
// 补充双权限范围
$client->setScopes( array(
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/spreadsheets'
) );

if ( isset( $_GET['code'] ) ) {
    try {
        $client->authenticate( $_GET['code'] );
        $_SESSION['access_token'] = $client->getAccessToken();
        header( 'Location: ' . filter_var( $redirect_uri, FILTER_SANITIZE_URL ) );
        exit;
    } catch (Exception $e) {
        echo 'Auth Error: ' . $e->getMessage();
        exit;
    }
}

if ( ! isset( $_SESSION['access_token'] ) ) {
    $auth_url = $client->createAuthUrl();
    header( 'Location: ' . filter_var( $auth_url, FILTER_SANITIZE_URL ) );
    exit;
}

$client->setAccessToken( $_SESSION['access_token'] );
// 自动刷新过期的token
if ($client->isAccessTokenExpired()) {
    if ($client->getRefreshToken()) {
        $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());
        $_SESSION['access_token'] = $client->getAccessToken();
    } else {
        // 无刷新token时重新引导授权
        $auth_url = $client->createAuthUrl();
        header( 'Location: ' . filter_var( $auth_url, FILTER_SANITIZE_URL ) );
        exit;
    }
}

$service = new Google_Service_Sheets($client);
$spreadsheet = new Google_Service_Sheets_Spreadsheet(array(
    'properties' => array(
        'title' => 'My New Spreadsheet'
    ),
    'sheets' => array(
        new Google_Service_Sheets_Sheet(array(
            'properties' => array(
                'title' => 'Sheet1',
                'gridProperties' => array(
                    'rowCount' => 20,
                    'columnCount' => 12
                )
            )
        ))
    )
));

try {
    // 暂时移除fields参数,获取完整响应
    $spreadsheet = $service->spreadsheets->create($spreadsheet);
    echo 'Spreadsheet ID: ' . $spreadsheet->getSpreadsheetId();
} catch (Google_Service_Exception $e) {
    echo 'Google API Error: ' . $e->getMessage();
    echo '<pre>' . print_r($e->getErrors(), true) . '</pre>';
} catch (Exception $e) {
    echo 'General Error: ' . $e->getMessage();
}
?>

按照上面的步骤排查,你应该能快速找到失败原因并解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:36:11