首页 > 解决方案 > 你如何在 PHP 中发布 JSON 数据?(将原始 cURL 代码转换为 PHP)

问题描述

我正在使用 Facebook 的 API,并且正在尝试在 PHP 中执行 cURL 请求。

这个请求是一个 POST 请求并传递一些 JSON 数据。

我希望这个 JSON 数据成为 PHP 中的一个数组,然后将它传递给 cURL 请求。

这是来自 FB 文档的示例 cURL 请求。

curl -X POST \
  -F 'data=[
       {
         "event_name": "PageView",
         "event_time": 1610378833,
         "user_data": {
           "fbc": "fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890",
           "fbp": "fb.1.1558571054389.1098115397",
           "em": "309a0a5c3e211326ae75ca18196d301a9bdbd1a882a4d2569511033da23f0abd"
         }
       }
     ]' \
  -F 'access_token=<ACCESS_TOKEN>' \
  https://graph.facebook.com/v9.0/<PIXEL_ID>/events

我在 PHP 中尝试过多次尝试,但我的数组似乎没有被正确解析。

这是我的 PHP 代码:

$data = array("data" => array("event_name" => "Purchase", "event_time" => time()),

        "access_token" => "EAADZAQ7wNP3UBAMjOcHJV1dvgRYPoyarnLPO5Rr6cwRiOuF0biRTZCJWbCn000U9SD8hovXoKZB0zg1H8PoTI3d4RuvUZC1VQshieXSPcZABiCwqi1rgzzaYZBfMkD6qgAZBKikCtG3jO9SYWanuPUvctypbyoxQm4zVI5Cq8K"

);          

$dataString = json_encode($data);                                         
                                                                                                                    
$ch = curl_init('https://graph.facebook.com/v9.0/229975271636842/events');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($dataString))                                                                       
);                                                                                                                                                                       
echo $result = curl_exec($ch);
    

这是错误:

{"error":{"message":"(#100) param data must be an array.","type":"OAuthException","code":100,"fbtrace_id":"ACWsWbLVtlLZdbMyty_9VKA"}}

这是Facebook 的文档。

我将不胜感激任何帮助。谢谢你。

标签: phpcurl

解决方案


正如错误所说,您不需要 json_encode 数据。

$curl = curl_init();

$array = [
    "data" => [[
        "event_name"=> "PageView",
        "event_time"=> 1610378833,
        "user_data" => [
            "fbc" => "fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890",
            "fbp" => "fb.1.1558571054389.1098115397",
            "em" => "309a0a5c3e211326ae75ca18196d301a9bdbd1a882a4d2569511033da23f0abd"
        ]
    ]]
];

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://graph.facebook.com/v9.0/229975271636842/events',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS => json_encode($array),
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

推荐阅读