Створіть основну форму реєстрації MailChimp, використовуючи їх API


75

Я новачок у MailChimp і мені потрібна допомога.

За допомогою базової форми реєстрації на розсилку ... ви просто вставляєте на свою сторінку розфасований HTML. Однак проблема в цьому полягає в тому, що натискання кнопки "Передати" переспрямовує на сторінку MailChimp. ( Я не хочу переспрямовувати на MailChimp, я хочу, щоб користувач залишався на власному веб-сайті після натискання кнопки подати. )

Вони надають API та безліч документації, але майже нульові корисні приклади. API повинен дозволити мені зробити повну інтеграцію зі своїм сайтом або додатком. Здається, коли я читаю щось у своїх документах, що стосується мене, я натискаю посилання, щоб отримати більше інформації, і в кінцевому підсумку ходжу по колу. Вони говорять вам, як це зробити, але вони не можуть "показати" вам, як це зробити.

Я можу отримати ключ API, у них є маса документації, і ціла купа обгортки та плагінів ... PHP, Drupal, Wordpress тощо ...

Плутанина щодо їх попередньо розфасованих рішень полягає в тому, що я просто маю звичайну статичну HTML-сторінку, це не Wordpress, PHP чи Drupal ... так що я просто не знаю, з чого почати ... Навіть не знаю якщо я повинен використовувати POSTабо GET.

Я не новачок в API ... У мене дуже добре виходить, коли API Google Maps робить все, що я хочу. Однак Google надає реальні робочі приклади на додаток до їхньої детальної документації, яка саме я це дізнався. Я просто хочу побачити це в дії, перш ніж я зможу зрозуміти кращі точки API.

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


Я не впевнений, що API - це те, що вам потрібно для простої сторінки HTML. Ви намагалися просто вставити свою форму? kb.mailchimp.com/article/…
Ден Еспарза

@DanEsparza, звичайно, тобі потрібен API MailChimp. В іншому випадку ваша форма завжди переспрямовуватиме на сторінку MailChimp, саме цю проблему я вирішую тут.
Sparky

Вибачте, я думаю, мене підкинуло речення: "Проблема в тому, що у мене просто є звичайна сторінка, яку я створив за допомогою HTML, не WordPress, не PHP, не Drupal ... Я просто не знаю, з чого почати"
Ден Esparza

@DanEsparza, не хвилюйся. "не знаю, з чого почати" було посиланням на другий абзац, який визначає проблему, "проблема полягає в тому, що вона (їх основна форма реєстрації на розсилку) є не дуже розумною. Натиснувши кнопку" Відправити ", відкриється вікно з адресою Mailchimp, тощо "
Sparky

@DanEsparza, я бачу, як я двічі використовував "проблема", що може ввести в оману. Редагуватиму для уточнення.
Sparky

Відповіді:


73

ВИДАЛЕНО:

З моменту розміщення цієї відповіді MailChimp випустив версії 2 та 3 їх API. Версія 3 буде єдиною підтримуваною версією, починаючи з 2017 року. Як тільки у мене буде можливість протестувати її, я оновлю цю відповідь для API версії 3.


API MailChimp 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 тут ... ( РЕДАКТУВАТИ : посилання мертві. Однак єдиною важливою частиною є офіційна обгортка 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файлу за допомогою відповідних змінних об’єднання.

Ось як 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'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) Створіть форму 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 та ІДЕНТИФІКАЦІЇ . Вам потрібно додати до масиву інші свої необов’язкові поля.

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


Зверніть увагу - якщо ви отримаєте помилку сервера 500, можливо, у вас не встановлено php curl. apt-get install php-curlповинен це виправити (на Ubuntu 16.04)
Nitay,

20

Ось приклад використання версії 2.0 API Mailchimp разом із mailchimp-api (мінімальний клас абстракції php для роботи з API Mailchimp).

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


Дякую Йонасу. Я завантажив пакет api mailchimp за посиланням, яке ви надали. Однак я можу знайти лише файл під назвою MailChimp.php, а не MailChimp.class.php, як у другому рядку вашого коду. Чи потрібно перейменовувати файл, щоб додати wry "клас" перед розширенням php? Дякую
Грег

Привіт, Грег, немає необхідності у розширенні .class.php. Я думаю, власник пакету просто перейменував файл. Коли я писав відповідь, його назвали MailChimp.class.php. Я оновлю відповідь поточною назвою файлу.
Jonas Äppelgran

Останній MailChimp використовує Простір імен ... new / Drewm / MailChimp ('API_KEY');
Адам Міллс

8

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

Різниця між моїм прикладом та іншими, розміщеними тут, полягає в тому, що я використовую метод підписки класу 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
}

Якщо ви просто використовуєте Списки, чи вимагали ви всі файли, які знаходяться у верхній частині Mailchimp.php?
chris_s

А якщо ви використовуєте MERGE vars, просто додайте їх, наприклад: $ merge_vars = array ("FNAME" => "name", "CUSTOMMRG" => "test123"); $ Mailchimp_Lists-> передплатити ($ list_id, array ('email' => $ _POST ['email']), $ merge_vars);
Младен Янетовіч

Привіт, я чомусь отримую це повідомлення про помилку. Чи знаєте ви чому? Фатальна помилка: Клас 'Mailchimp' не знайдено в /homez.527/dqsdsq/www/desdsqd.com/newsletter/subscribe.php у рядку 6
Грег

@Greg, можливо, ви не включили ('Mailchimp.php') або вимагаєте (Mailchimp.php) файл.
aesede

@chris_s Ви, мабуть, могли б видалити / прокоментувати деякі з них, я, схоже, не чесно кажучи. Але вам знадобиться основний Mailchimp.php, оскільки при створенні екземпляра Mailchimp_Lists має бути переданий екземпляр самого себе.
davidnknight
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.