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

PHP读取Google Drive电子表格报403缺少有效API密钥如何解决

问题原因及修复方案

1. 缺失API授权范围配置

Google Client初始化后必须显式声明Sheets API的访问权限,你当前代码没有加这一步,直接触发了权限校验失败。
在初始化Google_Client后添加如下代码:

// 只读权限
$client->addScope('https://www.googleapis.com/auth/spreadsheets.readonly');
// 如果需要编辑权限替换为:$client->addScope('https://www.googleapis.com/auth/spreadsheets');

2. 检查Google Cloud控制台API启用状态

登录你的Google Cloud控制台,进入对应项目的「API和服务」页面,确认Google Sheets API已经处于启用状态,未启用的话API会直接拒绝所有请求,和服务账号权限无关。

3. 给服务账号授予表格访问权限

你创建的服务账号本质是独立的账号身份,需要手动把服务账号的client_email添加到目标Google Sheet的共享用户列表中,授予至少「查看者」权限,否则无法访问私有表格。

4. 修复密钥拼接的潜在问题

你当前手动拼接JSON字符串的方式很容易出现转义错误,比如私钥中的换行符\n被转义失效,导致密钥解析失败。建议直接构造keyFile数组,避免字符串拼接,修正后的完整代码参考:

$keyFile = [
    "type" => $this->generalHelper->getServiceType(),
    "private_key_id" => $this->generalHelper->getPrivateKeyId(),
    "private_key" => $this->generalHelper->getPrivateKey(),
    "client_email" => $this->generalHelper->getClientEmail(),
    "client_id" => $this->generalHelper->getClientId(),
    "auth_uri" => $this->generalHelper->getAuthUri(),
    "token_uri" => $this->generalHelper->getTokenUri(),
    "auth_provider_x509_cert_url" => $this->generalHelper->getAuthProvider(),
    "client_x509_cert_url" => $this->generalHelper->getCertUrl()
];

$client = new Google_Client([
    'projectId' => $this->generalHelper->getProjectId(),
    'keyFile' => $keyFile
]);
// 补充授权范围
$client->addScope('https://www.googleapis.com/auth/spreadsheets.readonly');
$service = new Google_Service_Sheets($client);

try {
    $response = $service->spreadsheets->get($this->generalHelper->getSpreadSheetId());
}catch (Exception $error){
    var_dump($error->getMessage()); exit();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 00:39:04