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

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

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

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

$url = 'https://api.sendgrid.com/v3'; $request = $url.'/contactdb/lists/12345/recipients'; //12345 is list_id $params = array( 'email' => 'hello@test.com', '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; 

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

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

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

 [{"email":"hello@test.com","first_name":"hh","last_name":"User"}] 

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

 {"email":"hello@test.com","first_name":"hh","last_name":"User"} 

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

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

 <?php $url = 'https://api.sendgrid.com/v3/'; $request = $url.'contactdb/recipients'; //12345 is list_id $params = array(array( 'email' => 'amitkray@gmail.com', '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.

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

  <?php $curl = curl_init(); $email = "example@mail.com"; 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