Использование API конверсий facebook в woocommerce php с cURL

#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);