当前位置: 首页 > 知识库问答 >
问题:

Google广告API-"状态失败"PERMISSION_DENIED"-"用户没有访问客户的权限。"

巫马磊
2023-03-14

我试图与谷歌广告API工作。运行Ubuntu 20.04,Python 3.9(客户端库工作的最低要求是3.6),使用google-ads-api V6。这是我痛苦的故事。

我创建了一个测试管理器帐户[a],生成了一个开发人员的令牌,并拥有使用API的“测试级别”权限,这非常棒。测试级别允许您调用API,以获取与测试帐户(而非生产帐户)有关的信息\报告。

此外,我检查了帐户[A]的整个Oauth2凭据,允许测试电子邮件,在运行“examples/authentication/authenticate_in_web_application.py”后,我被重定向到一个网页,允许我的主测试管理器帐户访问第二个测试管理器帐户[B](按照文档的指示,创建另一个测试管理器帐户[B],除了带有开发者令牌的主帐户[A]),从这个OAuth2提示符成功生成一个刷新令牌,以允许帐户[B]管理我的帐户[A],在我的google-ads.yaml文件中添加了刷新标记,一切都很好。

当我运行这个时。来自示例的py文件

python3 google-ads-python/examples/account_management/list_accessible_customers.py

结果是这样的:

Total results: 2
Customer resource name: "customers/1792845307"
Customer resource name: "customers/5341438919"

可爱,花了两天时间才走到这一步。两天来,我一直在努力克服以下问题。请注意,上述结果均来自我的帐户[B],获取这些结果的API请求是在google-ads.yaml文件中设置帐户[A]的开发者令牌时发出的。

因此,. yaml文件现在包含帐户[A]的Developer帐户令牌,云控制台(. json)文件上帐户[A]的OAuth Creds。步骤1中身份验证产生的帐户[B]的刷新令牌。

继续,通过运行get_account_information.py,它也在示例文件夹中,并将上面的结果[强制标志--c,这是客户端ID)中的一个帐户传递给它,我一直得到一个访问拒绝错误:

python3获取账户信息。py--c 5341438919我明白了:

Request with ID "LhKeU9ZI4zZgnp05VSHbjg" failed with status "PERMISSION_DENIED" and includes the following errors:
Error with message "User doesn't have permission to access customer. Note: If you're accessing a client customer, the manager's customer id must be set in the 'login-customer-id' header. See https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid".```

我尝试过设置“经理的客户id必须在‘登录客户id’中设置”,此登录客户id位于。yaml文件。我已经尝试将其设置为步骤2中调用的两个结果。我还尝试从帐户[A]添加帐户管理员ID。我试图通过谷歌广告的用户界面手动添加账户[A]作为账户[B]的账户经理,然后尝试再次为所有这些账户设置“登录客户id”——这些链接过程失败了。

我面临着所有人都无法进入的局面。示例目录中的py文件。在这个漫长的过程中尽可能地彻底和详细,希望它会有意义。如果你尝试过使用这个API,你会理解我的意思,我期待着任何关于这个API的见解\帮助\输入,即使你没有使用过这个API。

在文档中,指南说,在创建了一个测试开发人员管理者帐户之后,下面的所有帐户也将是测试帐户,并将被一个红色标签指定为“测试”,否则它就是一个生产帐户。上面的两个帐户[A][B]都是测试管理器\开发人员帐户,但没有任何红色标签表明它们是测试,也没有我尝试在它们下面创建的任何子帐户。所以我想知道我面临的错误\障碍是否是因为他们没有被指定为测试帐户?但为什么他们在第二步被列为“可访问帐户”。

谢谢!如果需要任何其他信息,我将提供。

共有1个答案

曾修真
2023-03-14

--------------解决--------------

几个小时后的更新。我创建了另一个新的经理账户,使用了问题中提到的经理账户[B]中使用的相同电子邮件。遵循与上述相同的步骤,但这一次在创建后,我得到了这个“红色测试帐户旗帜”。

我在terminal中运行了这一功能,这是在大约一百次尝试之后的第678次:

u@ROOT:~/google-ads-python$ python examples/account_management/list_accessible_customers.py

[2021-01-12 11:30:08 - INFO] Request made: ClientCustomerId: None, Host: googleads.googleapis.com:443, Method: /google.ads.googleads.v6.services.CustomerService/ListAccessibleCustomers, RequestId: XIkvfX4b-xxNql705r_jbQ, IsFault: False, FaultMessage: None
Total results: 3
Customer resource name: "customers/1792845307"
Customer resource name: "customers/5341438919"
Customer resource name: "customers/3740041699"

那么,实际被认定为测试的新账号是“3740041699”。记下这个号码,它在google-ads.yaml文件中。在“login_customer_id:”下面添加了它,因为它是一个“经理账户”[B],管理我在下面创建的一个子账户。号码为991738295。

我的亚马尔看起来像这样

# OAuth2 configuration
###############################################################################
# The below configuration parameters are used to authenticate using the       #
# recommended OAuth2 flow. For more information on authenticating with OAuth2 #
# see: https://developers.google.com/google-ads/api/docs/oauth/overview       #
###############################################################################

    developer_token: ******** #[ from Account A]
    client_id: ******.apps.googleusercontent.com #[From account A's email, that was used in google cloud console for API OAuth2]
    login_customer_id: 3740041699 [The manager test account B, mentioned above]
    client_secret: ******** #[From account A's email, that was used in google cloud console for API OAuth2]
    refresh_token: 1//********* [After authenticating account A to have access to account B]

现在,当在顶部运行樱桃时,我们有:

u@ROOT:~/examples/basic_operations/get_campaigns.py -c 9917382925 #ID of child of test manager mentioned above, this is the result: 

Campaign with ID 12058644642 and name "Website traffic-Search-1" was found.
[2021-01-12 11:36:39 - INFO] Request made: ClientCustomerId: 9917382925, Host: googleads.googleapis.com:443, Method: /google.ads.googleads.v6.services.GoogleAdsService/SearchStream, RequestId: Py4oeSqyYiQpBFIWuRYgEg, IsFault: False, FaultMessage: None

正如这张图片所示:

5天后终于。现在它起作用了,实际上开始发展了。如果有人正在使用python客户端,并且发现这很有用,我将不胜感激,以建议任何关于服务器和路由的最佳实践,或者他们在使用这个有趣的API开发时学到的东西。

谢谢祝你有美好的一天。

 类似资料:
  • Google Play开发者帐户报告存储在私有的Google云存储桶中。 那么,在PHP中访问私有Google云存储桶真的有可能吗? 我已经尝试了gsutil工具,但这并不能完全满足我的需求。 我们将不胜感激。

  • 我从这里下载了Google API库https://github.com/googleapis/google-api-php-client。我解压缩了它,并将它上传到了我的服务器'/etc/'。然后,我将路径放在脚本中,如下所示: 这都是根据该页面上的文档: 您可以下载整个包。发布页面列出了所有稳定的版本。下载任何名为google-api-php-client-[RELEASE_NAME].zip

  • 我们正在尝试创建一个与谷歌管理SDK的集成,以便能够检索,更新和创建帐户在我们的领域。但是,我们不断收到一个403错误,表明我们没有被授权访问Resource/API。 我们正在使用从一个服务帐户获得的凭据,该帐户启用了域范围的授权,并且具有以下两个作用域:https://www.googleapis.com/auth/admin.directory.user.readonly,https://w

  • 问题内容: 我正在编写用于创建BigQuery和Google Cloud Storage授权的类。 在过去,我已经使用已被 弃用 。我正在尝试使用,但是我发现它只允许在需要使用时使用。 我知道一个可以转换到,但我不知道如何将它们转换成相反的方向(到)。例如,我正在这样创建我的连接: 谁能指出我的实现方向? 谢谢! 问题答案: 在大多数情况下,无论您在哪里使用,都可以使用。您只需要使用一点,那就是在

  • 我正在做YoEmber教程:https://github.com/zoltan-nz/library-app。正在获取以下错误- 按照本教程的要求,我使用以下规则创建了Firebase数据库:尽管如此,数据库仍未通过身份验证。我还从FireBase复制了正确的apiKey、authDomain、databaseURL、projectId、storageBucket和messagingSenderI

  • 我使用Google Drive Android API让用户将他们Android设备上的Google Drive文件上传到我的服务器。我现在想更改此设置,以允许我的服务器使用跨客户端授权直接访问用户Google Drive,这意味着我必须使用生成。这是一切都脱轨了。为了生成此令牌,我需要一个对象。 目前,我正在设置如下: 这工作得很好,它不时显示一个帐户选择器,用户可以在其中选择要连接的帐户。全部