返回
解决 PHP Google Ads API \
php
2024-03-03 23:25:08
在 PHP 中使用网页端客户端或服务帐号访问 Google Ads API 时解决 "OAUTH_TOKEN_HEADER_INVALID" 错误
简介
在使用 PHP 通过网页端客户端或服务帐号访问 Google Ads API 时,你可能会遇到 "OAUTH_TOKEN_HEADER_INVALID" 错误。本文将探讨此错误的潜在原因,并提供详细的解决方法。
错误原因
此错误表明请求缺少必要的身份验证凭据,具体来说,是 OAuth 2 访问令牌。原因可能包括:
- 无效或过期的身份验证凭据: 客户端 ID、客户端秘钥、刷新令牌或服务帐号密钥文件不正确或已过期。
- 未包含授权标头: 请求中未包含必需的 "Authorization: Bearer " 标头,后跟访问令牌。
- 权限不足: 未向网页端客户端或服务帐号授予访问 Google Ads API 所需的权限。
- 错误的模拟邮箱: 在模拟服务帐号时使用的邮箱与服务帐号不匹配。
解决方法
网页端客户端:
- 验证凭据: 确认提供的客户端 ID、客户端秘钥和刷新令牌与网页端客户端相匹配。
- 检查权限: 确保网页端客户端已授予必要的权限,如 https://www.googleapis.com/auth/adwords。
- 使用身份验证库: 考虑使用 Google 官方提供的 PHP 身份验证库,简化 OAuth 2 流程。
服务帐号:
- 授予权限: 向服务帐号授予访问 Google Ads API 的权限,如 https://www.googleapis.com/auth/adwords。
- 使用正确的邮箱: 在模拟服务帐号时,使用与其关联的邮箱。
- 检查委派范围: 确保在创建服务帐号时启用了 "域级委派" 范围。
- 检查邀请: 接受服务帐号发送的邀请,使其访问 Google Ads 管理员帐户。
通用步骤:
- 检查请求头: 确保请求包含 "Authorization: Bearer " 标头,后跟访问令牌。
- 查看 API 文档: 参考 Google Ads API 文档,了解正确使用身份验证的指南。
- 启用日志记录: 启用 API 日志记录以获得更详细的错误信息。
- 联系 Google 支持: 如果问题持续存在,请联系 Google 支持寻求帮助。
示例代码
网页端客户端:
// 创建 OAuth2TokenBuilder 对象
$oauth2 = new OAuth2TokenBuilder();
// 设置客户端 ID、客户端秘钥和刷新令牌
$oauth2->setClientId(YOUR_CLIENT_ID);
$oauth2->setClientSecret(YOUR_CLIENT_SECRET);
$oauth2->setRefreshToken(YOUR_REFRESH_TOKEN);
// 构建 OAuth2Credential 对象
$oauth2Credential = $oauth2->build();
服务帐号:
// 创建 OAuth2TokenBuilder 对象
$oauth2 = new OAuth2TokenBuilder();
// 设置 JSON 密钥文件路径和范围
$oauth2->setJsonKeyFilePath(YOUR_SERVICE_ACCOUNT_KEY_FILE_PATH);
$oauth2->setScopes(['https://www.googleapis.com/auth/adwords']);
// 设置模拟邮箱
$oauth2->setImpersonatedEmail(YOUR_SERVICE_ACCOUNT_EMAIL);
// 构建 OAuth2Credential 对象
$oauth2Credential = $oauth2->build();
结论
通过遵循本文中概述的步骤,你应该能够解决使用 PHP 通过网页端客户端或服务帐号访问 Google Ads API 时出现的 "OAUTH_TOKEN_HEADER_INVALID" 错误。请务必根据具体情况调整代码示例和解决方案。
常见问题解答
-
为什么使用服务帐号进行身份验证?
- 服务帐号是一种非交互式帐户,可用于自动化对 Google 服务的访问,而无需用户交互。
-
如何创建网页端客户端?
- 请访问 https://console.developers.google.com/apis/credentials 创建网页端客户端。
-
如何获得服务帐号密钥文件?
- 在 Google Cloud Platform 控制台中,访问 "服务帐号" 部分并创建一个新服务帐号。下载 JSON 密钥文件。
-
如果我仍然遇到问题,该怎么办?
- 查看 API 日志以获取错误详细信息,或联系 Google 支持寻求帮助。
-
除了上面提到的方法外,还有其他解决此错误的方法吗?
- 确保服务器时间与 Google 服务器时间同步。