php - 你如何在 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"}}
我将不胜感激任何帮助。谢谢你。
解决方案
正如错误所说,您不需要 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;
推荐阅读
- scala - Scala 和 playframework 在节点之间共享缓存
- javascript - 如何将 axios 包添加到我正在处理的 chrome 扩展中?
- javascript - 在 HTML 中编辑 SRC
- python - 将更正应用于数据帧的子采样副本回到原始数据帧?
- python - 如何创建一个 for 循环来生成 1110 个值的范围?
- r - R:使用 par(mfrow) 绘制网格对象
- javascript - 使用 Express.JS 删除
- python - 在管理页面中添加新字段年龄
- html - 如何将按钮与文本区域对齐?
- c++ - 为什么 std::shared_ptr 两次调用我的析构函数?