#php #laravel-5.7 #facebook-marketing-api #facebook-business-sdk
#php #laravel-5.7 #facebook-marketing-api #facebook-business-sdk
Вопрос:
Мы используем 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*/
при этом я пытаюсь написать исходный код для набора объявлений, но получаю следующую ошибку
«$parent_id как параметр constructor устарел, пожалуйста, постарайтесь не использовать это в новом коде».
В следующей строке
$adset = new AdSet(null, $account_id);
Ниже вы найдете весь мой исходный код для создания набора объявлений
$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:
Вы получаете ошибку «У объекта уже есть идентификатор», потому что первым значением конструктора является идентификатор набора объявлений, поэтому метод сохранения завершается с ошибкой мгновенно.
«$parent_id как параметр constructor устарел» — это просто предупреждение в последней версии sdk, поэтому вы можете игнорировать его в демонстрационных целях.
Я бы посоветовал попытаться создать набор объявлений без какой-либо цели и вызвать validate. Также перехватите исключение запроса и сбросьте тело, чтобы получить подробное объяснение того, почему запрос не удался.
use FacebookAdsHttpExceptionRequestException;
$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);
}