Home / Programmazione / PHP / Aggiungere iscritti a MailChimp con PHP
Mattepuffo

Aggiungere iscritti a MailChimp con PHP

Aggiungere iscritti a MailChimp con PHP

In questo articolo avevamo visto come reperire gli iscritti di una lista in MailChimp con PHP.

Oggi vediamo come aggiungerli; vedremo due esempi:

  • nel primo verrò creato l'utente solo se la email non esiste, e in caso contrario verrà restituito un errore
  • nel secondo, nel caso di email già esistente, verranno aggiornati i dati di quell'utente

A livello di codice, le modifiche sono molto poche.

Cominciamo con il primo esempio:

<?php
$API_KEY = '';
$MC_ROOT = 'https://us12.api.mailchimp.com/3.0/';
$ID_LIST = '';
$data = [
    'email' => 'email@email.it',
    'status' => 'subscribed',
    'firstname' => 'nome',
    'lastname' => 'cognome',
];
$urlAdd = $MC_ROOT . 'lists/' . $ID_LIST . '/members';
$json = json_encode(
        [
            'email_address' => $data['email'],
            'status' => $data['status'], // "subscribed","unsubscribed","cleaned","pending"
            'merge_fields' => [
                'FNAME' => $data['firstname'],
                'LNAME' => $data['lastname']
            ]
        ]);

$ch = curl_init($urlAdd);
curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $API_KEY);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $result;

Questo invece il secondo esempio:

<?php
$API_KEY = '';
$MC_ROOT = 'https://us12.api.mailchimp.com/3.0/';
$ID_LIST = '';
$data = [
    'email' => 'email@email.it',
    'status' => 'subscribed',
    'firstname' => 'nome',
    'lastname' => 'cognome',
];
$memberHash = md5(strtolower($data['email']));
$urlAdd = $MC_ROOT . 'lists/' . $ID_LIST . '/members/' . $memberHash;
$json = json_encode(
        [
            'email_address' => $data['email'],
            'status' => $data['status'], // "subscribed","unsubscribed","cleaned","pending"
            'merge_fields' => [
                'FNAME' => $data['firstname'],
                'LNAME' => $data['lastname']
            ]
        ]);

$ch = curl_init($urlAdd);
curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $API_KEY);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
echo $result;

Le differenza tra il secondo e il primo sono:

  • il metodo PUT al posto del POST
  • la variabile $memberHash, che calcola l'hash MD5 della email in lower-case (è richiesto così dalle API), e che viene passato come ultimo argomento dell'url

Tutto qua.

Enjoy!