Erstellen Sie ein einfaches MailChimp-Anmeldeformular mithilfe der API

75

Ich bin neu bei MailChimp und brauche Hilfe.

Mit ihrem einfachen Newsletter-Anmeldeformular ... binden Sie einfach vorgefertigten HTML-Code in Ihre Seite ein. Das Problem dabei ist jedoch, dass durch Klicken auf Senden Weiterleitungen zu einer MailChimp-Seite weitergeleitet werden. ( Ich möchte nicht zu MailChimp umleiten, ich möchte, dass der Benutzer nach dem Klicken auf "Senden" auf seiner eigenen Website bleibt. )

Sie bieten eine API und viel Dokumentation, aber kaum nützliche Beispiele. Die API soll mir eine vollständige Integration mit meiner Site oder Anwendung ermöglichen. Es scheint, dass ich, wenn ich etwas in ihren Dokumenten lese, das auf mich zutrifft, auf den Link klicke, um weitere Informationen zu erhalten, und mich dann im Kreis bewege. Sie sagen dir, wie es geht, aber sie "zeigen" dir nicht, wie es geht.

Ich kann einen API-Schlüssel bekommen, sie haben jede Menge Dokumentation und eine ganze Reihe von Wrappern und Plugins ... PHP, Drupal, Wordpress, etc ...

Die Verwirrung hier in Bezug auf ihre vorgefertigten Lösungen ist, dass ich nur eine normale statische HTML-Seite habe, es ist nicht Wordpress, PHP oder Drupal ... also weiß ich einfach nicht, wo ich anfangen soll ... ich weiß nicht einmal wenn ich verwenden soll POSToder GET.

Ich bin kein Neuling in APIs ... Ich kann die Google Maps-API sehr gut dazu bringen, alles zu tun, was ich will. Google bietet jedoch zusätzlich zu der detaillierten Dokumentation, wie ich sie gelernt habe, Beispiele aus der Praxis. Ich möchte es nur in Aktion sehen, bevor ich die Feinheiten der API erfassen kann.

Ohne solide Beispiele oder Tutorials in der Online-Dokumentation frage ich mich, wie das einfachste HTML-Anmeldeformular mithilfe der API erstellt werden kann.

Sparky
quelle
Ich bin mir nicht sicher, ob die API genau das ist, was Sie für eine einfache HTML-Seite benötigen. Haben Sie versucht, nur Ihr Formular einzubetten? kb.mailchimp.com/article/…
Dan Esparza
@DanEsparza, natürlich benötigen Sie die MailChimp-API. Andernfalls wird Ihr Formular immer zu einer MailChimp-Seite weitergeleitet, was genau das Problem ist, das ich hier löse.
Sparky
Entschuldigung, ich glaube, ich wurde von dem Satz geworfen: "Das Problem ist, dass ich nur eine normale Seite habe, die ich mit HTML erstellt habe, nicht WordPress, nicht PHP, nicht Drupal ... Ich weiß nur nicht, wo ich anfangen soll"
Dan Esparza
@ DanEsparza, keine Sorge. "Weiß nicht, wo ich anfangen soll" bezog sich auf den zweiten Absatz, der das Problem definiert. "Das Problem ist, dass es (das grundlegende Anmeldeformular für Newsletter) nicht sehr klug ist. Wenn Sie auf" Senden "klicken, wird ein Fenster mit einer Mailchimp-URL geöffnet. etc."
Sparky
@ DanEsparza, ich sehe, wie ich "das Problem ist" zweimal verwendet habe, was irreführend sein kann. Ich werde zur Klarstellung bearbeiten.
Sparky

Antworten:

72

EDITIERT:

Seit dem Posten dieser Antwort hat MailChimp Version 2 & 3 seiner API veröffentlicht. Version 3 wird ab 2017 die einzige unterstützte Version sein. Sobald ich die Möglichkeit habe, sie zu testen, werde ich diese Antwort für API-Version 3 aktualisieren.


MailChimp API v3.0

Gemäß der Benachrichtigung oben auf dieser Seite werden alle früheren Versionen der API nach 2016 nicht mehr unterstützt.

Meine Lösung verwendet PHP im Hintergrund für die Handhabung der API und jQuery zur Erleichterung des Ajax.

1) Laden Sie einen PHP-Wrapper herunter, der API v3.0 unterstützt. Zum jetzigen Zeitpunkt ist in den neuesten MailChimp-Dokumenten, die v3.0 unterstützen, nichts offizielles aufgeführt, aber einige sind auf GitHub aufgeführt, daher habe ich dieses ausgewählt .

2) Erstellen Sie die folgende PHP-Datei store-address.phpmit Ihrem eigenen API-Schlüssel und Ihrer Listen-ID und legen Sie sie ab Schritt 1 im selben Verzeichnis wie den Wrapper ab. Denken Sie daran, die Dokumentation für Ihren Wrapper zu befolgen, aber alle scheinen dem ziemlich ähnlich zu sein.

<?php // for MailChimp API v3.0

include('MailChimp.php');  // path to API wrapper downloaded from GitHub

use \DrewM\MailChimp\MailChimp;

function storeAddress() {

    $key        = "xxxxxxxxxxxxxxx-us1";
    $list_id    = "xxxxxx";

    $merge_vars = array(
        'FNAME'     => $_POST['fname'],
        'LNAME'     => $_POST['lname']
    );

    $mc = new MailChimp($key);

    // add the email to your list
    $result = $mc->post('/lists/'.$list_id.'/members', array(
            'email_address' => $_POST['email'],
            'merge_fields'  => $merge_vars,
            'status'        => 'pending'     // double opt-in
            // 'status'     => 'subscribed'  // single opt-in
        )
    );

    return json_encode($result);

}

// If being called via ajax, run the function, else fail

if ($_POST['ajax']) { 
    echo storeAddress(); // send the response back through Ajax
} else {
    echo 'Method not allowed - please ensure JavaScript is enabled in this browser';
}

3) Erstellen Sie Ihr HTML / CSS / JavaScript (jQuery) -Formular ( Es muss nicht auf einer PHP-Seite sein, und der Besucher wird nie sehen, dass PHP im Hintergrund verwendet wird. )

Die Antwort ist in JSON, daher müssen Sie richtig damit umgehen.

So index.htmlsieht meine Datei aus:

<form id="signup" action="index.html" method="get">
    First Name: <input type="text" name="fname" id="fname" />
    Last Name: <input type="text" name="lname" id="lname" />
    email Address (required): <input type="email" name="email" id="email" />
    <input type="submit" id="SendButton" name="submit" value="Submit" />
</form>
<div id="message"></div>

<script src="jquery.min.js"></script>
<script>
$(document).ready(function() {
    $('#signup').submit(function() {
        $("#message").html("Adding your email address...");
        $.ajax({
            url: 'inc/store-address.php', // proper url to your "store-address.php" file
            type: 'POST', // <- IMPORTANT
            data: $('#signup').serialize() + '&ajax=true',
            success: function(msg) {
                var message = $.parseJSON(msg),
                    result = '';
                if (message.status === 'pending') { // success
                    result = 'Success!  Please click the confirmation link that will be emailed to you shortly.';
                } else { // error
                    result = 'Error: ' + message.detail;
                }
                $('#message').html(result); // display the message
            }
        });
        return false;
    });
});
</script>

MailChimp API Version 1:

( ursprüngliche Antwort )

Nachdem ich eine Weile herumgefummelt hatte, fand ich eine Site, die das PHP-Beispiel mit jQuery verwendete. Daraus konnte ich mit jQuery eine einfache HTML-Seite erstellen, die das grundlegende Anmeldeformular enthielt. Die PHP-Dateien sind im Hintergrund "versteckt", wo der Benutzer sie noch nie sieht. Die jQuery kann weiterhin darauf zugreifen und sie verwenden.

1) Laden Sie hier das PHP 5 jQuery-Beispiel herunter ... ( BEARBEITEN : Links sind tot. Der einzige wichtige Teil ist jedoch der offizielle API-Wrapper für PHP, der HIER verfügbar ist .)

http://apidocs.mailchimp.com/downloads/mcapi-simple-subscribe-jquery.zip

Wenn Sie nur PHP 4 haben, laden Sie einfach Version 1.2 des MCAPI herunter und ersetzen Sie die entsprechende MCAPI.class.phpDatei oben.

http://apidocs.mailchimp.com/downloads/mailchimp-api-class-1-2.zip

2) Befolgen Sie die Anweisungen in der Readme-Datei, indem Sie Ihren API-Schlüssel und Ihre Listen-ID hinzufügen store-address.php Datei an den richtigen Stellen .

3) Möglicherweise möchten Sie auch den Namen Ihres Benutzers und / oder andere Informationen erfassen. Sie müssen der store-address.phpDatei ein Array mit den entsprechenden Zusammenführungsvariablen hinzufügen .

So store-address.phpsieht meine Datei aus, in der ich auch den Vornamen, den Nachnamen und den E-Mail-Typ erfahre:

<?php

function storeAddress() {

    require_once('MCAPI.class.php');  // same directory as store-address.php

    // grab an API Key from http://admin.mailchimp.com/account/api/
    $api = new MCAPI('123456789-us2');

    $merge_vars = Array( 
        'EMAIL' => $_GET['email'],
        'FNAME' => $_GET['fname'], 
        'LNAME' => $_GET['lname']
    );

    // grab your List's Unique Id by going to http://admin.mailchimp.com/lists/
    // Click the "settings" link for the list - the Unique Id is at the bottom of that page. 
    $list_id = "123456a";

    if ($api->listSubscribe($list_id, $_GET['email'], $merge_vars , $_GET['emailtype'])) {
        // It worked!   
        return 'Success!&nbsp; Check your inbox or spam folder for a message containing a confirmation link.';
    } else {
        // An error ocurred, return error message   
        return '<b>Error:</b>&nbsp; ' . $api->errorMessage;
    }

}

// If being called via ajax, autorun the function
if($_GET['ajax']) { 
    echo storeAddress(); 
}

4) Erstellen Sie Ihr HTML / CSS / jQuery-Formular. Es ist nicht erforderlich, sich auf einer PHP-Seite zu befinden.

So index.htmlsieht meine Datei aus:

<form id="signup" action="index.html" method="get">
    First Name: <input type="text" name="fname" id="fname" />
    Last Name: <input type="text" name="lname" id="lname" />
    email Address (required): <input type="email" name="email" id="email" />
    HTML: <input type="radio" name="emailtype" value="html" checked="checked" />
    Text: <input type="radio" name="emailtype" value="text" />
    <input type="submit" id="SendButton" name="submit" value="Submit" />
</form>
<div id="message"></div>

<script src="jquery.min.js"></script>
<script>
$(document).ready(function() {
    $('#signup').submit(function() {
        $("#message").html("Adding your email address...");
        $.ajax({
            url: 'inc/store-address.php', // proper url to your "store-address.php" file
            data: $('#signup').serialize() + '&ajax=true',
            success: function(msg) {
                $('#message').html(msg);
            }
        });
        return false;
    });
});
</script>

Erforderliche Stücke ...

  • index.html wie oben oder ähnlich aufgebaut. Mit jQuery sind das Erscheinungsbild und die Optionen endlos.

  • Die Datei store-address.php wurde als Teil von PHP-Beispielen auf der Mailchimp-Site heruntergeladen und mit Ihrem API-SCHLÜSSEL und Ihrer LIST-ID geändert . Sie müssen dem Array Ihre anderen optionalen Felder hinzufügen.

  • MCAPI.class.php Datei heruntergeladen von Mailchimp Website (Version 1.3 für PHP 5 oder Version 1.2 für PHP 4). Platzieren Sie es im selben Verzeichnis wie Ihre store-address.php, oder Sie müssen den URL-Pfad in store-address.php aktualisieren, damit es gefunden werden kann.

Sparky
quelle
Hinweis - Wenn Sie einen 500-Server-Fehler erhalten, ist möglicherweise PHP Curl nicht installiert. apt-get install php-curlsollte es beheben (unter Ubuntu 16.04)
Nitay
20

Hier ist ein Beispiel für die Verwendung der Version 2.0 der Mailchimp-API zusammen mit mailchimp-api (eine minimale PHP-Abstraktionsklasse für den Umgang mit der Mailchimp-API).

<?php

include('MailChimp.php');

$MailChimp = new MailChimp('API_KEY');
$result = $MailChimp->call('lists/subscribe', array(
    'id'                => 'LIST_ID',
    'email'             => array( 'email' => $_POST['email'] ),
    'merge_vars'        => array(
        'MERGE2' => $_POST['name'] // MERGE name from list settings
        // there MERGE fields must be set if required in list settings
    ),
    'double_optin'      => false,
    'update_existing'   => true,
    'replace_interests' => false
));

if( $result === false ) {
    // response wasn't even json
}
else if( isset($result->status) && $result->status == 'error' ) {
    // Error info: $result->status, $result->code, $result->name, $result->error
}

?>

Weitere Informationen darüber, was Sie mit dem API-Aufruf senden können, finden Sie in der MailChimp-API-Dokumentation .

Jonas Äppelgran
quelle
Danke Jonas. Ich habe das Mailchimp-API-Paket über den von Ihnen angegebenen Link heruntergeladen. Ich kann jedoch nur eine Datei mit dem Namen MailChimp.php finden und nicht MailChimp.class.php wie in der 2. Zeile Ihres Codes. Muss ich die Datei umbenennen, um die trockene "Klasse" vor der PHP-Erweiterung hinzuzufügen? Danke
Greg
Hallo Greg, die Erweiterung .class.php ist nicht erforderlich. Ich denke, der Paketbesitzer hat die Datei einfach umbenannt. Es wurde MailChimp.class.php genannt, als ich die Antwort schrieb. Ich werde die Antwort mit dem aktuellen Dateinamen aktualisieren.
Jonas Äppelgran
Neueste MailChimp verwendet Namespace ... new / Drewm / MailChimp ('API_KEY');
Adam Mills
8

Hier ist ein weiteres Beispiel für die Verwendung der Version 2.0 der Mailchimp-API mit dem offiziellen PHP-Wrapper .

Der Unterschied zwischen meinem Beispiel und anderen hier geschrieben ist , dass ich das bin mit abonnieren Methode der Mailchimp_Lists Klasse, zugänglich über Instanziierung der Mailchimp Klasse ( ->lists), anstatt die generische Aufruf Methode.

$api_key = "MAILCHIMP_API_KEY";
$list_id = "MAILCHIMP_LIST_ID";

require('Mailchimp.php');
$Mailchimp = new Mailchimp($api_key);
$subscriber = $Mailchimp->lists->subscribe($list_id, array('email' => $_POST['email']));

if ( ! empty($subscriber['leid'])) {
    // Success
}
Davidnknight
quelle
Wenn Sie nur die Listen verwenden, mussten Sie alle Dateien benötigen, die sich oben befinden Mailchimp.php?
Chris_s
Und wenn Sie MERGE-Variablen verwenden, fügen Sie sie einfach wie folgt hinzu: $ merge_vars = array ("FNAME" => "name", "CUSTOMMRG" => "test123"); $ Mailchimp_Lists-> subscribe ($ list_id, array ('email' => $ _POST ['email']), $ merge_vars);
Mladen Janjetovic
Hallo, aus irgendeinem Grund erhalte ich diese Fehlermeldung. Würdest du wissen warum? Schwerwiegender Fehler: Klasse 'Mailchimp' nicht gefunden in /homez.527/dqsdsq/www/desdsqd.com/newsletter/subscribe.php in Zeile 6
Greg
@ Greg Vielleicht haben Sie keine ('Mailchimp.php') oder benötigte (Mailchimp.php) Datei aufgenommen.
Aesede
@chris_s Sie könnten wahrscheinlich versuchen, einige von ihnen zu entfernen / zu kommentieren, ich habe nicht ehrlich ausgesehen. Sie benötigen jedoch die Hauptdatei Mailchimp.php, da eine Instanziierung von sich selbst übergeben werden muss, wenn Mailchimp_Lists instanziiert wird.
Davidnknight