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

使用Facebook Business SDK创建PHP广告:广告创意ID获取失败求助

PHP程序化创建Facebook广告完整示例(解决广告创意ID缺失及enroll_status问题)

核心问题解决方案

1. OBJECT_STORY_SPEC的enroll_status配置

使用OBJECT_STORY_SPEC时,必须在spec结构里添加enroll_status字段,值设为'ENABLED',同时要确保你的广告账户已经开通对应广告格式的权限(比如动态创意权限)。

2. 确保广告创意返回ID

不管用不用OBJECT_STORY_SPEC,创建广告创意的参数必须完整符合Facebook API要求,否则不会返回id。如果没拿到ID,先检查必填字段是否遗漏,或者通过API返回的错误信息排查问题。


完整代码示例

1. 初始化SDK及配置

require __DIR__ . '/vendor/autoload.php';

use FacebookAds\Api;
use FacebookAds\Object\AdAccount;
use FacebookAds\Object\AdCampaign;
use FacebookAds\Object\AdSet;
use FacebookAds\Object\AdCreative;
use FacebookAds\Object\Fields\AdCampaignFields;
use FacebookAds\Object\Fields\AdSetFields;
use FacebookAds\Object\Fields\AdCreativeFields;
use FacebookAds\Object\Values\AdCampaignObjectiveValues;
use FacebookAds\Object\Values\AdSetBidStrategyValues;
use FacebookAds\Object\ObjectStorySpec;
use FacebookAds\Object\Fields\ObjectStorySpecFields;
use FacebookAds\Object\LinkData;
use FacebookAds\Object\Fields\LinkDataFields;
use FacebookAds\Object\ImageData;
use FacebookAds\Object\Fields\ImageDataFields;

// 初始化API,替换为你的实际信息
Api::init(
    'YOUR_APP_ID',
    'YOUR_APP_SECRET',
    'YOUR_ACCESS_TOKEN'
);

$account_id = 'act_YOUR_AD_ACCOUNT_ID';
$ad_account = new AdAccount($account_id);

2. 创建广告系列

$campaign = new AdCampaign(null, $account_id);
$campaign->setData(array(
    AdCampaignFields::NAME => '测试流量广告系列',
    AdCampaignFields::OBJECTIVE => AdCampaignObjectiveValues::TRAFFIC,
    AdCampaignFields::STATUS => AdCampaign::STATUS_PAUSED,
    AdCampaignFields::DAILY_BUDGET => 1000, // 单位:分,即10美元
));
$campaign->create();
$campaign_id = $campaign->id;
echo "广告系列ID: " . $campaign_id . "\n";

3. 上传广告图片

// 上传本地图片到广告账户
$image = $ad_account->createImage(array(), array(
    'filename' => '/path/to/your/ad-image.jpg',
));
$image_hash = $image->{ImageDataFields::HASH};
echo "图片哈希值: " . $image_hash . "\n";

4. 创建广告创意(使用OBJECT_STORY_SPEC)

// 构建链接数据
$link_data = new LinkData();
$link_data->setData(array(
    LinkDataFields::MESSAGE => '快来查看我们的新品!',
    LinkDataFields::LINK => 'https://your-website-url.com',
    LinkDataFields::IMAGE_HASH => $image_hash,
));

// 构建OBJECT_STORY_SPEC,添加enroll_status
$object_story_spec = new ObjectStorySpec();
$object_story_spec->setData(array(
    ObjectStorySpecFields::PAGE_ID => 'YOUR_FACEBOOK_PAGE_ID', // 你的Facebook主页ID
    ObjectStorySpecFields::LINK_DATA => $link_data,
    ObjectStorySpecFields::ENROLL_STATUS => 'ENABLED', // 解决enroll_status提示的关键配置
));

// 创建广告创意
$ad_creative = new AdCreative(null, $account_id);
$ad_creative->setData(array(
    AdCreativeFields::NAME => '测试创意',
    AdCreativeFields::OBJECT_STORY_SPEC => $object_story_spec,
));
$ad_creative->create();
$creative_id = $ad_creative->id;
echo "广告创意ID: " . $creative_id . "\n";

5. 创建广告创意(不使用OBJECT_STORY_SPEC)

$ad_creative_alt = new AdCreative(null, $account_id);
$ad_creative_alt->setData(array(
    AdCreativeFields::NAME => '测试创意(常规格式)',
    AdCreativeFields::TITLE => '限时特惠',
    AdCreativeFields::BODY => '全场商品8折,点击了解详情',
    AdCreativeFields::IMAGE_HASH => $image_hash,
    AdCreativeFields::LINK_URL => 'https://your-website-url.com',
    AdCreativeFields::CALL_TO_ACTION_TYPE => 'LEARN_MORE',
));
$ad_creative_alt->create();
$creative_id_alt = $ad_creative_alt->id;
echo "广告创意ID(常规格式): " . $creative_id_alt . "\n";

6. 创建广告组并关联创意

$ad_set = new AdSet(null, $account_id);
$ad_set->setData(array(
    AdSetFields::NAME => '测试广告组',
    AdSetFields::CAMPAIGN_ID => $campaign_id,
    AdSetFields::STATUS => AdSet::STATUS_PAUSED,
    AdSetFields::DAILY_BUDGET => 1000,
    AdSetFields::BID_STRATEGY => AdSetBidStrategyValues::LOWEST_COST_WITHOUT_CAP,
    AdSetFields::TARGETING => array(
        'geo_locations' => array(
            'countries' => ['US'],
        ),
        'age_min' => 18,
        'age_max' => 65,
    ),
    AdSetFields::CREATIVE => array(
        'creative_id' => $creative_id,
    ),
));
$ad_set->create();
echo "广告组ID: " . $ad_set->id . "\n";

关键注意事项

  • 所有大写占位符(如YOUR_APP_ID、YOUR_PAGE_ID)必须替换为你的实际信息。
  • 访问令牌需要包含ads_management、pages_show_list等必要权限,权限不足会导致创建失败。
  • 如果仍遇到enroll_status错误,检查广告账户是否启用了对应广告格式,或联系Facebook支持确认权限。
  • 若创建创意未返回ID,可通过$ad_creative->getLastResponse()查看API返回的错误详情,针对性补充参数。

内容的提问来源于stack exchange,提问作者albrox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:07:44