直接用 composer require google/apiclient 即可,官方包已支持自动加载,v2.15+ 是唯一推荐版本,需 php ≥7.4 并启用 json、curl、mbstring 扩展,初始化必须 setscopes(),区分服务账号与 oauth 授权,改用 google\service* 命名空间。

直接用 composer require google/apiclient 就够了
不需要手动下载 ZIP、不用改 autoload、更不用自己写 PSR-4 映射。官方包已完整支持 Composer 自动加载,google/apiclient 是唯一推荐的稳定版本(v2.15+),旧版 google/apiclient-services 已被合并进主包,单独 require 会引发类冲突。
执行命令后,vendor/ 下会自动创建 google/apiclient 和其依赖(如 guzzlehttp/guzzle、psr/http-client)。若提示 ext-json missing 或 ext-curl not loaded,说明 PHP 缺少基础扩展——这不是库的问题,而是运行环境没配好。
- PHP 版本需 ≥ 7.4(v2.15 起不再支持 7.2)
- 必须启用
json、curl、mbstring扩展 - 如果用在 CLI 环境(如 cron 脚本),确认
php -m | grep curl有输出
初始化 Client 时必须显式设置 setScopes()
不设 scope 就调 API,十有八九报 401 Invalid Credentials 或 403 Insufficient Permission。Google 不接受“默认全开”,每个请求必须声明最小必要权限。
例如读 Gmail 邮件要用 https://www.googleapis.com/auth/gmail.readonly,写日历要用 https://www.googleapis.com/auth/calendar.events。scope 字符串不能拼错、不能多空格、不能漏 https:// 前缀。
- 多个 scope 用数组传入:
$client->setScopes(['scope1', 'scope2']) - 开发阶段建议先用
https://www.googleapis.com/auth/drive.metadata.readonly测试,它权限低、审批快 - 生产环境上线前,务必去 Google Cloud Console 的 OAuth 同意页面补全应用名称和授权域名,否则用户授权页直接 404
服务账号(Service Account)和 OAuth 2.0 用户授权不能混用
这是最常踩的坑:用服务账号的 JSON 文件调用了需要用户上下文的 API(比如 GmailUsersMessagesResource),结果返回 400 Request had invalid authentication credentials —— 因为服务账号默认代表的是“机器”,不是“某个 G Suite 用户”。
在 Go 中使用 google/wire 实现编译时依赖注入——wire.NewSet、wire.Build、wire.Bind(接口→实现)、wire.Struct、wire.Value、wire.Interface
区分方式很简单:
- 服务账号适合后台任务(如定时同步公司共享 Drive 文件夹),需用
$client->setAuthConfig('service-account.json')+$client->useApplicationDefaultCredentials(),再impersonate('user@domain.com') - 普通用户授权必须走 OAuth 2.流程:先
createAuthUrl()跳转,用户同意后拿到code,再fetchAccessTokenWithAuthCode($code)换 token - 拿到的
access_token有效期 1 小时,必须配合refresh_token自动续期;refresh_token只在首次授权返回一次,要存到数据库或文件里
Google_Service_* 类名已废弃,改用 namespaced 类
v2.0 之后彻底弃用 Google_Service_Drive 这类旧类名。现在所有服务都通过 Google\Service\* 命名空间访问,比如 Google\Service\Drive、Google\Service\Calendar。如果代码里还写 new Google_Service_Drive($client),会触发 Class not found。
新版实例化方式统一为:
$drive = new Google\Service\Drive($client); $files = $drive->files->listFiles(['q' => "name contains 'report'"])->getFiles();
注意参数传递方式也变了:旧版用关联数组(array('q' => ...)),新版仍接受,但部分方法(如 batch())要求传 Google\Service\Drive\DriveFile 实例而非数组。
IDE 自动补全可能滞后,建议以 vendor/google/apiclient/src/Service/ 目录结构为准,别信过时的博客示例。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










