Facebook Graph API获取广告报错:ad_reached_countries参数缺失
解决Facebook Graph API v19.0 PHP SDK获取广告存档时的参数传递问题
当使用PHP SDK调用Facebook Graph API的ads_archive端点时,参数必须通过SDK的get()方法的第二个参数以关联数组形式传递,手动拼接URL或修改路径的方式会导致参数无法被正确识别,这就是你收到The parameter ad_reached_countries is required错误的核心原因。
正确的代码实现步骤
确保使用兼容的SDK版本
先通过Composer安装或更新到最新的Facebook PHP SDK,确保支持v19.0:composer require facebook/graph-sdk初始化Facebook实例并传递正确参数
以下是完整的可运行代码示例,注意ad_reached_countries必须以数组形式传入,这是API的强制要求:require_once __DIR__ . '/vendor/autoload.php'; use Facebook\Facebook; // 初始化SDK $fb = new Facebook([ 'app_id' => '你的应用ID', 'app_secret' => '你的应用密钥', 'default_graph_version' => 'v19.0', ]); // 构建请求参数数组 $requestParams = [ // 必填:目标国家/地区,数组格式 'ad_reached_countries' => ['US', 'GB'], // 可选:搜索关键词,多个用逗号分隔或数组形式 'search_terms' => 'sustainable energy', // 可选:指定需要返回的字段,按需调整 'fields' => 'id,ad_creative_body,ad_delivery_start_time,ad_delivery_stop_time', // 可选:限制返回结果数量 'limit' => 20 ]; try { // 调用ads_archive端点,参数作为第二个参数传入 $response = $fb->get('/ads_archive', $requestParams); $adsArchive = $response->getGraphEdge(); // 遍历处理返回的广告数据 foreach ($adsArchive as $ad) { echo "广告ID: {$ad['id']}\n"; echo "广告内容: {$ad['ad_creative_body']}\n"; echo "投放开始时间: {$ad['ad_delivery_start_time']}\n\n"; } } catch(Facebook\Exceptions\FacebookResponseException $e) { echo 'Graph API错误: ' . $e->getMessage(); } catch(Facebook\Exceptions\FacebookSDKException $e) { echo 'SDK错误: ' . $e->getMessage(); }
关键注意事项
- 参数格式要求:
ad_reached_countries必须是数组类型,不能直接传逗号分隔的字符串(如'US,GB'),否则API会识别失败。 - SDK参数传递逻辑:SDK会自动将关联数组转换为URL查询参数,无需手动拼接或修改请求路径,手动操作会破坏SDK的参数处理流程。
- 权限验证:确保你的Facebook应用已经获得了
ads_archive的访问权限,否则即使参数正确,也会返回权限相关错误。 - 字段指定:务必通过
fields参数明确指定需要返回的字段,默认返回的字段非常有限,无法满足多数业务需求。
内容的提问来源于stack exchange,提问作者Tsukimoto Mitsumasa
相关产品推荐
相关产品推荐

