
本文详解如何正确调用 facebook graph api 获取用户关联的广告账户(adaccounts),解决因误用已废弃路径 `/adaccountgroups` 导致的 “unknown path components” 错误,并提供 sdk 调用示例与关键注意事项。
Facebook 官方文档在历史版本中曾短暂提及 /adaccountgroups 路径,但该端点从未正式上线,属于文档错误或遗留占位内容。实际开发中,若调用 GET /me/adaccountgroups,Graph API 会明确返回错误:Unknown path components: /adaccountgroups —— 这表示服务器根本不识别该路径。
要获取当前用户(/me)所拥有或有权限访问的广告账户列表,唯一有效且受支持的端点是 /me/adaccounts,对应 Marketing API 的 AdAccount 边缘(edge)。该接口返回一个包含多个 AdAccount 对象的数组,每个对象含 id、name、account_status 等关键字段。
以下是使用 Facebook PHP SDK v5+ 的正确调用方式(适配 v13.0 及以上 Graph 版本):
use Facebook\Facebook;
use Facebook\Exceptions\FacebookResponseException;
use Facebook\Exceptions\FacebookSDKException;
$fb = new Facebook([
'app_id' => '621201298943758',
'app_secret' => 'f0aa4ae743ef.................',
'default_graph_version' => 'v13.0', // ⚠️ 务必升级至当前稳定版,v2.5 已废弃多年
'default_access_token' => 'EAAI0ZBrLB7w4BAIUyoGjSB50ZBsXbPxYfCjk6WxPQIa.................................',
]);
try {
$response = $fb->get('/me/adaccounts'); // ✅ 正确路径:/me/adaccounts
$graphEdge = $response->getGraphEdge();
foreach ($graphEdge as $account) {
echo "ID: " . $account['id'] . "\n";
echo "Name: " . $account['name'] . "\n";
echo "Status: " . $account['account_status'] . "\n";
echo "---\n";
}
} catch (FacebookResponseException $e) {
error_log('Graph API Error: ' . $e->getMessage());
// 示例:Error 100 - Unsupported get request. Object with ID 'me' does not exist
} catch (FacebookSDKException $e) {
error_log('SDK Error: ' . $e->getMessage());
}? 关键注意事项:
- API 版本必须匹配:将 'default_graph_version' 显式设为 'v13.0' 或更高(如 'v19.0'),旧版(如 v2.5)不仅不支持 /me/adaccounts 的完整功能,还可能因权限模型变更导致鉴权失败;
- 访问令牌需具备相应权限:确保 access token 拥有 ads_management 权限,且用户已授权该应用管理其广告账户;
- 无 adaccountgroups 实体:Facebook Marketing API 中不存在“广告账户组”(Ad Account Group)这一资源类型,切勿尝试构造 /adaccountgroups、/me/adaccountgroups 或 /act_{id}/adaccountgroups 等路径;
- 分页处理:当用户关联大量广告账户时,响应默认仅返回 25 条,需通过 after 游标参数处理分页($graphEdge->getNextPage());
- 调试建议:使用 Graph API Explorer 手动测试 GET /me/adaccounts?fields=id,name,account_status,确认 token 权限与响应结构后再集成到代码中。
简言之:忘掉 adaccountgroups,坚定使用 /me/adaccounts —— 这是获取用户广告账户 ID 列表的唯一标准路径。









