#php #curl #woocommerce #facebook-graph-api-v2.0
#php #curl #woocommerce #facebook-graph-api-v2.0
Вопрос:
Я пытаюсь использовать api конверсий Facebook с curl в woocommerce, мой код выглядит следующим образом (токен доступа и пиксель скрыты):
function callAPIFB($method, $url, $data){
$curl = curl_init();
switch ($method){
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
// OPTIONS:
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
// EXECUTE:
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
add_action( 'woocommerce_add_to_cart', 'facebook_API_addcart');
function facebook_API_addcart () {
$ip_add = WC_Geolocation::get_ip_address();
$user_agent = $_SERVER['HTTP_USER_AGENT'];
$addcart_time = current_time( 'timestamp' );
$total_cart = WC()->cart->cart_contents_total;
$currency = get_woocommerce_currency();
$cart_data_array = array(
"event_name" => "AddToCart",
"event_time" => $addcart_time,
"user_data" => array(
"client_ip_address" => $ip_add,
"client_user_agent" => $user_agent
),
"custom_data" => array(
"currency" => $currency,
"value" => $total_cart
),
"test_event_code" => "TEST72603",
);
$call_fb_cart = callAPIFB('POST', 'https://graph.facebook.com/v9.0/PIXEL/events?access_token=ACCEsS-TOKEN', json_encode($cart_data_array));
?>
<script>
console.log(<?php echo $call_fb_cart;?>);</script>
<?php
}
Однако я получаю следующий код ошибки в консоли от FB:
ошибка:
код: 100
сообщение: «(# 100) Требуются данные параметра»
введите: «OAuthException»
С чем это может быть связано?
Ответ №1:
проблема в том, что api конверсий facebook ищет параметр «data» отправляемого вами json и не может его найти, также «данные» должны быть массивом объектов, поэтому код должен иметь следующую структуру для json_encode, чтобы придать ему этот формат
$dataObject = array(
"event_name" => "AddToCart",
"event_time" => $addcart_time,
"user_data" => array(
"client_ip_address" => $ip_add,
"client_user_agent" => $user_agent
),
"custom_data" => array(
"currency" => $currency,
"value" => $total_cart
)
);
$cart_data_array = json_encode(array(
"data" =>[$dataobject],
"test_event_code" => "TEST72603",
));
$call_fb_cart = callAPIFB('POST', 'https://graph.facebook.com/v9.0/PIXEL/events?access_token=ACCEsS-TOKEN', $cart_data_array);