调用Facebook Conversion Api报(#100) The parameter data is required错误求解
问题原因
- 你当前设置的请求头
Content-Type: multipart/form-data和实际提交的POST数据格式不匹配:你直接传递了JSON字符串,但multipart/form-data要求提交键值对格式的参数,Facebook接口无法从你提交的内容中解析出data参数,因此抛出参数缺失的报错。
修复方案(二选一即可)
方案1:保持JSON提交格式(更简单,适配你现有代码)
仅需要修改请求头的Content-Type为application/json即可,修改后的完整代码如下:
<?php // 替换为你真实的像素ID和访问令牌 $url = "https://graph.facebook.com/v10.0/<PIXEL ID>/events?access_token=<TOKEN>"; $curl = curl_init($url); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 仅修改这里的Content-Type $headers = array( "content-type: application/json", ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); $data = '{ "data": [ { "event_name": "Purchase", "event_time": '.time().', "action_source": "website", "event_id": '.rand(100000, 500000).', "user_data": { "em": "6b583232e99af45c3b436798f32800a4dd6f3524624ba6507ed8269b53ce82a3", "ph": null }, "custom_data": { "currency": "USD", "value": "37" } } ], "test_event_code":"TEST9031" }'; curl_setopt($curl, CURLOPT_POSTFIELDS, $data); $resp = curl_exec($curl); curl_close($curl); var_dump($resp); ?>
方案2:使用multipart/form-data格式提交
如果你需要保持multipart/form-data的提交方式,就需要把参数拆为键值对传递:
<?php $url = "https://graph.facebook.com/v10.0/<PIXEL ID>/events?access_token=<TOKEN>"; $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: multipart/form-data", ); curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); // 构造键值对参数 $postData = [ 'data' => json_encode([ [ "event_name" => "Purchase", "event_time" => time(), "action_source" => "website", "event_id" => rand(100000, 500000), "user_data" => [ "em" => "6b583232e99af45c3b436798f32800a4dd6f3524624ba6507ed8269b53ce82a3", "ph" => null ], "custom_data" => [ "currency" => "USD", "value" => "37" ] ] ]), 'test_event_code' => 'TEST9031' ]; curl_setopt($curl, CURLOPT_POSTFIELDS, $postData); $resp = curl_exec($curl); curl_close($curl); var_dump($resp); ?>
内容的提问来源于stack exchange,提问作者Артем Дорошенко
相关产品推荐
相关产品推荐

