Mailchimp es un proveedor de servicios de marketing por correo electrónico, fundado en el año 2001. Cuenta con 7 millones de usuarios que envían un total de más de 10 mil millones de mensajes de correo electrónico mensuales a través del servicio.
En este tutorial vamos a ver cómo podemos integrar la API de Mailchimp con Php para poder gestionar nuestras listas y usuarios de forma sencilla.
Si no conoces Mailchimp probablemente te estés perdiendo una gran herramienta para comunicarte con los usuarios de tus plataformas, por ejemplo, para hacer el envío de Newsletters.
Mailchimp nos permite crear listas de usuarios (suscriptores) para así poder comunicarnos con ellos a través de email, definir templates responsive, crear campañas y hacer el envío masivo a todos los usuarios seleccionados, aparte de otras muchas cosas.
Por si fuera poco, Mailchimp además ofrece una versión gratuita que podrás utilizar si tienes menos de 2.000 suscritos y envías menos de 12.000 emails por mes, así que cómo puedes ver puedes probar la herramienta para saber si es lo que necesitas o no.
Cómo Integrar la API de Mailchimp con Php
Lo primero que debemos hacer es instalar Mailchimp, yo utilizaré composer para este ejemplo ya que es la forma más sencilla, así que podemos ejecutar el siguiente comando desde la terminal.
1 |
composer require drewm/mailchimp-api |
Una vez ejecutado, ya tendremos instaladas todas las dependencias que necesitamos, así que vamos a crear una sencilla clase para poder utilizar la API de Mailchimp con Php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php require 'vendor/autoload.php'; use DrewM\MailChimp\MailChimp; use \DrewM\MailChimp\Batch; /** * Class MailChimpClient */ class MailChimpClient { /** * @var */ protected $_apiKey; /** * @var MailChimp */ protected $_mailChimp; /** * MailChimpClient constructor. * * @param $apiKey */ public function __construct($apiKey) { $this->_apiKey = $apiKey; $this->_mailChimp = new MailChimp($this->_apiKey); } } $mailChimpClient = new MailChimpClient('TU_API_KEY'); |
Antes de seguir, si tienes dudas para obtener tu api key simplemente revisa este enlace.
Ahora sí, de momento lo único que estamos haciendo es crear una instancia de Mailchimp, la cual sólo necesita la API_KEY, de esta forma ya tendremos acceso a dicha instancia dentro de nuestra clase MailChimpClient.
Obtener todas las listas
Para acceder a todas las listas de nuestra cuenta simplemente debemos escribir el siguiente método.
1 2 3 4 5 6 7 |
/** * @return array|false */ public function getLists() { return $this->_mailChimp->get('lists'); } |
Obtener una lista en concreto
Para acceder a una lista primero debemos saber su id, para obtenerla simplemente sigue este enlace y a continuación añade el siguiente método en la clase MailchimpClient.
1 2 3 4 5 6 7 8 9 |
/** * @param $listId * * @return array|false */ public function getListInfo($listId) { return $this->_mailChimp->get("lists/$listId"); } |
Obtener los suscriptores de una lista
Si lo que deseas es acceder a todos los suscriptores de una lista ya creada simplemente debemos escribir el siguiente método.
1 2 3 4 5 6 7 8 9 |
/** * @param $listId * * @return array|false */ public function getListMembers($listId) { return $this->_mailChimp->get("lists/$listId/members"); } |
Suscribir a un usuario a una lista
Para suscribir a un usuario a una lista ya creada simplemente debemos escribir el siguiente método.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
/** * @param array $data * * @return array|false */ public function subscribe(Array $data = []) { try{ $url = sprintf('lists/%s/members', $data['listId']); $result = $this->_mailChimp->post($url, [ 'email_address' => $data['email'], 'status' => 'subscribed', ]); return $result; } catch (Exception $exception) { return $exception->getMessage(); } } |
Actualizar los datos de un usuario asociado a una lista
Si necesitas actualizar a un usuario que está vinculado a una lista simplemente debemos añadir el siguiente método.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/** * @param array $data * * @return array|false */ public function updateMember(Array $data = []) { $subscriber_hash = $this->_mailChimp->subscriberHash($data['email']); $url = sprintf('lists/%s/members/%s', $data['listId'], $subscriber_hash); $result = $this->_mailChimp->patch($url, [ 'merge_fields' => ['FNAME'=> $data['first_name'], 'LNAME'=> $data['last_name']] ]); return $result; } |
Eliminar un suscriptor de una lista
Si lo que deseas es eliminar a un suscriptor de una lista simplemente debemos escribir el siguiente método.
1 2 3 4 5 6 7 8 9 |
/** * @param array $data */ public function removeMember(Array $data = []) { $subscriber_hash = $this->_mailChimp->subscriberHash($data['email']); $url = sprintf('lists/%s/members/%s', $data['listId'], $subscriber_hash); $this->_mailChimp->delete($url); } |
Suscribir múltiples usuarios a una lista
Si necesitas suscribir múltiples usuarios a una lista simplemente debemos escribir el siguiente método.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/** * @param $listId * @param array $data */ public function subscribeBatch($listId, Array $data = []) { $batch = $this->_mailChimp->new_batch(); $url = sprintf('lists/%s/members', $listId); foreach ($data as $index => $customer) { $currentOp = sprintf('op%s', ++$index); $batch->post($currentOp, $url, $customer); } $batch->execute(); } |
Con el código anterior ya tenemos un buen punto de partida para Integrar la API de Mailchimp con Php, a continuación dejo el código completo por si lo necesitas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
<?php require 'vendor/autoload.php'; use DrewM\MailChimp\MailChimp; use \DrewM\MailChimp\Batch; /** * Class MailChimpClient */ class MailChimpClient { /** * @var */ protected $_apiKey; /** * @var MailChimp */ protected $_mailChimp; /** * MailChimpClient constructor. * * @param $apiKey */ public function __construct($apiKey) { $this->_apiKey = $apiKey; $this->_mailChimp = new MailChimp($this->_apiKey); } /** * @return array|false */ public function getLists() { return $this->_mailChimp->get('lists'); } /** * @param $listId * * @return array|false */ public function getListInfo($listId) { return $this->_mailChimp->get("lists/$listId"); } /** * @param $listId * * @return array|false */ public function getListMembers($listId) { return $this->_mailChimp->get("lists/$listId/members"); } /** * @param array $data * * @return array|false */ public function subscribe(Array $data = []) { try{ $url = sprintf('lists/%s/members', $data['listId']); $result = $this->_mailChimp->post($url, [ 'email_address' => $data['email'], 'status' => 'subscribed', ]); return $result; } catch (Exception $exception) { return $exception->getMessage(); } } /** * @param array $data * * @return array|false */ public function updateMember(Array $data = []) { $subscriber_hash = $this->_mailChimp->subscriberHash($data['email']); $url = sprintf('lists/%s/members/%s', $data['listId'], $subscriber_hash); $result = $this->_mailChimp->patch($url, [ 'merge_fields' => ['FNAME'=> $data['first_name'], 'LNAME'=> $data['last_name']] ]); return $result; } /** * @param array $data */ public function removeMember(Array $data = []) { $subscriber_hash = $this->_mailChimp->subscriberHash($data['email']); $url = sprintf('lists/%s/members/%s', $data['listId'], $subscriber_hash); $this->_mailChimp->delete($url); } /** * @param $listId * @param array $data */ public function subscribeBatch($listId, Array $data = []) { $batch = $this->_mailChimp->new_batch(); $url = sprintf('lists/%s/members', $listId); foreach ($data as $index => $customer) { $currentOp = sprintf('op%s', ++$index); $batch->post($currentOp, $url, $customer); } $batch->execute(); } } $mailChimpClient = new MailChimpClient('TU_API_KEY'); //print_r($mailChimpClient->getList('LIST_ID')); //print_r($mailChimpClient->subscribe(['listId' => 'LIST_ID', 'email' => '[email protected]'])); //print_r($mailChimpClient->getListMembers('LIST_ID')); //print_r($mailChimpClient->updateMember(['listId' => 'LIST_ID', 'email' => '[email protected]', 'first_name' => 'Subscriptor', 'last_name' => 'Subscriptor'])); //print_r($mailChimpClient->removeMember(['listId' => 'LIST_ID', 'email' => '[email protected]'])); /** print_r($mailChimpClient->subscribeBatch('LIST_ID', [ [ 'email_address' => '[email protected]', 'status' => 'subscribed', ], [ 'email_address' => '[email protected]', 'status' => 'subscribed', ] ])); */ |