如何在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的文档。

如果有任何帮助,我将不胜感激。非常感谢。

正如错误所说,您不需要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;

我认为问题在于缺少一个数组。";数据";字段是一个包含对象的数组。试试这个:

$data = array( // main object
"data" => array( // data array
array("event_name" => "Purchase", "event_time" => time()), // single data array entry
),
"access_token" => "..."
);
$array = [
"event_name"=> "PageView", 
"event_name2"=> "PageView2",
// and so on ...
];
$object = json_decode(json_encode($array) );
$data = ['data'=> $object];

然后把它传递给旋度函数。

为了尼科。正确的我放弃解释:我认为:

-F 'data=[
{

表示数组中的对象。FB错误响应告诉我们:;错误":{"message":"(#100(param数据必须是一个数组。Jack将整个数据编码为一个数据字符串。

最新更新