2013-10-30 7 views
10

abonnieren Wenn diese Anfrage zu machen:Javascript + MailChimp API

// Subscribe a new account holder to a MailChimp list 
function subscribeSomeoneToMailChimpList() 
{ 
    var options = 
    { 
    "apikey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
    "id": "xxxxxx", 
    "email": 
    { 
     "email": "[email protected]" 
    }, 
    "send_welcome": false 
    }; 
    var mcSubscribeRequest = UrlFetchApp.fetch("https://us4.api.mailchimp.com/2.0/lists/subscribe.json", options); 
    var mcListObject = Utilities.jsonParse(mcSubscribeRequest.getContentText()); 
} 

Diese Antwort zurückgegeben:

Anforderung ist fehlgeschlagen für https://us4.api.mailchimp.com/2.0/lists/subscribe.json Code 500. Antwort Verkürzte Server zurückgegeben: { "Status": "Fehler "," code ": - 100," name ":" ValidationError "," error ":" Sie müssen einen apikey-Wert angeben "} (verwenden Sie die Option muteHttpExceptions, um die vollständige Antwort zu prüfen) (Zeile 120, Datei" v2 ")

Zeile 120 ist die Zeile, auf der UrlFetchApp.fetch aufgerufen wird.

Der API-Schlüssel ist gültig (ich habe mit einfacheren API-Aufrufen getestet, die keine assoziativen Arrays enthalten). Wenn ich den API-Schlüssel direkt an die Basis-URL anfüge und ihn aus der options entferne, erhalte ich die Fehlermeldung, dass die Listen-ID ungültig ist. Wenn ich dann die Listen-ID direkt an die Basis-URL anschließe und sie von options entferne, erhalte ich die Fehlermeldung, dass die E-Mail-Adresse in assoziativem Array-Format sein muss.

Meine Frage ist: Mit dem obigen Format, wie sendet man Anfragen, die assoziative Arrays enthalten?

Die entsprechende API-Dokumentation finden Sie unter here.

+3

Schlechte Idee, Ihren API-Schlüssel in Ihrem Client-Code zu offenbaren :( – Maxim

+0

@Maxim, wird dieser Code in einem privaten Google Script verwendet. Ist das immer noch riskant? – barryedmund

+0

Ich bin mir nicht sicher, wie Google es schützen, aber ich Gast es ist gut genug. Es hängt alles davon ab, wie viel Sicherheit Sie benötigen. In einigen Fällen würde ich sogar das Passwort in meinem Server-Side-Code verschlüsseln. – Maxim

Antwort

18

Nach weiterer Forschung & Bastelei, ich war in der Lage, diese zu lösen:

https://<dc>.api.mailchimp.com/2.0/lists/subscribe.json?apikey=<my_api_key>&id=<my_list_id>&email[email][email protected]&merge_vars[FNAME]=John&merge_vars[LNAME]=Doe&double_optin=false&send_welcome=false 

Wo <dc> nach dem Bindestrich in Ihrem API-Schlüssel mit dem Abschnitt ersetzt werden soll. z.B. "us1", "us2", "uk1" usw.

+0

Genau das, was ich gesucht habe. Vielen Dank. Keine Ahnung, warum dies nicht in der Mailchimp-Dokumentation ist. –

+1

Nach [api docs] (https://apidocs.mailchimp.com/api/2.0/) sollte die URL 'https: // .api.mailchimp.com/2.0 /' wobei '' ersetzt werden soll mit dem Teil nach dem Bindestrich in Ihrem API Key. z.B. "us1", "us2", "uk1" usw. Wenn Sie die URL nicht ändern, meldet sie einen schlechten API-Schlüssel. – mmrmartin

+0

ich „“ error „:“ TEXTAREAY zur Verfügung gestellt werden müssen - Bitte geben Sie einen Wert „“ – benmcdonald

0

Ich glaube, ich herausgefunden, was nach dem Lesen durch die UrlFetchApp.fetch Docs los ist. https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app?csw=1#fetch(String)

Es sieht so aus, als ob Sie einige der zusätzlichen Parameter verwenden sollten, um die Anforderung wie Nutzlast und Methode auszuführen. Ihre Optionsvariable sollte so aussehen.

var payload = { 
    "apikey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
    "id": "xxxxxx", 
    "email": { 
     "email": "[email protected]" 
    }, 
    "send_welcome": false 
    }; 
    payload = Utilities.jsonStringify(payload); // the payload needs to be sent as a string, so we need this 
    var options = { 
    method: "post", 
    contentType: "application/json", // contentType property was mistyped as ContentType - case matters 
    payload: payload 
    }; 
    var result = UrlFetchApp.fetch("https://<dc>.api.mailchimp.com/2.0/lists/subscribe.json", options); 

Wo <dc> sollte mit dem Teil nach dem Bindestrich in der API-Schlüssel ersetzt werden. z.B. "us1", "us2", "uk1" usw.

Das Problem ist, dass Ihre Optionen Variable annehmen wird als JSON verwendet werden und nicht als GET-URL-Parameter. Auch mailchimp gibt an, dass es besser ist, POST anstelle von GET zu verwenden. Überall sollten Sie sicherstellen, dass Sie Ihre Methode auf "post" setzen und sicherstellen, dass Ihre Payload ein gültiger JSON ist.

5

Wenn Sie dies in JavaScript tun, wird Ihr API-Schlüssel der Welt zugänglich gemacht. Wenn jemand Ihren Schlüssel hat, kann er Änderungen an Ihrem Konto vornehmen oder auf Ihr Konto zugreifen.

+1

Dieser Code ist in einem privaten Google Script enthalten. – barryedmund

+3

Was ist ein Google Script? – zeckdude