Google AdWords API AuthorizationError.SERVICE_ACCESS_DENIED

Posted

技术标签:

【中文标题】Google AdWords API AuthorizationError.SERVICE_ACCESS_DENIED【英文标题】: 【发布时间】:2015-07-23 06:47:13 【问题描述】:

我正在尝试向 Google AdWords API 发出任何请求,这将返回非错误。

An error has occurred: [AuthorizationError.SERVICE_ACCESS_DENIED @ ]

我已经使用开发者令牌创建了生产 MCC 帐户,此外我还通过测试帐户在谷歌开发者控制台中创建了测试 MCC 帐户和 OAuth2 应用程序。

此外,我已经使用不同的帐户(生产 MCC、测试 MCC、启用了 adwords 的用户、没有 adwords 的用户)对已发出请求的身份验证应用程序/用户进行了测试

身份验证

适用于任何设置/不同的客户端。我正在获取 access_token、refresh_token 并过期。

这里是 googleads-php-lib 生成的 auth url 示例

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=XXXX&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fadwords&access_type=offline

对 API 的请求

我正在使用 googleads-php-lib/examples 和 curl 进行查询。 我也尝试过不同的服务

这里是来自 googleads-php-lib/examples/AdWords/Auth/CreateAdWordsUserWithoutIniFile.php 的 sn-p

$customerService = $user->GetService("CustomerService");
$customer = $customerService->get();
printf("You are logged in as customer: %s\n", $customer->customerId);

更详细的错误日志

[Jul 22 2015 17:58:57.000000 - ERROR] effectiveUser= service=CustomerService method=get operators= responseTime=233 requestId=00051b757ec645820ac2a364d90c7911 operations=0 units= server=a dwords.google.com isFault=true faultMessage= [AuthorizationError.SERVICE_ACCESS_DENIED @ ]

<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <ResponseHeader xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201506" xmlns="https://adwords.google.com/api/adwords/mcm/v201506">
     <ns2:requestId>00051b848d9382a80ac219c38e02d5f3</ns2:requestId>
   <ns2:serviceName>CustomerService</ns2:serviceName>
   <ns2:methodName>get</ns2:methodName>
   <ns2:operations>0</ns2:operations>
   <ns2:responseTime>466</ns2:responseTime>
 </ResponseHeader>
 </soap:Header>
 <soap:Body>
   <soap:Fault>
     <faultcode>soap:Server</faultcode>
     <faultstring>[AuthorizationError.SERVICE_ACCESS_DENIED @ ]</faultstring>
     <detail>
       <ApiExceptionFault xmlns="https://adwords.google.com/api/adwords/mcm/v201506" xmlns:ns2="https://adwords.google.com/api/adwords/cm/v201506">
         <ns2:message>[AuthorizationError.SERVICE_ACCESS_DENIED @ ]</ns2:message>
        <ns2:ApplicationException.Type>ApiException</ns2:ApplicationException.Type>
          <ns2:errors xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns2:AuthorizationError">
         <ns2:fieldPath/>
         <ns2:trigger/>
         <ns2:errorString>AuthorizationError.SERVICE_ACCESS_DENIED</ns2:errorString>
         <ns2:ApiError.Type>AuthorizationError</ns2:ApiError.Type>
         <ns2:reason>SERVICE_ACCESS_DENIED</ns2:reason>
       </ns2:errors>
     </ApiExceptionFault>
   </detail>
 </soap:Fault>

结论

一般来说,API 确实有效,因为我收到不同的错误,且凭据故意不正确。 例如

AuthenticationError.NOT_ADS_USER

AuthorizationError.USER_PERMISSION_DENIED
我应该从哪个帐户登录以进行测试? 应从哪个帐户创建 OAuth2 应用? 对于这种情况,adwords 范围是否足够? AdWords 是否还有更多适用范围?

感觉好像我错过了一些合乎逻辑的步骤,也许谷歌应该为我批准,还是我需要庄严地向北方发誓

非常感谢任何想法。

【问题讨论】:

该错误的解释是“开发者无权访问服务。”。会不会是你的开发者令牌还没有被批准? 应该是,但文档指出,它与测试帐户无关。 【参考方案1】:

事实证明,Google 只允许生产 MCC 的特定服务,而我没有对其进行测试。

对于其他 AdWords 用户来说,这应该不是问题,因为这种情况是针对我的 MCC 的。

【讨论】:

以上是关于Google AdWords API AuthorizationError.SERVICE_ACCESS_DENIED的主要内容,如果未能解决你的问题,请参考以下文章

Google Adwords API 响应解析

通过 Google Adwords API 获取可用于特定 Adwords 报告的字段列表

Google AdWords API - 报告定义问题

使用google adwords api编码错误

使用 python 获取“成本”google adwords api

Google Adwords API - 刷新令牌 - python