Google Ads API - “失败,状态为“PERMISSION_DENIED” - “用户无权访问客户。”

2024-03-27

我正在尝试使用 Google-ads-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](按照文档的指示,除了带有开发者令牌的主帐户[A]之外,创建另一个测试管理员帐户[B]),从此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"

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

因此,.yaml 文件目前包含云控制台 (.json) 文件上帐户 [A] 的开发人员帐户令牌、帐户 [A] 的 OAuth 凭据。由步骤 1 中的身份验证生成的帐户 [B] 的刷新令牌。

继续,通过运行“get_account_information.py”(也在示例文件夹中),并将上述结果中的帐户之一传递给它[强制标志 --c,这是客户端 ID),我不断获得访问权限拒绝错误:

python3 get_account_information.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。我尝试通过 google-ads 的 UI 手动添加帐户 [A] 作为帐户 [B] 的帐户经理,然后尝试为所有这些链接过程中的所有帐户再次设置“登录客户 ID”,但惨败。

我面临示例目录中所有 .py 文件的访问被拒绝的情况。试图让这个漫长的过程尽可能彻底和详细,希望它能有意义。如果您尝试过使用此 API,您就会明白我的意思,并且我期待任何与此相关的见解\帮助\输入,即使您尚未使用过此 API。

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

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


- - - - - - - 解决了 - - - - - - -

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

经过大约一百次尝试后,我在终端中运行了此命令,这是我第 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。

我的 .YAML 看起来像这样

# 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 进行开发时学到的东西提供建议。

谢谢!祝你有美好的一天。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Ads API - “失败,状态为“PERMISSION_DENIED” - “用户无权访问客户。” 的相关文章

  • Python3+Kivy+Plyer 推送通知图标问题

    我在使用 Android 的简单通知测试应用程序时遇到了一个奇怪的错误 错误 python AttributeError type object notification org notificator R drawable has no
  • 在 python 2 和 3 的spyder之间切换

    根据我在文档中了解到的内容 它指出您只需使用命令提示符创建一个新变量即可轻松在 2 个 python 环境之间切换 如果我已经安装了 python 2 7 则 conda create n python34 python 3 4 anaco
  • 如何 json_normalize() df 中的特定字段并保留其他列? [复制]

    这个问题在这里已经有答案了 这是我的简单示例 我的实际数据集中的 json 字段非常嵌套 因此我一次解压一层 我需要在 json normalize 之后保留数据集上的某些列 https pandas pydata org docs ref
  • 如何在算术表达式的结果上添加 SQLAlchemy 标签?

    我如何将这样的东西翻译成 SQLAlchemy select x y as difference 我知道该怎么做 x label foo 但我不确定在哪里放置下面的 label 方法调用 select table c x table c y
  • 返回不包括指定键的字典副本

    我想创建一个函数 返回字典的副本 不包括列表中指定的键 考虑这本词典 my dict keyA 1 keyB 2 keyC 3 致电without keys my dict keyB keyC 应该返回 keyA 1 我想用一行简洁的字典理
  • pandas 两个数据框交叉连接[重复]

    这个问题在这里已经有答案了 我找不到有关交叉联接的任何内容 包括合并 联接或其他一些内容 我需要使用 my function 作为 myfunc 处理两个数据帧 相当于 for itemA in df1 iterrows for itemB
  • 一起使用 Argparse 和 Json

    我是 Python 初学者 我想知道 Argparse 和 JSON 是否可以一起使用 说 我有变量p q r 我可以将它们添加到 argparse 中 parser add argument p param1 help x variabl
  • 如何获取 Matplotlib 生成的散点图的像素坐标?

    我使用 Matplotlib 生成散点图的 PNG 文件 现在 对于每个散点图 除了 PNG 文件之外 我还会also就像生成散点图中各个点的像素坐标列表一样 我用来生成散点图 PNG 文件的代码基本上是这样的 from matplotli
  • Python time.sleep - 永不醒来

    我认为这将是那些简单的问题之一 但它让我感到困惑 停止媒体 我是对的 找到了解决方案 查看答案 我正在使用 Python 的单元测试框架来测试多线程应用程序 很好而且很直接 我有 5 个左右的工作线程监视一个公共队列 以及一个为它们制作工作
  • 与函数复合 UniqueConstraint

    一个快速的 SQLAlchemy 问题 我有一个 文档 类 其属性为 数字 和 日期 我需要确保没有重复的号码同年 是 有没有办法对 数字 年份 日期 进行UniqueConstraint 我应该使用唯一索引吗 我如何声明功能部分 SQLA
  • PermanentTaskFailure:“模块”对象没有属性“迁移”

    我在 google appengine 上使用 Nick Johnson 的批量更新库 http blog notdot net 2010 03 Announcing a robust datastore bulk update utili
  • 使用 pandas 绘制带有误差线的条形图

    我正在尝试从 DataFrame 生成条形图 如下所示 Pre Post Measure1 0 4 1 9 这些值是我从其他地方计算出来的中值 我还有它们的方差和标准差 以及标准误差 我想将结果绘制为具有适当误差线的条形图 但指定多个误差值
  • 如何表示类的实例与将其作为输入的类之间的关系?

    我有一堂课叫House 这个类的实例是house class House def init self height length self height height self length length def housePlan hou
  • python csv按列转换为字典

    是否可以将 csv 文件中的数据读取到字典中 使得列的第一行是键 同一列的其余行构成列表的值 例如 我有一个 csv 文件 strings numbers colors string1 1 blue string2 2 red string
  • 本地设置的 Cython 编译器指令是否影响一个或所有函数?

    我正在努力使用 Cython 加速一些 Python Numpy 代码 并且对 本地 设置 如定义的here http docs cython org en latest src reference compilation html在文档中
  • Windows 与 Linux 文本文件读取

    问题是 我最近从 Windows 切换到 Ubuntu 我的一些用于分析数据文件的 python 脚本给了我错误 我不确定如何正确解决 我当前仪器的数据文件输出如下 Header 有关仪器等的各种信息 Data 状态 代码 温度 字段等 0
  • SpaCy 中的自定义句子边界检测

    我正在尝试在 spaCy 中编写一个自定义句子分段器 它将整个文档作为单个句子返回 我编写了一个自定义管道组件 它使用以下代码来执行此操作here https github com explosion spaCy issues 1850 但
  • 如何使用 FastAPI 在 HTMX 前端中使用 HX-Redirect?

    我试图在登录后在前端重定向 我像这样从我的 htmx 前端发出请求
  • bool() 和operator.truth() 有什么区别?

    bool https docs python org 3 library functions html bool and operator truth https docs python org 3 library operator htm
  • Python 中的迭代器 (iter()) 函数。 [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 对于字典 我可以使用iter 用于迭代字典的键 y x 10 y 20 for val in iter y print val 当

随机推荐

  • 水豚与 :js => true 导致测试失败

    我对 Capybara 和 Rails 测试都很陌生 所以如果这是一个简单的答案 请原谅我 我有这个测试 it should be able to edit an assignment do visit dashboard path sel
  • 在 RabbitMQ 监听器中隐藏运行时异常

    在某些故意发生的情况下 我使用了一些异常来拒绝消息 但在控制台中显示了乍一看似乎不太正常的异常 如何在登录控制台 文件时隐藏该特定异常 我正在使用 spring boot 和默认记录器 public static class Undispa
  • 用于平滑开放 3D 网格边缘的算法

    我有一个 3D 网格 它代表一个具有一些粗糙边界的表面 我想对其进行平滑处理 我使用半边数据结构来存储几何图形 因此我可以轻松地迭代边界边 顶点和面 我还可以使用点积和叉积轻松确定给定的一对边是否是凸 凹的 平滑边缘的最佳方法是什么 使它们
  • MSBuild 使用错误版本的程序集来编译 RDLC 文件

    我正在使用 VS 2010 中的 reportviewer 控件来创建客户端报告 rdlc 在我的开发机器上一切正常 当我手动编译 通过 VS2010 并手动部署到没有安装开发工具的测试机器时 为了让测试机正常工作 无需安装 VS2010
  • 启动失败。未找到二进制文件。 Eclipse Helios 上的 CDT

    我在 Ubuntu 10 04 上使用 Eclipse Helios 并尝试在其上安装 CDT 插件 我从这里下载here http www eclipse org downloads download php file tools cdt
  • 换行 NSButton 标题

    有什么方法可以让 NSButton 标题在宽度比按钮宽度长时换行 而不是被剪裁 我正在尝试创建一个单选按钮 其中的文本可能很长并且有多行 我考虑让它工作的一种方法是使用 NSRadioButton 类型的 NSButton 但无法让多行文本
  • 合并 2 个视频文件时出现问题 [匹配规格后]

    基本上我得到了一个 mp4 和一个 flv 文件 我想连接它们 mp4 应该是简介 所以在问了一个之前关于此的问题 https stackoverflow com questions 34029123 combine 2 flv video
  • 捆绑包标识符与保留捆绑包标识符不同

    我正在尝试在 iTunes 上上传我的应用程序 为此 我创建了一个应用程序 ID 并保留了一个包标识符 在我的项目中 我更改了 info plist 文件中的包标识符 但是 当我尝试在 itunes 上上传我的应用程序时 它显示错误 捆绑包
  • 如何使模式弹出窗口随页面滚动其内容?

    我有一个模式弹出窗口 当它加载高于浏览器高度的内容时 我无法向下滚动以查看其余信息 相反 背景可以滚动 但弹出窗口不会 相反 我想让弹出窗口保持不变 当用户向上或向下滚动时 它会将弹出窗口保留在适当的位置 并让他们滚动到内容的底部 如果您在
  • 为 libcurl 添加自签名 SSL 证书

    我在我的 C 应用程序中使用 libcurl 与我设置的 HTTPS 服务器进行通信 我在该服务器上生成了一个自签名证书 我希望将其与curl 一起使用 我知道将 CURLOPT SSL VERIFYPEER 设置为 0 可以绕过 SSL
  • SQL Server 2014 中具有多个条件的情况

    我有一个表 FinancialTrans 其中有很多字段 但其中只有 3 个字段与我有关 AcctID TransTypeCode DateOfTrans Field 4 Field 5 Field 6 123 TOLL 2016 06 0
  • 如何在 yii 的更新视图中加载多选列表框中选定的列表项?

    我有一个multiple select list box for Staff in Create Service Form 用于在创建新服务时选择多名员工 为此 我可以在一项服务上分配多名员工 I saved staff id字段为 mod
  • 如何对特定文件夹设置777权限? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何对文件夹设置777权限 我需要将以下文件夹的权限设置为777 管理 包含 模块 安装 我不知道如何在 Windows 7 中的特定文件
  • System.Runtime,Version=4.2.1.0,PublicKeyToken=b03f5f7f11d50a3a 的版本高于引用的程序集

    我将 ASP NET CORE 应用程序从 sdk NET Core 2 0 升级到 NET Core 2 1 我可以在本地主机中运行该解决方案 但是当我将其部署到另一台服务器时出现异常 例外情况如下 到目前为止 我为解决该问题所做的步骤如
  • 单击按钮后 React hooks useInterval 重置

    我有钩子 useInterval 它每 10 秒自动下载一次数据 但是我也有按钮 可以在每时每刻手动下载数据 当我单击按钮时 我很难重新启动间隔计时器 所以基本上 如果间隔计数到 5 但我同时单击按钮 间隔应该重新启动 并在下载数据之前再次
  • link_to image_tag 与 Rails 中的内部文本或 html

    我想用 Ruby on Rails 输出以下内容link to and image tag方法 a href Lorem Ipsum img src images menu arrow down gif a Rails 中什么是好方法 您可
  • 为什么在 window 对象中定义 body [重复]

    这个问题在这里已经有答案了 我只是在控制台上玩 注意到如果我输入 body它返回 这显然与window body 因此也返回了 Then document body也返回 正如预期的那样 因为身体是身体的一部分document对象 据我所知
  • CakePhp - 关联数据未保存(但主模型数据确实保存)

    所以 我在 CakePhp 中有一个使用 Formhelper 的表单 此表单中有两个关联模型 Booking 和 Guest 数据库表似乎设置正确 因为页面通过模型中的关联足够准确地填充了值 保存表单数据时 会保存预订信息 但不会保存宾客
  • 如何找出Oracle死锁的原因

    当使用多个用户测试我的应用程序时 我遇到了 ORA 00060 死锁错误 我不确定如何确定此错误的原因 因此如果有人可以帮助我 我将不胜感激 我查看了为此事件生成的跟踪文件 它显示了哪个查询导致了此事件 UPDATE TABLE A SET
  • Google Ads API - “失败,状态为“PERMISSION_DENIED” - “用户无权访问客户。”

    我正在尝试使用 Google ads API 运行 Ubuntu 20 04 Python 3 9 客户端库工作的最低要求是 3 6 使用 google ads api V6 这是我的痛苦故事 我创建了一个测试管理员帐户 A 生成了开发人员