2015-10-06 28 views
6

Ho un problema con la creazione di un nuovo membro nell'elenco utilizzando l'API v3. Sto inviando richiesta post con i dati JSON:Creazione di un nuovo errore di convalida dell'abbonato utilizzando l'API MailChimp v3.0

url:

https://us10.api.mailchimp.com/3.0/lists/<list-id>/members 

intestazioni:

Content-type: application/json 
    Authorization: apikey <my-api-key> 

JSON corpo:

{ 
    "status": "pending", 
    "email_address": "[email protected]", 
    "merge_fields": { 
    "FNAME": "John", 
    "LNAME": "Smith", 
    "REFERRER": "referrer", 
    "REFERRAL": "referral" 
    } 
} 

Si basa su documenti API e tutorial https://teamtreehouse.com/library/mailchimp-api/mailchimp-api/adding-new-members-to-your-list . Ma ogni risposta è la seguente:

{ 
    "type": "http://kb.mailchimp.com/api/error-docs/400-invalid-resource", 
    "title": "Invalid Resource", 
    "status": 400, 
    "detail": "Your merge fields were invalid.", 
    "instance": "", 
    "errors": [ 
    { 
     "field": "FNAME", 
     "message": "Please enter a value" 
    }, 
    { 
     "field": "LNAME", 
     "message": "Please enter a value" 
    }, 
    { 
     "field": "REFERRAL", 
     "message": "Please enter a value" 
    }, 
    { 
     "field": "REFERRER", 
     "message": "Please enter a value" 
    } 
    ] 
} 

Cosa sto facendo male? È un problema con l'API MailChimp?

+0

Ho provato il tuo JSON nel parco giochi MailChimp e almeno sembra funzionare lì https://us5.api.mailchimp.com/playground/ – lehtu

+0

Come stai inviando questi dati a quell'endpoint? con Curl o cosa? Perché i messaggi di Errora dicono in modo esplicito che non si ottengono i valori di merge_fields, ma solo le chiavi. – lehtu

risposta

2

Quando si aggiunge un utente a un elenco, è necessario aggiungere tutti i campi "obbligatori" nell'elenco. Per vedere i tuoi campi, accedi a mail chimp fai clic su "Elenchi" e poi sul tuo elenco. Dal menu a discesa "Impostazioni" seleziona "Campi elenco e | MERGE | tag '.

enter image description here

Newsletter è un ulteriore campo richiesto abitudine che ho aggiunto. Se non lo invio otterrò l'errore che hai perché è un campo obbligatorio. Tutti gli altri campi devono essere aggiunti all'interno dell'array merge_fields come "NEWSLETTER".

$dataCenter ='us10'; //last part of the api key 
$auth = base64_encode('user:'.$apikey); 
$data = array(
    'apikey'  => $apikey, 
    'email_address' => $email, 
    'status'  => 'subscribed', 
    'merge_fields' => ['NEWSLETTER' => '1'] 
); 
$json_data = json_encode($data); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/f3e05535e8/members/'); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 
'Authorization: Basic '.$auth)); 
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/2.0'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); 
$result = curl_exec($ch); 

Se avessi più campi personalizzati nella mia forma li vorrei aggiungere in questo modo:

'merge_fields' => [ 
    'NEWSLETTER' => '1', 
    'ANOTHERFIELD' => 'this is example data', 
] 

posta documentazione scimpanzé dice che richiede un oggetto 'merge_fields', che quando l'array viene convertito in JSON esso diventa un oggetto JSON.

http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/

0

è necessario compilare vostro richiesto unire tag o rimuoverli,

Nota: V'è una (possibile) un ritardo dopo la rimozione RICHIESTO campi di fusione.

Non mi sono fermato a vedere per quanto tempo, posso CONFERMARE dopo aver replicato l'elenco che richiede i tag di unione richiesti.

1

In aggiunta (ai campi mancanti mancanti) Ho riscontrato questo problema cercando di aggiungere e-mail con lettere maiuscole. Pertanto, ciò potrebbe verificarsi anche se i dati che invii hanno un formato errato.

0

Penso che il JSON sia ok. Anche se dice campi unione, l'indirizzo email di prova non è appropriato.

posso fare un codice di errore di 400 in due modi:

  • tentativo di aggiungere un indirizzo email che è già sulla lista
  • tentativo di aggiungere un indirizzo falso ([email protected]) che non convalida o qualcosa ...

Se si desidera un fare uso di un indirizzo falso @ freddiesjokes.com
ex // [email protected]

Ho provato il @ example.com troppo, spero che questo aiuta le persone future (con risposta quasi 2 anni dopo chiesto)