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

如何通过终端完成Google API OAuth2.0认证?(PHP调用场景)

当然可以通过终端完成Google API的OAuth2.0认证!我之前帮不少开发者解决过类似的Google Photos API终端认证问题,给你一套亲测有效的操作方案:

一、先搞定环境与依赖准备
  • 确保你的PHP项目已经安装了Google官方的客户端库,用Composer安装的话,终端执行:composer require google/apiclient:^2.0
  • 检查PHP的curl扩展是否启用,终端输入php -m | grep curl,能看到curl字样就说明没问题,要是没看到得先开启这个扩展。
二、把OAuth2配置改成终端适配的模式

原来的Web端认证是跳浏览器的,终端没有浏览器环境,所以得用设备授权流(Device Authorization Flow)。你需要修改PHP代码里的认证逻辑,替换成下面的示例代码:

<?php
require __DIR__ . '/vendor/autoload.php';

// 初始化Google客户端
$client = new Google\Client();
$client->setApplicationName('Google Photos 终端测试');
// 这里根据你的需求改权限,比如只读就用PHOTOSLIBRARY_READONLY
$client->setScopes([Google\Service\PhotosLibrary::PHOTOSLIBRARY_READONLY]);
// 加载你从Google Cloud下载的密钥文件
$client->setAuthConfig('credentials.json');
$client->setAccessType('offline'); // 允许获取刷新令牌,下次不用重复认证
$client->setPrompt('select_account consent');

// 切换到设备授权流逻辑
$oauthService = $client->getOAuth2Service();
$deviceAuthResponse = $oauthService->deviceCode()->create([
    'client_id' => $client->getClientId()
]);

// 输出终端提示信息
echo "请在浏览器中打开以下链接:\n" . $deviceAuthResponse['verification_url'] . "\n";
echo "输入验证码:" . $deviceAuthResponse['user_code'] . "\n";
echo "请完成账号登录与授权,我会在这里等待...\n";

// 轮询获取访问令牌
$accessToken = null;
$interval = $deviceAuthResponse['interval'];
while (true) {
    try {
        $accessToken = $client->fetchAccessTokenWithAuthCode($deviceAuthResponse['device_code']);
        break;
    } catch (Google\Exception $e) {
        // 授权还在处理中,等待指定时间后重试
        if ($e->getCode() === 400 && str_contains($e->getMessage(), 'authorization_pending')) {
            sleep($interval);
            continue;
        }
        // 其他错误直接抛出
        throw $e;
    }
}

// 把令牌保存到本地,下次执行脚本直接加载,不用再认证
file_put_contents('token.json', json_encode($accessToken));
$client->setAccessToken($accessToken);

// 接下来就可以调用Google Photos API了,比如获取相册列表
$photosService = new Google\Service\PhotosLibrary($client);
$albums = $photosService->albums->listAlbums();

echo "\n获取到的相册列表:\n";
foreach ($albums as $album) {
    echo "- " . $album->getTitle() . "\n";
}
三、终端执行与认证的具体步骤
  • 先去Google Cloud控制台,创建一个桌面应用类型的OAuth客户端ID,下载对应的credentials.json文件,放到你的PHP脚本同一目录下(注意:不能用Web应用类型的客户端ID,否则设备流会报错)。
  • 终端切换到脚本所在目录,执行php your-script-name.php(把your-script-name换成你的PHP文件名)。
  • 按照终端里的提示,打开给出的链接,在浏览器里登录你的Google个人账号,输入显示的验证码,完成授权。
  • 回到终端,等待几秒,脚本会自动获取到令牌并保存为token.json,之后再执行脚本就不用重复走认证流程了。
四、常见问题排查
  • 如果提示client_id无效:检查你的credentials.json是不是桌面应用类型的,Web应用的客户端ID不支持设备授权流。
  • 如果出现权限不足的错误:确认你在Google Cloud控制台的OAuth同意屏幕里,已经添加了需要的权限(比如photoslibrary.readonly),并且你的账号已经完成了授权同意。
  • 如果Composer依赖报错:执行composer dump-autoload重新加载自动加载文件,或者重新安装依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:04:35