0

我使用 sendinBlue API 在 PHP 和 cURL 中编写脚本。该脚本必须将联系人从 CSV 文件发送到我在网站 sendinBlue 中的数据库。

这个 API 有一个文档:https ://developers.sendinblue.com/reference#importcontacts-1

我想例如导入论文 2 个联系人:

dupont.jean@aol.com;Dupont;Jean;0645342891;2;2019-12-01 19:00:21;false;true;false
dupont2.jean@aol.com;Dupontt;maurice;0645342892;3;2019-12-01 19:00:21;false;true;false

所以我有这个代码:

    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/import",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => "{\"fileBody\":\"dupont.jean@aol.com;Dupont;Jean;0645342891;2;2019-12-01 19:00:21;false;true;false; 
                                dupont2.jean@aol.com;Dupontt;maurice;0645342892;3;2019-12-01 19:00:21;false;true;false\",
                                \"listIds\":[2],\"emailBlacklist\":false,\"smsBlacklist\":false,
                                \"updateExistingContacts\":true,\"emptyContactsAttributes\":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;
    }

但这不起作用,我有这个错误:{"error":{"status":400,"message":"Input must be a valid JSON object","code":"bad_request"}}

我试图只导入一个联系人,只有带有此代码的电子邮件:

    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/import",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "POST",
        CURLOPT_POSTFIELDS => "{\"fileBody\":\"dupont.jean@aol.com",
                                \"listIds\":[2],\"emailBlacklist\":false,\"smsBlacklist\":false,
                                \"updateExistingContacts\":true,\"emptyContactsAttributes\":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;
    }

这个正在工作,联系人在我的数据库中: 在此处输入图像描述

但这还不够,因为一切都是空的,我想同时发送多个联系人!(几乎 10 000 个联系人!)。

请你帮帮我好吗?

4

1 回答 1

0

参数fileBody应类似于 .csv 或 .txt,请参见此处的示例。

我的 Guzzle 代码如下所示:

$fileBody = "EMAIL;FIRSTNAME;LASTNAME" . " \n" .
            "junie3@example.com;Junie;JL" . " \n" .
            "john@example.com;John;JohnL";

$client = new Client([
    'headers' => [
        'api-key' => $apiKey
    ]
]);
$client->post($apiUrl . '/contacts/import', [
    \GuzzleHttp\RequestOptions::JSON => [
        'fileBody' => $fileBody,
        'listIds' => [$listId],
        'updateExistingContacts' => true,
    ]
]);
  • 我写了 "rowtext" 。" \n" 因为您需要动态输入行文本。
  • 我写了“\n”而不是“\n”,因为它不只使用“\n”存储最后一列数据(在我的示例中为 LASTNAME)。
  • 如果将双引号更改为单引号,它将不起作用。
于 2020-08-05T20:30:42.380 回答