Не удается создать набор объявлений с помощью Facebook Business SDK - PullRequest
1 голос
/ 30 марта 2019

Мы используем Laravel 5.7, PHP 7.1 и XAMPP 3.2.2. Мы хотим создавать кампании Facebook, используя PHP Business SDK и Marketing API.

Кампания успешно создана с использованием следующего исходного кода

/* Start Campaign*/
$fields = array(
);
$params = array(
    'name' => $request->campaign_name,
    'objective' => 'LINK_CLICKS',
    'status' => 'PAUSED',
);
$campaignData = ((new AdAccount($account_id))->createCampaign(
    $fields,
    $params
)->exportAllData());
/* End Campaign*/

это, я пытаюсь написать исходный код для AdSet, но получаю следующую ошибку: "$ parent_id как параметр конструктора устарел, пожалуйста, старайтесь не использовать это в новом коде".В следующей строке

$adset = new AdSet(null, $account_id);

Ниже вы найдете весь мой исходный код для создания AdSet

$start_time = (new DateTime("+1 week"))->format(DateTime::ISO8601);
$end_time = (new DateTime("+2 week"))->format(DateTime::ISO8601);

$adset = new AdSet(null,$account_id);
$adset->setData(array(
        AdSetFields::NAME => 'My Ad Set',
        AdSetFields::OPTIMIZATION_GOAL => AdSetOptimizationGoalValues::REACH,
        AdSetFields::BILLING_EVENT => AdSetBillingEventValues::IMPRESSIONS,
        AdSetFields::BID_AMOUNT => 2,
        AdSetFields::DAILY_BUDGET => 1000,
        AdSetFields::CAMPAIGN_ID => $campaignData['id'],
  AdSetFields::TARGETING => $targeting,
  AdSetFields::START_TIME => $start_time,
  AdSetFields::END_TIME => $end_time,
));
$adset->create(array(
    AdSet::STATUS_PARAM_NAME => AdSet::STATUS_PAUSED,
));

Пытаясь решить возникшую проблему, я изменил следующее

$adset = new AdSet(null, $account_id);

до

$adset = new AdSet($account_id);

И мой новый исходный код выглядит следующим образом.

$adset = new AdSet($account_id);
$adset->setData(array(
        AdSetFields::NAME => 'My Ad Set',
        AdSetFields::OPTIMIZATION_GOAL => AdSetOptimizationGoalValues::REACH,
        AdSetFields::BILLING_EVENT => AdSetBillingEventValues::IMPRESSIONS,
        AdSetFields::BID_AMOUNT => 2,
        AdSetFields::DAILY_BUDGET => 1000,
        AdSetFields::CAMPAIGN_ID => $campaignData['id'],
  AdSetFields::TARGETING => $targeting,
  AdSetFields::START_TIME => $start_time,
  AdSetFields::END_TIME => $end_time,
));
$adset->create(array(
    AdSet::STATUS_PARAM_NAME => AdSet::STATUS_PAUSED,
));

И теперь я получаю сообщение об ошибке «Объект уже имеет идентификатор»в следующей строке

$adset->create(array(

Не могли бы вы помочь мне узнать, что происходит и где я совершил ошибку?

1 Ответ

0 голосов
/ 02 апреля 2019

Вы получаете сообщение об ошибке «У объекта уже есть идентификатор», поскольку первое значение Конструктор - это идентификатор рекламного набора, поэтому метод сохранения мгновенно завершается ошибкой.

«$ parent_id как параметр конструктора устарел» - это просто предупреждение в последней версии SDK, поэтому вы можете игнорировать его в демонстрационных целях.

Я бы посоветовал попытаться создать набор объявлений без цели и вызвать проверку. Также перехватите «Исключение запроса» и дамп тела, чтобы получить подробное объяснение, почему запрос не удался.

use FacebookAds\Http\Exception\RequestException;

$adset = new AdSet(null, 'act_xxx');
$adset->setData([
        AdSetFields::NAME => 'Demo Ad Set',
        AdSetFields::OPTIMIZATION_GOAL => AdSetOptimizationGoalValues::REACH,
        AdSetFields::BILLING_EVENT => AdSetBillingEventValues::IMPRESSIONS,
        AdSetFields::BID_AMOUNT => 2,
        AdSetFields::DAILY_BUDGET => 1000,
        AdSetFields::CAMPAIGN_ID => $facebookCampaignId
    ]);

    try {
        $adset->validate([AdSet::STATUS_PARAM_NAME => AdSet::STATUS_ACTIVE]);
    } catch (RequestException $e) {
        // Super helpful debugging information
        $response = json_decode($e->getResponse()->getBody(), true);
        var_dump($response);
    }

Вот ссылка на рабочий пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...