我正在使用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将整个数据编码为一个数据字符串。