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

