Crear un formulario de suscripción básico de MailChimp usando su API


Soy nuevo en MailChimp y necesito ayuda.

Con su formulario básico de suscripción al boletín... simplemente incruste algo de HTML preempaquetado en su página. Sin embargo, el problema con esto es que al hacer clic en enviar redirige a una página de MailChimp. ( No quiero redirigir a MailChimp, quiero que el usuario permanezca en su propio sitio web después de presionar enviar.)

Proporcionan una API y mucha documentación, pero casi cero ejemplos útiles. La API se supone que me permite hacer un integración completa con mi sitio o aplicación. Parece que cuando leo algo en sus documentos que se aplica a mí, hago clic en el enlace para obtener más información y termino dando vueltas en círculos. Te dicen cómo hacerlo pero no te "muestran" cómo hacerlo.

Puedo obtener una clave API, tienen toneladas de documentación y un montón de envoltorios y complementos... PHP, Drupal, Wordpress, etc...

La confusión aquí con respecto a sus soluciones pre-empaquetadas es que solo tengo un página HTML estática regular, no es Wordpress, PHP, o Drupal... así que no sé por dónde empezar ... Ni siquiera sé si se supone que debo usar POST o GET.

No soy un novato en API... Me va muy bien conseguir que la API de Google Maps haga lo que quiera. Sin embargo, Google proporciona ejemplos de trabajo del mundo real, además de su documentación detallada que es cómo lo aprendí. Solo quiero verlo en acción antes de poder comprender los puntos más finos de la API.

Sin cualquier ejemplo sólido o tutoriales en su documentación en línea, estoy preguntando cómo crear el formulario de suscripción HTML más básico utilizando su API.

Author: ekad, 2011-02-17

3 answers

EDITADO:

Desde la publicación de esta respuesta, MailChimp ha lanzado las versiones 2 y 3 de su API. La versión 3 será la única versión compatible a partir de 2017. Tan pronto como tenga la oportunidad de probarlo, actualizaré esta respuesta para la versión 3 de la API.


MailChimp API v3.0

Según la notificación en la parte superior de esta página , todas las versiones anteriores de la API no serán compatibles después de 2016.

Mi la solución utiliza PHP en segundo plano para manejar la API, y jQuery para facilitar el Ajax.

1) Descargue un envoltorio PHP que soporte API v3.0. Al momento de escribir esto, no hay nada oficial listado en los últimos documentos de MailChimp que sea compatible con v3.0, pero varios están listados en GitHub, así que seleccioné este.

2) Cree el siguiente archivo PHP, store-address.php, usando su propia clave API e ID de lista, y luego colóquelo en el mismo directorio que el wrapper del paso uno. Recuerde seguir la documentación para su envoltura, pero todos parecen bastante similares a esto.

<?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) Cree su formulario HTML/CSS/JavaScript(jQuery) ( No es necesario estar en una página PHP, y el visitante nunca verá que PHP se está utilizando en segundo plano.)

La respuesta está en JSON por lo que tendrás que manejarla correctamente.

Así es como se ve mi archivo 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>

Versión de la API de MailChimp 1:

(respuesta original )

Después de andar a tientas por un tiempo, encontré un sitio usando el ejemplo de PHP con jQuery. A partir de eso, pude crear una página HTML simple con jQuery que contenía el formulario de registro básico. Los archivos PHP están "ocultos" en el fondo donde el usuario nunca los ve, pero el jQuery todavía puede acceder y usar.

1) Descargue el ejemplo de PHP 5 jQuery aquí... (EDITAR : los enlaces están muertos. Sin embargo, la única parte importante es la wrapper oficial de API para PHP que está disponible AQUÍ.)

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

Si solo tiene PHP 4, simplemente descargue la versión 1.2 del MCAPI y reemplace el archivo MCAPI.class.php correspondiente anterior.

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

2) Siga las instrucciones en el archivo Readme agregando su clave de API y Lista ID al archivo store-address.php en las ubicaciones adecuadas.

3) Es posible que también desee recopilar el nombre de sus usuarios y / u otra información. Debe agregar un array al archivo store-address.php usando las variables de combinación correspondientes.

Aquí está cómo se ve mi archivo store-address.php donde también recojo el nombre, el apellido y el tipo de correo electrónico:

<?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) Crea tu formulario HTML/CSS/jQuery. No es necesario estar en una página PHP.

Esto es lo que se ve mi archivo index.html como:

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

piezas Necesarias...

  • índice.html construido como arriba o similar. Con jQuery, la apariencia y las opciones son infinitas.

  • dirección de la tienda.archivo php descargado como parte de ejemplos PHP en el sitio de Mailchimp y modificado con su API KEYy LIST ID. Necesita agregar sus otros campos opcionales a la matriz.

  • MCAPI.clase.php archivo descargado desde el sitio Mailchimp (versión 1.3 para PHP 5 o versión 1.2 para PHP 4). Colóquelo en el mismo directorio que su store-address.php o debe actualizar la ruta de url dentro de store-address.php para que pueda encontrarlo.

 66
Author: Sparky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-16 21:39:57

Aquí hay un ejemplo usando la versión 2.0 de la API de Mailchimp junto con mailchimp-api (una clase mínima de abstracción php para tratar con la API de 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
}

?>

Obtén más información sobre lo que puedes enviar con la llamada a la API en la Documentación de la API de MailChimp.

 21
Author: Jonas Äppelgran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-03 10:03:15

Aquí hay otro ejemplo de uso de la versión 2.0 de la API de Mailchimp usando el Wrapper Oficial de PHP.

La diferencia entre mi ejemplo y otros publicados aquí es que estoy usando el método subscribe de la clase Mailchimp_Lists, accesible a través de la instanciación de la clase Mailchimp (->lists), en lugar del método genérico call.

$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
}
 7
Author: davidnknight,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-12 09:42:41