Facebook Graph API 中获取广告账户列表的正确用法
#技术教程 发布时间: 2026-01-13
本文详解如何正确调用 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 {
$r
esponse = $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 列表的唯一标准路径。
技术教程SEO上一篇 : Golang Web服务响应慢如何排查_Web性能分析步骤说明
下一篇 : DeepSeek无法解析复杂的数学公式图片_建议将公式转为LaTeX代码字符串后提问
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!
esponse = $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());
}