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

PHP调用Google Ads API遇OAUTH_TOKEN_HEADER_INVALID错误求助

解决Google Ads API认证错误(OAUTH_TOKEN_HEADER_INVALID/NOT_ADS_USER)

核心问题排查与修复

针对OAUTH_TOKEN_HEADER_INVALID错误

  1. 检查Customer ID格式
    Google Ads API要求Customer ID为不带连字符的10位纯数字(例如1234567890,而非后台显示的123-456-7890)。验证getCustomerId()返回的格式是否符合要求,若带连字符需去除。

  2. 验证Access Token有效性
    调用令牌校验接口检查拿到的access_token:

    curl https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=你的token值
    

    确认返回结果中:

    • scope包含https://www.googleapis.com/auth/adwords
    • expires_in未过期
    • aud与你的OAuth2客户端ID/服务账号ID匹配
  3. 检查GoogleAdsClient构建配置
    尝试移除usingGapicV2Source(true)参数,使用默认的Gapic V3版本:

    $this->client = (new GoogleAdsClientBuilder())
            ->withOAuth2Credential($oauth2)
            ->withDeveloperToken(config('google.developer_key'))
            ->build();
    

    旧版Gapic V2可能存在与新版SDK的兼容性问题,导致授权头传递异常。

  4. 排查Laravel中间件干扰
    检查项目中是否有中间件修改了HTTP请求头,尤其是Authorization字段。可以通过日志输出实际发送请求的头信息,确认格式为Bearer <完整token>,无截断、空格缺失等问题。

针对NOT_ADS_USER错误(服务账号模拟场景)

  1. 修正ImpersonateEmail参数
    服务账号不能直接作为Google Ads用户,withImpersonatedEmail()必须填写已在Ads账号中拥有管理员权限的域用户邮箱(即你提到的域管理员+Ads管理员邮箱),而非服务账号自身的邮箱。

  2. 无需邀请服务账号到Ads账号
    服务账号通过全域委派模拟域用户身份,无需单独邀请服务账号加入Ads账号。只要被模拟的域用户已在Ads账号中具备权限,服务账号即可通过该身份发起请求。

  3. 确认全域委派配置
    在Google Workspace admin控制台:

    • 服务账号已启用全域委派
    • 已添加https://www.googleapis.com/auth/adwords作为委派作用域
    • 委派权限已应用到目标域用户

代码细节验证

OAuth2 Web项目方式

  • 确认client_id、client_secret为Web项目的凭证(而非服务账号的)
  • 确认refresh_token未过期、未被撤销(测试模式下若重新授权,旧refresh_token会失效)

服务账号方式

  • 确认JSON密钥文件为服务账号的密钥文件(下载自Google Cloud控制台的服务账号详情页)
  • 确认withScopes()传入的是正确的adwords作用域字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:03:16