2016-06-14 71 views
11

Sto cercando di aggiungere il contatto nella lista utilizzando PHP api, ma il suo lancio errore frammento muggitoCome aggiungere il contatto in lista usando (Invia griglia) php API

string (51) "{" errori ": [ { "messaggio": "richiesta di corpo non è valido"}]} "{" e-mail ":" [email protected]", "first_name": "hh", "cognome": "utente"}

Sto usando il seguente codice di frammento:

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

Qualcuno può dirmi come risolvere è un problema.

+0

È possibile utilizzare curl_setopt ($ ch, CURLOPT_USERPWD, "username: password"); // Le tue credenziali vanno qui –

+0

Se i valori corretti sono stati usati in '$ params = array (array (' sezione? – Murali

+0

I valori di @Murali sono corretti nella sezione array. –

risposta

8

È necessario controllare la richiesta che si sta inviando e confrontare il JSON nel corpo con una richiesta valida per vedere realmente cosa sta succedendo. L'output del tuo json_encode sarà un array, ma l'API si aspetta un oggetto. Il tuo corpo ha bisogno di essere richiesta

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

E quello che state facendo in questo momento sta inviando

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

È possibile risolvere questo diversi modi. È possibile utilizzare le funzioni di manipolazione delle stringhe preferite per aggiungere le parentesi, oppure saltare la codifica e inviare il JSON come stringa (poiché si specifica il tipo di contenuto).

+0

Come hai detto che ho cambiato il mio codice ora sono in grado di aggiungere un contatto in elenco usando $ request = $ url. '/ Contactdb/recipients'; ma non riesco ancora ad aggiungere un contatto nell'elenco specifico utilizzando {list_id} $ request = $ url. '/ contactdb/lists/12345/recipients'; // 12345 è list_id questo il collegamento del nuovo codice http://pastebin.com/ErPkVaNa –

+0

Come descritto in [la documentazione] (https://sendgrid.com/docs/API_Reference/Web_API_v3/Marketing_Campaigns/contactdb.html#Add -a-Single-Recipient-to-a-List-POST), per aggiungere a un elenco specifico, è necessario fornire un 'recipient_id'. I destinatari hanno una relazione uno-a-molti con le liste. – bwest

+0

$ url. '/ Contactdb/lists/123/recipients/ddfg123 ho usato nel codice ma mostra ancora "messaggio": "non sono stati forniti destinatari validi" –

2

Dopo aver esaminato l'API sendgrid e quindi eseguito il test sul mio server, sono stato in grado di aggiungere contatti all'elenco dei contatti. Come hai già creato un elenco, il passaggio successivo è creare destinatari da aggiungere all'elenco. Si può fare in questo modo

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

Dopo aver creato i destinatari ora è possibile aggiungerli alla lista. Otterrai un id come questo YW1pdGtyYXlAZ21haWwuY29t che è la codifica base64 del tuo ID 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); 
?> 

Dopo aver aggiunto che è possibile verificare se l'utente è stato aggiunto alla lista

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

Nota: modo migliore è quello di creare una classe come la maggior parte dei codici vengono ripetuti. Creerò una classe wrapper per sendgrid e la inserirò qui presto con la possibilità di eseguire tutte le attività che è possibile tramite l'API sendgrid.

+0

ok proverò questo –

+0

grazie per "che è codec base64 del tuo indirizzo email" Ho difficoltà a trovare questo fatto nei documenti. – sfscs

0

pensare prima è che sarà necessario inserire la tua email per inviare i destinatari della griglia:

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

    } 

    ?> 

dopo che inserirlo nella lista facendo in questo modo.

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

per maggiori info visita: https://sendgrid.com/docs/API_Reference/api_v3.html

+0

Benvenuti in SO. Leggere questo [come risposta] (http://stackoverflow.com/help/how-to-answer). – thewaywewere