PHP调用Google Analytics 4 Admin API如何正确传入access_token
GA4 Admin API PHP客户端正确鉴权方式
你当前代码的核心问题有两个:一是手动传access_token的参数位置错误,二是大概率没有给鉴权身份配置GA4账户的访问权限。以下是两种可直接运行的正确实现:
方式一:服务账号自动鉴权(官方推荐,无需手动管理token)
你已经持有服务账号JSON凭据的前提下,不需要手动生成、传入access_token,Google官方客户端库会自动完成token的申请、刷新全流程,只需要提前完成1步权限配置:
- 登录GA4管理员后台,进入对应账户的「账号访问管理」页面,将服务账号JSON文件中
client_email字段对应的邮箱添加为账户成员,授予「查看者」及以上权限,必须完成这步配置,否则鉴权通过后也会因为权限不足无法拉取账户列表。
对应实现代码:
require 'vendor/autoload.php'; use Google\Analytics\Admin\V1alpha\AnalyticsAdminServiceClient; // 指定服务账号凭据路径 putenv('GOOGLE_APPLICATION_CREDENTIALS=config.json'); // 初始化客户端,无需手动传入token $client = new AnalyticsAdminServiceClient(); // 拉取账户列表 $accountList = $client->listAccountSummaries(); foreach ($accountList as $account) { echo "账户名:{$account->getDisplayName()},资源ID:{$account->getName()}" . PHP_EOL; } // 用完关闭客户端连接 $client->close();
方式二:手动传入已生成的access_token
如果你已经通过OAuth2流程或者服务账号接口提前生成了有效access_token,不能直接在构造函数根配置下传access_token参数,需要嵌套在credentials配置项中传入,同时要保证token申请时包含了GA4 API的访问权限scope(至少需要https://www.googleapis.com/auth/analytics.readonly权限)。
对应实现代码:
require 'vendor/autoload.php'; use Google\Analytics\Admin\V1alpha\AnalyticsAdminServiceClient; $accessToken = "替换为你实际生成的有效access_token"; $expireAt = time() + 3600; // 替换为你的token实际过期时间戳 // 正确传入手动生成的token $client = new AnalyticsAdminServiceClient([ 'credentials' => [ 'access_token' => $accessToken, 'expires_at' => $expireAt ] ]); $accountList = $client->listAccountSummaries(); foreach ($accountList as $account) { echo "账户名:{$account->getDisplayName()},资源ID:{$account->getName()}" . PHP_EOL; } $client->close();
常见踩坑点
- 不要同时配置
GOOGLE_APPLICATION_CREDENTIALS环境变量和手动传入access_token,会触发鉴权逻辑冲突 - 手动生成的access_token有效期默认是1小时,过期后需要重新生成,否则调用会返回401鉴权失败错误
- 如果调用后返回空列表,优先检查鉴权对应的身份(服务账号邮箱/OAuth授权用户)是否已经被添加到GA4账户的成员列表中,这是最高发的问题原因
内容的提问来源于stack exchange,提问作者Dipti Gajjar
相关产品推荐
相关产品推荐

