Google Ads API技术问询:如何获取管理器账户下全部子/关联账户?
问题:无法通过
listAccessibleCustomers获取管理器账户下的所有子/关联账户 调用Google Ads API的listAccessibleCustomers方法尝试列出管理器账户下的所有子账户,但该方法仅返回主客户账户,未返回子/关联账户。已确认拥有子账户访问权限(可成功获取某子账户的广告系列列表),需要返回google_ads_php.ini中指定的loginCustomerId对应账户下的所有子/关联账户。
所用代码
$this->auth(); $customerServiceClient = $this->googleAdsClient->getCustomerServiceClient(); // 请求列出所有可访问的客户账户 $accessibleCustomers = $customerServiceClient->listAccessibleCustomers(); // 遍历所有可访问客户的资源名称 $allitems = array(); foreach ($accessibleCustomers->getResourceNames() as $resourceName) { /** @var string $resourceName */ array_push($allitems,array("name"=>$resourceName)); } return array("count"=>count($accessibleCustomers->getResourceNames()),"items"=>$allitems);
返回结果
array(2) { ["count"]=> int(2) ["items"]=> array(2) { [0]=> array(1) { ["name"]=> string(20) "customers/**********" } [1]=> array(1) { ["name"]=> string(20) "customers/**********" } } }
解决方案:使用
CustomerClientService获取子账户列表 listAccessibleCustomers仅返回当前认证用户有权访问的顶层客户账户,不会递归返回管理器账户下的子账户层级。要获取指定管理器账户下的完整子/关联账户列表,需调用CustomerClientService的listCustomerClients方法,并通过递归遍历处理子管理器账户的下级账户。
示例代码
$this->auth(); // 获取CustomerClientService客户端 $customerClientServiceClient = $this->googleAdsClient->getCustomerClientServiceClient(); // 替换为google_ads_php.ini中指定的loginCustomerId $managerCustomerId = '你的管理器账户ID'; $customerResourceName = "customers/{$managerCustomerId}"; // 存储所有子账户的数组 $allChildAccounts = []; // 递归遍历客户层级 function traverseChildAccounts($client, $resourceName, &$accounts) { $response = $client->listCustomerClients($resourceName); foreach ($response->getCustomerClients() as $customerClient) { $account = [ 'name' => $customerClient->getResourceName(), 'customer_id' => $customerClient->getCustomerId(), 'descriptive_name' => $customerClient->getDescriptiveName() ]; $accounts[] = $account; // 若当前子账户是管理器,继续递归遍历其子账户 if ($customerClient->getManager()) { traverseChildAccounts($client, $customerClient->getResourceName(), $accounts); } } } // 启动遍历 traverseChildAccounts($customerClientServiceClient, $customerResourceName, $allChildAccounts); return [ "count" => count($allChildAccounts), "items" => $allChildAccounts ];
关键说明
listCustomerClients方法:专门用于获取指定客户账户的直接子客户(包含子管理器和普通广告账户)。- 递归遍历:如果子账户本身是管理器账户,需继续调用该方法,才能获取完整的账户层级结构。
- 权限要求:确保当前认证用户对目标管理器账户及其所有子账户拥有
READ或MANAGE级别的访问权限。
内容的提问来源于stack exchange,提问作者Shaun Scholtz
相关产品推荐
相关产品推荐

