2016-05-10 20 views
-2

Ich versuche, einen Webhook für Mailchimp Veranstaltungen mit API-Version drei zu schreiben, und ich habe ein bisschen wegen ihrer fehlenden Bibliothek, Dokumentation und grundlegende Beispiele zu kämpfen, sondern auch mein Mangel an Erfahrung.Holen Sie sich die Daten von MailChimp API V3 Webhook

Ich weiß, wir sollten den Webhook durch ein Geheimnis in der URL zu sichern, das ist in Ordnung. Übrigens erlaubt MailChimp keine Konfiguration der grundlegenden Zugangsauthentifizierung in ihrem Portal.

Sie sagen: "Während wir HTTP POST für tatsächliche Daten senden, sendet unser Webhook Validator nur HTTP GET-Anfragen. Sie müssen beide zulassen, damit Ihr Webhook ordnungsgemäß funktioniert." Ok, ich denke, ich kann Request.HttpMethod verwenden, um einen Erfolgsstatuscode zurückzugeben, wenn es ein GET ist, und einige Daten zu verarbeiten, wenn es ein POST ist.

Nicht sicher, wie man Sachen aus der Anfrage obwohl, und im Idealfall möchte nicht, Haufen von Klassen und Eigenschaften zu schreiben, um alle Event-Typen zu decken, C# statisch getippt, obwohl ich denke, das dynamische Schlüsselwort ist auch ein Möglichkeit.

Muss ich JESON deserialisieren? Ich habe zuvor nur einen Webhook für eine andere API mit Hilfe einer Bibliothek geschrieben. Sie könnten ein API-Ereignis mit einer Zeichenfolge, einem Stream oder einem Textreader erstellen, die aus der Anfrage stammen. Die Bibliothek hat alles sehr einfach gemacht.

als Referenz, gibt es auch diese Frage, die zeigt, wie einige Daten bekommen PHP: How to pass email address to webhook from mailchimp

Die Daten, die geschrieben wie folgt aussieht wird (angeblich, es scheint, keine Dokumentation für V3 zu sein):

"type": "unsubscribe", 
"fired_at": "2009-03-26 21:40:57", 
"data[action]": "unsub", 
"data[reason]": "manual", 
"data[id]": "8a25ff1d98", 
"data[list_id]": "a6b5da1054", 
"data[email]": "[email protected]", 
"data[email_type]": "html", 
"data[merges][EMAIL]": "[email protected]", 
"data[merges][FNAME]": "MailChimp", 
"data[merges][LNAME]": "API", 
"data[merges][INTERESTS]": "Group1,Group2", 
"data[ip_opt]": "10.20.10.30", 
"data[campaign_id]": "cb398d21d2", 
"data[reason]": "hard" 

Ich brauche nur im Grunde diese Daten in Variablen zu bekommen, damit ich es mit meiner Datenbank synchronisieren kann.

Hier ist mein (Skelett) Controller so weit:

[Route("mailchimp/newsletter-webhook/super-secret-key-goes-here")] 
public HttpStatusCodeResult ChargeBeeWebhook() 
{ 

    return new HttpStatusCodeResult(200); 
} 
+1

könnte Dieser Beitrag helfen http://stackoverflow.com/questions/15020807/using-mailchimp-webhooks-feature – RedJandal

+1

MailChimp sendet Webhook-Daten mit [Formularcodierung] (https://en.wikipedia.org/wiki/Percent-encoding#The_application.2Fx-www-form-urlencoded_type), nicht JSON. Sie möchten diese POSTs genauso behandeln, wie Sie einen POST von einem Webformular aus behandeln. – TooMuchPete

+0

Ich habe kürzlich festgestellt, dass Mailchimp aus meinen Logfiles nichts mit Webhooks zurückgeschickt hat. Ich schätze, es passierte nachdem die V2 veraltet war. –

Antwort

2

Sie haben Angenommen bereits Ihre MailChimp Webhooks aufgebaut wie here beschrieben, können Sie die gebuchten Daten mit Request.Form Syntax erhalten. Am Beispiel gesendeten Daten von der Frage, hier ist, wie Sie Ihren Controller-Code sollte wie folgt aussehen:

[AllowAnonymous] 
public void ChargeBeeWebhook() 
{ 
    // type variable will be "unsubscribe" 
    string type = Request.Form["type"]; 

    // action variable will be "unsub" 
    string action = Request.Form["data[action]"]; 

    // reason variable will be "manual" 
    string reason = Request.Form["data[reason]"]; 

    // ... 
    // ... 
    // ... do the same with the rest of the posted variables 
    // ... 

    // sync the posted data above with your database 
    // ... 
    // ... 
} 
+0

Danke ekad. Nur neugierig, das ist eine alte Frage, wie kommt es, dass es heute endlich etwas Action gibt? – nmit026

+0

Gern geschehen. Ich sah diese Frage in C# und Mailchimp-Tag gestoßen, bevor ich antwortete. Sieht so aus, als hätte jemand anderes diese Frage vor mir beantwortet und dann wurde die Antwort gelöscht. – ekad