Integrar la API de MailChimp en una aplicación Laravel

Aviso importante: estas instrucciones son para trabajar con la versión 2.0.x de la API de MailChimp. A finales de 2016 esta versión dejará de tener soporte. Por desgracia, los muchachos de MailChimp aún no han actualizado el paquete que ofrecen para acceder a la API 3.0.

Para ahorrarnos mucho trabajo vamos a usar el paquete que nos ofrecen los de MailChimp y el paquete skovmand/mailchimp-laravel.

Instalación

Lo primero que vamos a hacer es añadir el paquete skovmand/mailchimp-laravel a nuestro composer.json (en la sección “require”):

"require": {
    "skovmand/mailchimp-laravel": "1.*",
}

Actualiamos el composer desde un terminal (recuerda que debes estar en la carpeta del proyecto Laravel en el que quieres añadir este paquete:

$ composer update

Al instalar este paquete se instala automáticamente el paquete mailchimp/mailchimp que es el que hace prácticamente todo el trabajo.

Registra el service provider

El siguiente paso es añadir el service provider a nuestro fichero config/app.php:

'providers' => [
    Skovmand\Mailchimp\MailchimpServiceProvider::class,
]

Copiar el fichero de configuración a nuestro proyecto

Ahora copiamos el fichero mailchimp.php a la carpeta donde están todos los ficheros de configuración de nuestro proyecto.

Esto se hace de manera automática así:

php artisan vendor:publish --provider="Skovmand\Mailchimp\MailchimpServiceProvider"

Genera una llave API

Para poder acceder a la API necesitamos una llave que podemos conseguir en nuestra cuenta de MailChimp.

  1. Entra en tu cuenta MailChimp
  2. Vete a tu perfil (profile)
  3. Entra en Extras → API Keys
  4. Desde ahí puedes crear una nueva llave para la API (“Create a Key”).

Más información aquí: http://kb.mailchimp.com/integrations/api-integrations/about-api-keys#Find-or-Generate-Your-API-Key.

Copia la API Key en el fichero .env

Es una buena práctica copiar la clave en el fichero .env en lugar de editar el fichero config/mailchimp.php:

MAILCHIMP_API_KEY=copia-aquí-tu-llave-api

Copia la clave API tal cual, sin comillas.

Busca el Id de la lista que quieres usar

Cada lista de suscriptores que creas en MailChimp tiene su propio identificador. Debes buscar el de la lista a la que quieres suscribir a tus usarios:

  1. Entra en el apartado “Lists”.
  2. Selecciona la lista que te interesa.
  3. Settings → List name and defaults.
  4. Busca la sección donde diga “List ID”.

Ejemplo de uso en Laravel

Vamos a crear un controlador de ejemplo para ver cómo se usaría la API:

$ php artisan make:controller MailchimpTest

Y en el contenido del controlador podemos hacer algo así:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use Mailchimp;
use Mailchimp_Error;
use Mailchimp_List_AlreadySubscribed;

class MailchimpTest extends Controller
{
    //
    public function registrarUsuario(Mailchimp $mailchimp)
    {
        $listId = 'pon-aquí-el-id-de-tu-lista';
        
        try {
            print_r($this->mailchimp
                ->lists
                ->subscribe(
                    $listId,
                    ['email' => 'unemail@emailfalso.com'],
                    ['FNAME' => 'Gorka', 'LNAME' => 'Urrutia']
                ));
        } catch (Mailchimp_List_AlreadySubscribed $e) {
            // El usuario ya está suscrito
        } catch (Mailchimp_Error $e) {
            // Ay! un error!
        }
    }
}

Algunas anotaciones:

  • Es importante el argumento Mailchimp, no lo olvides. De esta forma el controlador recibe una instancia de Mailchimp desde el contenedor IoC.
  • El nombre y apellido (campos FNAME y LNAME) son opcionales; ese array es opcional.
  • En la variable $listId debes poner el identificador de la lista que has conseguido en el apartado anterior.

Por último añadimos la ruta a nuestro routes.php:

Route::get('mailchimp', 'MailchimpTest@registrarUsuario');

Y ya podemos probar si funciona todo correctamente entrando en:

https://miweb.com/mailchimp
¿Es necesario que avise que el en lugar de miweb.com debes poner la url de tu web? :-D

Si todo va bien verás un mensaje parecido a éste:

Array ( [email] => unemail@emailfalso.com [euid] => 7fa2044f0e [leid] => 592023927 )

¡Esas excepciones!

Si no ves ningún mensaje y la página aparece en blanco es porque ha habido un error. Se habrá lanzado alguna excepción, pero como el manejo de las mismas está en blanco no verás nada.

Si quieres ver el error que se ha producido saca el $this->mailchimp del bloque try y recarga la página.

Otra opción (más correcta) es que gestiones las excepciones en lugar de dejarlas en blanco como he hecho yo para el ejemplo.

Autor:
Nivel: Intermedio
Palabras clave:
Fecha publicado:
Fecha actualizado: 22-09-2016

Otros capítulos de la misma serie

Este capítulo es parte de la serie: Laravel pearls.

Y muchos más en preparación.

Disponible en los planes: Laravel hero