Создайте основную форму регистрации MailChimp, используя свой API

Я новичок в MailChimp и нуждаюсь в некоторой помощи.

С их базовым форматом регистрации бюллетеня... вы просто вставляете некоторые предварительно упакованные HTML-страницы на свою страницу. Однако проблема заключается в том, что нажатие на отправку перенаправлений на страницу MailChimp. (Я не хочу перенаправлять на MailChimp, я хочу, чтобы пользователь оставался на собственном веб-сайте после нажатия submit.)

Они предоставляют API и множество документации, но всего лишь нулевые полезные примеры. Предполагается, что API позволит мне полностью интегрироваться с моим сайтом или приложением. Кажется, что, когда я читаю что-то в своих документах, которые применяются ко мне, я нажимаю ссылку, чтобы получить больше информации, и я заканчиваю кругом. Они говорят вам, как это сделать, но они не могут "показать" вам, как это сделать.

Я могу получить ключ API, у них есть тонны документации и целая куча оболочек и плагинов... PHP, Drupal, Wordpress и т.д.

Путаница здесь в отношении их предварительно упакованных решений заключается в том, что у меня есть обычная статическая HTML-страница, это не Wordpress, PHP или Drupal... поэтому я просто не знаю, с чего начать... Я не знаю, t даже знаю, должен ли я использовать POST или GET.

Я не новичок в API... Я очень хорошо разбираюсь в том, чтобы заставить API Карт Google делать все, что захочу. Тем не менее, Google предоставляет реальные рабочие примеры в дополнение к их подробной документации, как это я узнал. Я просто хочу увидеть его в действии, прежде чем я смогу понять тонкости API.

Без каких-либо твердых примеров или руководств в своей онлайн-документации я спрашиваю, как создать самую основную форму регистрации HTML, используя их API.

Ответ 1

Редакция:

После публикации этого ответа MailChimp выпустил версии 2 и 3 своего API. Версия 3 будет единственной поддерживаемой версией, начиная с 2017 года. Как только у меня появится возможность ее протестировать, я обновлю этот ответ для версии API 3.


MailChimp API v3.0

В соответствии с уведомлением в верхней части этой страницы все предыдущие версии API не будут поддерживаться после 2016 года.

Мое решение использует PHP в фоновом режиме для обработки API и jQuery для облегчения Ajax.

1) Загрузите оболочку PHP, поддерживающую API v3.0. На момент написания этой статьи в последних документах MailChimp, поддерживающих v3.0, ничего официально не указано, но некоторые из них перечислены в GitHub, поэтому я выбрал этот.

2) Создайте следующий PHP файл store-address.php, используя свой собственный ключ API и идентификатор списка, а затем поместите его в тот же каталог, что и обертка с первого шага. Не забудьте следовать документации для вашей обертки, но все они выглядят довольно похоже на это.

<?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) Создайте свою форму HTML/CSS/JavaScript (jQuery) (не обязательно, чтобы она была на странице PHP, и посетитель никогда не увидит, что PHP используется в фоновом режиме.)

Ответ находится в JSON, поэтому вам придется обрабатывать его правильно.

Вот как выглядит мой файл index.html:

<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>

API MailChimp версии 1:

(исходный ответ)

Немного поработав, я нашел сайт, используя пример PHP с jQuery. Из этого я смог создать простую HTML-страницу с jQuery, содержащую основную регистрационную форму. Файлы PHP "скрыты" в фоновом режиме, когда пользователь никогда не видит их, но jQuery все еще может пользоваться и использовать.

1) Загрузите здесь пример PHP 5 jQuery... ( EDIT: ссылки мертвы. Однако единственной важной частью является официальная оболочка API для PHP, доступная ЗДЕСЬ.)

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

Если у вас есть только PHP 4, просто загрузите версию 1.2 MCAPI и замените соответствующий файл MCAPI.class.php выше.

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

2) Следуйте указаниям в файле Readme, добавив свой ключ API и идентификатор списка в файл store-address.php в соответствующих местах.

3) Вы также можете захотеть собрать имя пользователя и/или другую информацию. Вы должны добавить массив в файл store-address.php, используя соответствующие переменные Merge.

Вот как выглядит мой файл store-address.php, где я также собираю имя, фамилию и тип электронной почты:

<?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 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) Создайте свою форму HTML/CSS/jQuery. Это не обязательно должно быть на странице PHP.

Вот как выглядит мой файл index.html:

<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>

Требуемые фрагменты...

  • index.html, построенный как выше, так и аналогичный. С jQuery внешний вид и опции бесконечны.

  • store-address.php файл, загруженный как часть примеров PHP на сайте Mailchimp и измененный с помощью API KEY и LIST ID. Вам нужно добавить другие дополнительные поля в массив.

  • Файл MCAPI.class.php, загруженный с сайта Mailchimp (версия 1.3 для PHP 5 или версия 1.2 для PHP 4). Поместите его в тот же каталог, что и ваш store-address.php, или вы должны обновить URL-адрес в store-address.php, чтобы он мог его найти.

Ответ 2

Вот пример использования версии 2.0 API Mailchimp вместе с mailchimp-api (минимальный класс абстракции php для работы с 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
}

?>

Подробнее о том, что вы можете отправить с помощью вызова API в Документация API MailChimp.

Ответ 3

Вот еще один пример использования версии 2.0 API Mailchimp с помощью Официальный PHP Wrapper.

Разница между моим примером и другими, опубликованными здесь, заключается в том, что я использую subscribe метод Mailchimp_Lists, доступный через создание экземпляра класса Mailchimp (->lists), а не общий вызов.

$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
}