2015-09-25 17 views
7

C'è stato un grande aggiornamento sull'API Mailchimp (v3.0) e molti dei plugin jQuery non sono aggiornati per gli utenti POST su form.submit().Mailchimp API V3 jQuery Ajax POST abbonati

Dopo aver letto documenti v3.0:

Managing subscribers suggerisce la seguente formato JSON oggetto:

{ 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Urist", 
     "LNAME": "McVankab" 
    } 
} 

E seguente endpoint principale per la risorsa elenchi API:

https://<dc>.api.mailchimp.com/3.0/

Quindi, ecco il mio codice form.submit() con la richiesta jQuery Ajax POST:

$(document).ready(function(){ 
    var mcForm = $('#mailchimpForm'); 
    var mailchimp = {}; 
    mailchimp.dc='us5'; 
    mailchimp.id='xxxxxxxx'; 
    var url = '//' + mailchimp.dc + '.api.mailchimp.com/3.0/lists/' + mailchimp.id + '/members/'; 

    function beginMailchimpPost(data){ 
     var params = JSON.stringify(data); 
     $.ajax({ 
      url: url, 
      method: 'POST', 
      data: params, 
      dataType: 'jsonp', 
      contentType: 'application/json; charset=utf-8', 
      error: function(res, text){ 
       console.log('Err', res); 
      }, 
      success: function(res){ 
       console.log('Success', res); 
      } 
     }); 
    } 
}); 

Questo è l'oggetto JSON.stringify(data):

{"email_address":"[email protected]","status":"subscribed","merge_fields":{"FNAME":"Name","LNAME":"Last name"}} 

e sto ottenendo il seguente errore:

GET http://... 401 (Unauthorized) 
Err Object {readyState: 4, status: 404, statusText: "error"} 

Cosa c'è di sbagliato?

Questo è il collegamento a Mailchimp's API v3.0 docs (elenco elenco membri).

+0

Il migliore è http://stackoverflow.com/a/21491824/1821607 –

risposta

1

Stai ottenendo un 401 perché non stai passando la tua chiave API.

Avrai bisogno di aggiungere quanto segue sei chiamata AJAX:

beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", 
    "Basic " + btoa("api:" + mailchimp_api_key)); }; 

Dove mailchimp_api_key è la chiave per il tuo account. Dai un'occhiata a http://kb.mailchimp.com/api/article/api-3-overview per maggiori informazioni su auth con l'api.

+3

Ma anche: se questo è dal client JS, anche qui ci sarà un problema di scripting cross-site. Le chiamate devono essere inoltrate tramite un server piuttosto che fare affidamento sul client. – TooMuchPete

+0

@TooMuchPete quindi non c'è un modo semplice per postare mailchimp attraverso il client? Ci sono molti plugin jQuery/Angular che usano API v2.0 per fare ciò. – Gus

+0

@aubreyhodes grazie per la tua risposta, ma ora ho un 404. Ho aggiunto anche l'API giusta. Nessun successo. – Gus

-1

È necessario aggiungere la chiave API in params, come questo;

{ 
    "apikey": "your key here", 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Urist", 
     "LNAME": "McVankab" 
    } 
} 

Quindi è necessario modificare il tipo di dati da "jsonp" a "json". "jsonp" è solo GET e non funzionerà con il metodo POST.

E l'ultima cosa che devi fare è consentire lo scripting cross-domain;

http://enable-cors.org/server.html

2

Il modo in cui l'ho fatto è quello di utilizzare il codice AJAX, ma nudo fuori tutta la roba MailChimp e inviare i dati di post ad un file PHP. Ho usato questo codice:

https://github.com/actuallymentor/MailChimp-API-v3.0-PHP-cURL-example/blob/master/mc-API-connector.php

ho appena messo a nudo fuori tutto, ma la parte che mi serviva per la sottoscrizione di un singolo utente e ha funzionato come un fascino.Per la segnalazione degli errori, è possibile rilevare eventuali errori sul lato PHP e inviare lo stato HTTP all'AJAX.