Facebook Conversions API错误100:参数data缺失问题排查问询
Facebook Conversions API错误代码100:"The parameter data is required" 解决方法
你遇到的问题有两个核心原因:
1. 请求体JSON语法错误
从你打印的$data内容可以看到,"data"数组的闭合大括号后面多了一个多余的逗号:
] }, // 这里的逗号是错误的 "test_event_code":"TEST7672"
这个语法错误会导致Facebook的API无法正确解析整个JSON请求体,自然识别不到data字段,从而返回「参数data是必需的」错误。
2. 未设置正确的请求头
你注释掉了content-type: application/json请求头,cURL默认会以multipart/form-data格式发送请求体,但Facebook Conversions API要求接收JSON格式的请求,所以必须添加这个请求头,明确告知服务器请求体的类型。
修改后的代码
$pixelID = "MY PIXEL ID"; $token = "MY TOKEN"; $url = "https://graph.facebook.com/v10.0/$pixelID/events?access_token=$token"; $testEvent = "MY TEST ID"; $curl = curl_init($url); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 恢复并设置正确的请求头 $headers = array( "content-type: application/json", ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // 修正JSON语法:去掉data闭合大括号后的多余逗号 $data = '{ "data": [ { "event_name": "Purchase", "event_time": ' . $timestamp . ', "action_source": "website", "user_data": { "em": [ "' . $email . '" ], "ph": [ "' . $phonenumber . '" ], "fn": [ "' . $firstName . '" ], "ln": [ "' . $lastName . '" ], "ct": [ "' . $city . '" ], "st": [ "' . $county . '" ], "zp": [ "' . $postCode . '" ], "country": [ "0b407281768f0e833afef47ed464b6571d01ca4d53c12ce5c51d1462f4ad6677" ] }, "custom_data": { "currency": "GBP", "value": "' . (float)$paytotal . '" } } ], "test_event_code":"' . $testEvent . '" }'; curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $resp = curl_exec($curl); curl_close($curl); var_dump($resp);
额外建议
为了避免手动拼接JSON出现语法错误,推荐使用json_encode()函数来生成请求体,这样能自动处理语法细节,比如字符串转义、逗号分隔等:
// 先构造PHP数组 $payload = [ "data" => [ [ "event_name" => "Purchase", "event_time" => $timestamp, "action_source" => "website", "user_data" => [ "em" => [$email], "ph" => [$phonenumber], "fn" => [$firstName], "ln" => [$lastName], "ct" => [$city], "st" => [$county], "zp" => [$postCode], "country" => ["0b407281768f0e833afef47ed464b6571d01ca4d53c12ce5c51d1462f4ad6677"] ], "custom_data" => [ "currency" => "GBP", "value" => (float)$paytotal ] ] ], "test_event_code" => $testEvent ]; // 转换成JSON字符串 $data = json_encode($payload);
这种方式能彻底避免手动拼接JSON带来的语法错误,更可靠。
内容的提问来源于stack exchange,提问作者Eoin
相关产品推荐
相关产品推荐

