2016-06-14 34 views
11

Próbuję dodać kontakt na liście za pomocą php api ale jego rzucanie mieszkowe error urywekJak dodać kontakt w liście z wykorzystaniem (Wyślij Grid) php api

string (51) "{" błędów ": [ { "message": "żądanie ciało jest nieważne"}]} "{" email ":" [email protected]”, "first_name": "gg", "last_name": "Użytkownik"}

Używam poniższego kodu:

$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; 

Czy ktoś może mi powiedzieć, jak rozwiązać problem jest problem.

+0

Można użyć curl_setopt ($ ch, CURLOPT_USERPWD, "Nazwa użytkownika: Hasło"); // Twoje poświadczenia idą tutaj –

+0

Czy poprawne wartości zostały użyte w tablicy '$ params = '(tablica (' sekcja? – Murali

+0

@ Wartości banalne są poprawne w sekcji tablicowej –

Odpowiedz

8

Powinieneś sprawdzić wysłany wniosek i porównać JSON w ciele z prawidłowym żądaniem, aby naprawdę zobaczyć, co się dzieje. Na wyjściu twojego json_encode pojawi się tablica, ale API oczekuje obiektu. Twój organizm prośba musi być

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

i co robisz teraz wysyła

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

problem ten można rozwiązać na kilka sposobów. Możesz użyć swoich ulubionych funkcji manipulowania ciągami, aby dołączyć nawiasy, lub możesz pominąć kodowanie i wysłać JSON jako ciąg (ponieważ określasz typ zawartości).

+0

Jak już powiedziałem, zmieniłem kod teraz mogę dodać kontakt na liście używając $ request = $ url. '/ Contactdb/recipients'; ale nadal nie mogę dodać kontaktu do konkretnej listy przy użyciu {list_id} $ request = $ url. '/ contactdb/lists/12345/recipients'; // 12345 to list_id to link nowego kodu http://pastebin.com/ErPkVaNa –

+0

Jak to opisano w [dokumentacji] (https://sendgrid.com/docs/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.html#Add -a-Single-Recipient-to-a-List-POST), aby dodać do określonej listy, musisz podać "recipient_id". Odbiorcy mają relację jeden-do-wielu z listami. – bwest

+0

$ url. '/ Contactdb/lists/123/recipients/ddfg123 Użyłem w kodzie, ale wciąż pokazano "wiadomość": "nie podano prawidłowych odbiorców" –

2

Po przejrzeniu interfejsu API sendgrid, a następnie przetestowaniu na własnym serwerze, udało mi się dodać kontakty do listy kontaktów. Ponieważ już utworzono listę, kolejnym krokiem jest utworzenie odbiorców, którzy zostaną dodani do listy. Możesz to zrobić:

<?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); 
?> 

Po utworzeniu odbiorców możesz teraz dodać je do listy. Otrzymasz identyfikator taki jak ten YW1pdGtyYXlAZ21haWwuY29t, który jest kodowaniem base64 twojego identyfikatora e-mail.

<?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); 
?> 

Po dodaniu, które można sprawdzić, czy użytkownik został dodany do listy

<?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); 
?> 

Uwaga: Najlepszym sposobem jest utworzenie klasy jak większość kodów są powtarzane. Zrobię klasę wrapper dla sendgrid i opublikuję ją tutaj wkrótce z możliwością wykonania wszystkich zadań, które są możliwe dzięki API sendgrid.

+0

ok, spróbuję tego –

+0

dziękuję za "co jest kodowaniem base64 twojego identyfikatora e-mail" Mam problem ze znalezieniem tego faktu w dokumentach. – sfscs

0

najpierw pomyśleć to trzeba będzie wstawić swój e-mail, aby wysłać odbiorców Grid:

<?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 

    } 

    ?> 

potem włóż go na liście, wykonując w ten sposób.

$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; 
} 

uzyskać więcej informacji na stronie: https://sendgrid.com/docs/API_Reference/api_v3.html

+0

Witamy w SO. Przeczytaj ten [jak-odpowiedź] (http://stackoverflow.com/help/how-to-answer). – thewaywewere