я пытаюсь получить данные в режиме реального времени, используя событие Leadgen
я использую SDK для рекламы в Facebook для php
мне удалось настроить конечную точку для приема пинга в реальном времени
вот мой файл error_log
(
[entry] => Array
(
[0] => Array
(
[changes] => Array
(
[0] => Array
(
[field] => leadgen
[value] => Array
(
[ad_id] => 0
[form_id] => 1602570684541170
[leadgen_id] => 1629665456004730
[created_time] => 148036545636
[page_id] => 1870793756647618
[adgroup_id] => 0
)
)
)
[id] => 1870793717274654
[time] => 14803464737
)
)
[object] => page
)
я пытаюсь получить такие данные
{
"data": [
{
"created_time": "2015-02-28T08:49:14+0000",
"id": "<LEAD_ID>",
"ad_id": "<AD_ID>",
"form_id": "<FORM_ID>",
"field_data": [
{
"name": "car_make",
"values": [
"Honda"]
},
{
"name": "full_name",
"values": [
"Joe Example"]
},
{
"name": "email",
"values": [
"[email protected]"]
},
]
}
],
"paging": {
"cursors": {
"before": "OTc2Nz3M5MTgyMzU1NDMy",
"after": "OTcxNjcyOTg5ANTI4NzE4"}
}
}
вот мой код webhook
<?php
require_once 'facebook-php-ads-sdk-master/vendor/autoload.php';use FacebookAds\Object\LeadgenForm;
use FacebookAds\Api;
use FacebookAds\Object\Ad;
use FacebookAds\Object\Lead;$app_id='148247344564502719';
$app_secret='17489f3e0f8235645413f5dd593e67787';
$access_token='1482473465452719';
// Initialize a new Session and instanciate an Api object
Api::init($app_id, $app_secret, $access_token);
// The Api object is now available trough singleton
$api = Api::instance();$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];
if ($verify_token === 'abc123') {
echo $challenge;
}
$input = json_decode(file_get_contents('php://input'), true);
error_log(print_r($input, true));
$form_id = $input['entry'][0]['changes'][0]['value']['form_id'];
$ad_id = $input['entry'][0]['changes'][0]['value']['ad_id'];
$leadgen_id = $input['entry'][0]['changes'][0]['value']['leadgen_id'];
/*$form = new Lead($leadgen_id);
$form->read();
$ad = new Ad($ad_id);
$leads = $ad->getLeads();*/
$form = new LeadgenForm($form_id);
$leads = $form->getLeads();
error_log(print_r($leads, true));
?>
вот ошибка:
Неустранимая ошибка: необязательное исключение ‘Исключение’ с сообщением ‘поле’ id ‘обязательно.’ в /www/wibonus/public_html/facebook-php-ads-sdk-master/src/FacebookAds/Object/AbstractCrudObject.php:123 Трассировка стека: # 0 / www / wibonus / public_html / facebook-php-ads-sdk-master /src/FacebookAds/Object/Ad.php(290): FacebookAds \ Object \ AbstractCrudObject-> assureId () # 1 /www/wibonus/public_html/webhook.php(38): FacebookAds \ Object \ Ad-> getLeads () # 2 {main} добавлено в /www/wibonus/public_html/facebook-php-ads-sdk-master/src/FacebookAds/Object/AbstractCrudObject.php в строке 123
Вместо того, чтобы использовать Facebook SDK, вы можете сделать простой запрос CURL из вашего PHP-кода, чтобы получить данные формы заказа.
Вот код
$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];
if ($verify_token === 'abc123') {
echo $challenge;
}
$input = json_decode(file_get_contents('php://input'), true);
error_log(print_r($input, true));
$form_id = $input['entry'][0]['changes'][0]['value']['form_id'];
$ad_id = $input['entry'][0]['changes'][0]['value']['ad_id'];
$leadgen_id = $input['entry'][0]['changes'][0]['value']['leadgen_id'];
$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];
if ($verify_token === 'abc123') {
echo $challenge;
}
$input = json_decode(file_get_contents('php://input'), true);
error_log(print_r($input, true));
$form_id = $input['entry'][0]['changes'][0]['value']['form_id'];
$ad_id = $input['entry'][0]['changes'][0]['value']['ad_id'];
$leadgen_id = $input['entry'][0]['changes'][0]['value']['leadgen_id'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/v2.8/" . $leadGenId . "?access_token={ACCESS_TOKEN}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$leadData = json_decode($result, true);
$lead = [];
for($i = 0; $i < count($leadData); $i++)
{
$lead[$leadData[$i]['name']] = $leadData[$i]['values'][0];
}
print_r($lead);
Вы должны вернуть $ challenge в URL вашего обратного вызова. (Примечание: если вы работаете над webhook)
Других решений пока нет …