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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 12:15:41