我必须创建一个PHP脚本,该脚本将在我的sendinblue数据库中创建新的联系人。 Sendinblue有一个API,其中包含一个PHP代码生成器来完成此任务。该文档位于:https://developers.sendinblue.com/reference#createcontact
这是我的代码:
<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.sendinblue.com/v3/contacts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"email\":\"testCreateContact@test.com\",\"emailBlacklisted\":true,\"smsBlacklisted\":false,\"listIds\":[2],\"updateEnabled\":true}",
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"api-key: *****",
"content-type: application/json"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
现在,我正在寻找如何通过POST请求发送attributes
字段,因为您无法在文档页面的代码创建者中添加attributes
:
因此,我不理解在代码中包含attributes
字段的语法。谢谢!
编辑: 因此,现在香港专业教育学院尝试了这部分代码:
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_URL, "https://api.sendinblue.com/v3/contacts");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_ENCODING, "");
curl_setopt($curl, CURLOPT_MAXREDIRS, 10);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, [
'email' => 'testCreateContact@test.com',
'emailBlacklisted' => true,
'smsBlacklisted' => false,
'listIds' => [2],
'updateEnabled' => true,
'attributes' => json_encode([
"FNAME" => "Elly", //ERROR LINE
"LNAME" => "Roger",
]),
]);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"accept: application/json",
"api-key: ****",
"content-type: application/json"
));
但是它仍然不起作用,我得到了这个错误:
Array to string conversion
+这个:
{"error":{"status":400,"message":"Input must be a valid JSON object","code":"bad_request"}}
文档说属性必须是一个对象,所以我真的不知道该怎么做。文档确实很好,但是他们在这里错过了一些东西……(没有例子)
答案 0 :(得分:2)
从外观上看,只需将其添加到CURLOPT_POSTFIELDS
中的POST字段中即可。但是,尝试操纵JSON编码的字符串而不是一些简单的true / false声明会变得非常混乱,特别是在执行3d数组并担心在PHP中转义引号时。我建议您改用PHP数组简化操作,这也将使在POST请求中包含attributes
字段变得更加容易。
编辑:从远程服务器返回的错误消息看来,他们的API要求POST数据以JSON对象而不是标准'para1=val1¶2=val2&...'
格式发送,因此,您只需要对整个POST数组进行JSON编码即可创建单个JSON编码的对象:
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode([
'email' => 'testCreateContact@test.com',
'emailBlacklisted' => true,
'smsBlacklisted' => false,
'listIds' => [2],
'updateEnabled' => true,
'attributes' => [
'FNAME' => 'Elly',
'LNAME' => 'Roger',
],
]));
或者如果您想使用curl_setopt_array()
,可以这样做:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_URL => 'https://api.sendinblue.com/v3/contacts',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode([
'email' => 'testCreateContact@test.com',
'emailBlacklisted' => true,
'smsBlacklisted' => false,
'listIds' => [2],
'updateEnabled' => true,
'attributes' => [
'FNAME' => 'Elly',
'LNAME' => 'Roger',
],
]),
CURLOPT_HTTPHEADER => array(
'accept: application/json',
'api-key: *****',
'content-type: application/json'
),
));
答案 1 :(得分:0)
我找到了可行的解决方案:
CURLOPT_URL => "https://api.sendinblue.com/v3/contacts",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{\"attributes\":{\"NOM\":\"james\"},\"email\":\"testCreateContact@test.com\",
\"emailBlacklisted\":false,\"smsBlacklisted\":false,\"listIds\":[2],\"updateEnabled\":true}",
CURLOPT_HTTPHEADER => array(
"accept: application/json",
"api-key: ****",
"content-type: application/json"
),
));```
Thx