Как добавить контакт в список, используя (Отправить сетку) php api

Я пытаюсь добавить контакт в список, используя php api, но его сбросив следующую ошибку фрагмента

string (51) "{" errors ": [{" message ":" тело запроса недействительно "}]}" { "email": "[email protected]", "first_name": "hh", "" last_name ":" Пользователь"}

Я использую следующий код фрагмента:

$url = 'https://api.sendgrid.com/v3';
$request =  $url.'/contactdb/lists/12345/recipients';  //12345 is list_id
$params = array(
'email' => '[email protected]',
'first_name' => 'hh', 
'last_name' => 'User'
  );
$json_post_fields = json_encode($params);
// Generate curl request
$ch = curl_init();
$headers = 
array("Content-Type: application/json",
"Authorization: Bearer SG.XXXXXXXX");
curl_setopt($ch, CURLOPT_POST, true);   
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Apply the JSON to our curl call
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_post_fields);
$data = curl_exec($ch);
if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
} else {
// Show me the result
var_dump($data);
curl_close($ch);
}
echo $json_post_fields;

Может ли кто-нибудь сказать мне, как решить эту проблему.

Ответ 1

Вы должны проверить запрос, который вы отправляете, и сравнить JSON в теле с действительным запросом, чтобы действительно увидеть, что происходит. Результатом вашего json_encode здесь будет массив, но API ожидает объект. Ваш орган запроса должен быть

[{"email":"[email protected]","first_name":"hh","last_name":"User"}]

И что вы сейчас делаете, отправляет

{"email":"[email protected]","first_name":"hh","last_name":"User"}

Вы можете исправить это несколько способов. Вы можете использовать ваши любимые функции манипуляции строками для добавления скобок или вы можете пропустить кодировку и отправить JSON в виде строки (поскольку вы указываете тип содержимого).

Ответ 2

После просмотра API-интерфейса sendgrid, а затем тестирования на моем собственном сервере, я смог добавить контакты в список контактов. Поскольку вы уже создали список, следующий шаг - создать получателей, которые будут добавлены в список. Вы можете сделать это

<?php

$url = 'https://api.sendgrid.com/v3/';
$request =  $url.'contactdb/recipients';  //12345 is list_id
$params = array(array(
'email' => '[email protected]',
'first_name' => 'Amit',
'last_name' => 'Kumar'
));
$json_post_fields = json_encode($params);
// Generate curl request
$ch = curl_init();
$headers = 
array("Content-Type: application/json",
"Authorization: Bearer SG.000000");
curl_setopt($ch, CURLOPT_POST, true);   
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Apply the JSON to our curl call
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_post_fields);
$data = curl_exec($ch);
if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
} else {
// Show me the result
curl_close($ch);
}
var_dump($data);
?>

После создания получателей вы можете добавить их в список. Вы получите идентификатор, подобный этому YW1pdGtyYXlAZ21haWwuY29t, который кодирует base64 вашего идентификатора электронной почты.

<?php

$url = 'https://api.sendgrid.com/v3/';
$request =  $url.'contactdb/lists/12345/recipients/YW1pdGtyYXlAZ21haWwuY29t';  //12345 is list_id

// Generate curl request
$ch = curl_init();
$headers = 
array("Content-Type: application/json",
"Authorization: Bearer SG.00000000");
curl_setopt($ch, CURLOPT_POST, true);   
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Apply the JSON to our curl call
$data = curl_exec($ch);
if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
} else {
// Show me the result
curl_close($ch);
}
var_dump($data);
?>

После добавления, что вы можете проверить, был ли пользователь добавлен в список

<?php

$url = 'https://api.sendgrid.com/v3/';
$request =  $url.'contactdb/lists/12345/recipients?page_size=100&page=1';  //12345 is list_id

// Generate curl request
$ch = curl_init();
$headers = 
array("Content-Type: application/json",
"Authorization: Bearer SG.000000");
curl_setopt($ch, CURLOPT_GET, true);   
curl_setopt($ch, CURLOPT_URL, $request);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Apply the JSON to our curl call
$data = curl_exec($ch);
if (curl_errno($ch)) {
print "Error: " . curl_error($ch);
} else {
// Show me the result

curl_close($ch);
}
var_dump($data);
?>

Примечание. Лучшим способом является создание класса по мере повторения большинства кодов. Я сделаю класс оболочки для sendgrid и опубликую его здесь в ближайшее время с возможностью выполнять всю задачу, которая возможна через API-интерфейс sendgrid.

Ответ 3

Сначала подумайте, что вам нужно будет вставить свое письмо для отправки получателей сетки:

    <?php

    $curl = curl_init();

      $email = "[email protected]";

    curl_setopt_array($curl, array(

      CURLOPT_URL => "https://api.sendgrid.com/v3/contactdb/recipients",

      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_SSL_VERIFYPEER => false,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "[{\"email\": \".$email.\"}]",
      CURLOPT_HTTPHEADER => array(
        "authorization: Bearer SG.0000000",
        "content-type: application/json"
      ),
    ));

    $response = curl_exec($curl);
    $err = curl_error($curl);

    curl_close($curl);

    if ($err) {
      echo "cURL Error #:" . $err;
    } else {
      echo $response;
        $a = json_decode($response);
        $b = $a->persisted_recipients; //get id of email 
        $r_id  = $b[0];                // store it

     }

    ?>

после этого вставьте его в список, выполнив этот путь.

$curl = curl_init();


curl_setopt_array($curl, array(

  CURLOPT_URL => "https://api.sendgrid.com/v3/contactdb/lists/123456/recipients/$r_id", 

  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_SSL_VERIFYPEER => false,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "null",
  CURLOPT_HTTPHEADER => array(
    "authorization: Bearer SG.0000000000",
    "content-type: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

для получения дополнительной информации: https://sendgrid.com/docs/API_Reference/api_v3.html