Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't add user to a group using MailChimp API 3.0

I'm trying to update my code for subscribing new users to my MailChimp newsletter.

I would like it to add the user to a group, so that I can distinguish between users when sending out newsletters. This code, however, subscribes the user but does not add it to any group. What am I doing wrong? I am using the MailChimp API 3.0.

My code:

$apiKey     = 'XXXX';
$list_id    = 'XXXX';
$memberId   = md5(strtolower($data['email']));
$dataCenter = substr($apiKey,strpos($apiKey,'-')+1);

$url = 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/' . $memberId;

$json = json_encode(array(
    'email_address' => $data['email'],
    'status'        => $data['status'], // "subscribed","unsubscribed","cleaned","pending"
    'merge_fields'  => array(
        'FNAME'         => $data['firstname'],
        'LNAME'         => $data['lastname'],
        'GROUPINGS'     => array(
            0 => array(
                'name'   => 'Interests',
                'groups' => array( $data['tag'] ),
            ),
        ),
    ),
));

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $apiKey);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('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);
like image 717
Tobias Christian Jensen Avatar asked Jul 27 '16 12:07

Tobias Christian Jensen


1 Answers

You are passing Interest grouping in the wrong array. you need to pass the interest group id in interests array with value as true.

$json = json_encode(array(
    'email_address' => '[email protected]',
    'status'        => 'subscribed', 
    'merge_fields'  => array(
        'FNAME'         => 'FirstName',
        'LNAME'         => 'LastName',
     ),
    'interests'     => array( 
        '9143cf3bd1' => true,
        '789cf3bds1' => true
     ),
));

You will get the id of interest groups [9143cf3bd1,789cf3bds1 in above example] of the list by requesting to this URL

/lists/{list_id}/interest-categories

see doc here

If you want to remove the subscriber from the group, you need to set its value to false in your update request.

like image 131
Mûhámmàd Yäsår K Avatar answered Oct 08 '22 06:10

Mûhámmàd Yäsår K