2017-01-09 4 views
1

Я пытаюсь написать скрипт на основе инструкции здесь:PHP добавив обратную косую черту в моей CURL команды для Facebook Оффлайн Конверсии

https://developers.facebook.com/ads/blog/post/2016/12/18/lead-ads-offline/

Но у меня возникают проблемы с JSon строки, переданной в качестве параметр curl в PHP. Похоже, что это добавление обратной косой черты («match_keys»: «недействительные ключи \» электронной почты \»и т.д.). Которые являются причиной вызова API сбой

Я пытался играть с:

json_encode($array,JSON_UNESCAPED_SLASHES); 

Я пробовал кучу SO ответы уже как Curl add backslashes, но не повезло

<?php 

$email = hash('sha256', '[email protected]'); 

$data = array("match_keys" => '{"email": $email}', 
       "event_time" =>1477632399, 
       "event_name"=> "Purchase", 
       "currency"=> "USD", 
       "value"=> 2.00); 

$fields = [ 
      // 'upload_tag'=>'2016-10-28-conversions', 
      'access_token'=>'#######', 
      'data'=> $data 
     ]; 


$url = 'https://graph.facebook.com/v2.8/#######/events'; 

echo httpPost($url, $fields); 


function httpPost($url, $fields) 
{ 
    $curl = curl_init($url); 
    curl_setopt($curl, CURLOPT_POST, true); 
    curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($fields)); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
    $response = curl_exec($curl); 
    curl_close($curl); 
    return $response; 
} 


?> 

Это ответ:.

Array{"error":{"message":"(#100) Invalid parameter","type":"OAuthException","code":100,"error_data":{"match_keys":"Invalid keys \"email\" were found in param \"data[match_keys]\".","event_time":"Out of bounds array access: invalid index match_keys","event_name":"Out of bounds array access: invalid index match_keys","currency":"Out of bounds array access: invalid index match_keys","value":"Out of bounds array access: invalid index match_keys"},"fbtrace_id":"BrVDnZPR99A"}}% 

ответ

0

Вы смешиваете JSON с массивами PHP. Я сомневаюсь, что на самом деле JSON вы собираетесь использовать для отправки ваших данных, поскольку вы используете http_build_query. Попробуйте это:

$data = array("match_keys" => ["email" => $email], 
    "event_time" =>1477632399, 
    "event_name"=> "Purchase", 
    "currency"=> "USD", 
    "value"=> 2.00 
); 

С этим, вы определяете ваши данные в виде массива, и оставить http_build_query сделать кодировку для вас.