2017-09-07 13 views
0

J'essaie d'inscrire les utilisateurs qui se sont inscrits à mon site WordPress à une liste de diffusion MailChimp. Voici la fonction que je utilise:Comment enregistrer un e-mail dans la liste de diffusion MailChimp à l'aide de curl et php

function rb_signup_mailing_list($email, $username, $fname, $lname){ 
$api_key  = '<my_api_key>'; 
$datacenter  = '<my_data_center>'; 
$list_id  = '<my_list_id>'; 
$auth   = base64_encode('user:'. $api_key); 
$member_id  = md5(strtolower($email)); 
$status   = 'subscribed'; 
$merge_fields = ['FNAME' => $fname, 'LNAME' => $lname]; 

$data = array(
    //'apikey'  => $api_key, 
    'email_address' => $email, 
    'status'  => $status, 
    'merge_fields' => $merge_fields, 
); 
$data_string = json_encode($data); 

//$url = 'https://' . substr($api_key, strpos($api_key, '-')+1) . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/' .md5(strtolower($email)); 
//$url = 'https://' . substr($api_key, strpos($api_key, '-')+1) . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/'; 
$url = 'https://' . $datacenter . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/'; 


$ch = curl_init($url); 
// curl_setopt($ch, CURLOPT_URL, $url); 
// curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt($ch, CURLOPT_HTTPHEADER, 
    array(
     'Content-Type: application/json', 
     'Authorization: Basic ' . $auth, 
     //'Content-Length: ' . strlen($data_string), 
    ) 
); 
curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/2.0'); 
curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_key); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
curl_setopt($ch, CURLOPT_POST, true); 
// curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $datastring); 



$result = curl_exec($ch); 
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

curl_close($ch); 

}

J'appelle la fonction comme ceci:

rb_signup_mailing_list('my[email protected]', 'my_username', 'Hans', 'Meyer'); 

$ result contient les éléments suivants après curl_exec:

{"type":"http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/","title":"Invalid Resource","status":400,"detail":"The resource submitted could not be validated. For field-specific details, see the 'errors' array.","instance":"","errors":[{"field":"","message":"Schema describes object, NULL found instead"}]} 

Je peux voir les demandes apparaissant dans MailChimp, mais elles n'ajoutent pas d'emails à la liste. Qu'est-ce que je fais mal?

+0

Essayez de remplacer 'CURLOPT_USERAGENT' par 'MailChimp-API/3.0' – Spartacus

+0

J'ai essayé, mais le résultat est le même. –

Répondre

2

Vous déclarez la variable $data_string pour contenir les données d'abonné, mais en utilisant $datastring dans votre demande CURL. Essayez de les mettre à jour au même nom et cela devrait fonctionner correctement.

+0

Salut Joel, $ data_string est juste json_encode ($ data). Je dois envoyer des données au format JSON, n'est-ce pas? En tout cas, j'ai essayé d'envoyer $ data au lieu de $ data_string, même résultat. –

+0

@RobertBethge Oui, mais la déclaration de la variable de chaîne de données contient un trait de soulignement dans son nom, contrairement à la variable de votre requête CURL. C'est juste une erreur simple. :) –

+0

Aïe! Effectivement! Tu l'as eu! Maintenant ça marche! Merci beaucoup! Tellement de codage à 2 heures du matin .... –