Can't get MailChimp to save my data using Curl API

I tried and tried to send data to MailChimp using curl, but I cannot get the data to save to MailChimp. Any help with this would be greatly appreciated!

Here is my code:

$mailChimpUrl = "http://us2.api.mailchimp.com/1.3/?method=listSubscribe"; $merges = array( 'FNAME'=>'Dave', 'LNAME'=>'Gilmour', 'BUILDING'=>'Central High School', 'MMERGE17' => '35904', 'MMERGE12'=>'Yes' ); $apikey="myrealapiishere-us2"; $listId="myrealformidishere"; $email=" zz22@aol.com "; $double_optin=true; $update_existing=false; $replace_interests=true; $send_welcome=false; $email_type = 'html'; $data = array( 'email_address'=>$email, 'apikey'=>$apikey, 'merge_vars' => $merges, 'id' => $listId, 'double_optin' => $double_optin, 'update_existing' => $update_existing, 'replace_interests' => $replace_interests, 'send_welcome' => $send_welcome, 'email_type' => $email_type ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $mailChimpUrl); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data)); $result = curl_exec($ch); curl_close($ch); 
+5
source share
4 answers

As I mentioned in my comment, you should consider the latest API 2.0. Also, this is the code that I use in a production environment.

Although it is dirty, it is functional. Just replace the merge_vars and variables with what you have. All $lead variables are pulled elsewhere in the script ... Not related to this. You should still get this idea.;)

If something else is not saved, then you have a typo. Check ALL. Took me an hour to understand that I have errors 'merge_vars' .

 $merge_vars=array( 'OPTIN_IP'=>$ip, // Use their IP (if avail) 'OPTIN-TIME'=>"now", // Must be something readable by strtotime... 'FNAME'=>ucwords(strtolower(trim($lead['first_name']))), 'LNAME'=>ucwords(strtolower(trim($lead['last_name']))), 'COMPANY'=>ucwords(strtolower(trim($lead['company']))), 'ORGTYPE'=>ucwords(strtolower(trim($lead['company_type']))), 'PLANNING'=>strtolower(trim(empty($lead['planning_stage'])?"Unknown":$lead['planning_stage'])), ); $send_data=array( 'email'=>array('email'=>$lead['email']), 'apikey'=>"", // Your Key 'id'=>"", // Your proper List ID 'merge_vars'=>$merge_vars, 'double_optin'=>false, 'update_existing'=>true, 'replace_interests'=>false, 'send_welcome'=>false, 'email_type'=>"html", ); $payload=json_encode($send_data); $submit_url="https://us4.api.mailchimp.com/2.0/lists/subscribe.json"; $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,$submit_url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_POST,true); curl_setopt($ch,CURLOPT_POSTFIELDS,$payload); $result=curl_exec($ch); curl_close($ch); $mcdata=json_decode($result); if (!empty($mcdata->error)) return "Mailchimp Error: ".$mcdata->error; return ""; // <-- This was obviously from within a function. If you made it here, it was a success 
+5
source

Simple PHP code works here MailChimp PHP API 3.0 Example Curl Code Snippet

 <?PHP // put your api key here note the ending text past the - this is your datacenter // the datacenter needs to be added into to the url in the curlopt_url (see below) $apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-us11"; // my datacenter was "us11" // listid goes here - to find this... log into mail chimp go to Lists menu , // look to far right of list name for a drop down arrow, select the "Settings" dropdown, // scroll to bottom and look for "Unique id for list" $list_id = "xxxxxxxxxx"; // web site list // the data I used to register (there may be others you can use, check API docs) $email = "<<email_address_to_register>>"; $fname = "<<first_name>>"; $lname = "<<last_name>>"; $auth = base64_encode( 'user:'.$apikey ); // Notice the value of 'status' is 'pending' // I found this via a google search indicating a double opt in subscription process $data = array( 'apikey' => $apikey, 'email_address' => $email, 'status' => 'pending', 'merge_fields' => array( 'FNAME' => $fname, 'LNAME' => $lname, ) ); $json_data = json_encode($data); $ch = curl_init(); // notice datacenter "us11" comes after the // - make sure you update this to your datacenter (eg us2, us7 etc) or you'll get the "wrong datacenter" error. $curlopt_url = "https://us11.api.mailchimp.com/3.0/lists/$list_id/members/"; curl_setopt($ch, CURLOPT_URL, $curlopt_url); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Basic '.$auth)); curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/3.0'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data); $result = curl_exec($ch); /* // some debug statements var_dump($result); print_r ($result); */ // here is simple way to determine status of a subscription // $result is in JSON format // this following loop is a simple JSON decode loop I found via google $status = "undefined"; $msg = "unknown error occurred"; $myArray = json_decode($result, true); foreach($myArray as $key => $value) { // debug key<<< = >>>$value<<< <br>"; if( $key == "status" ) { $status=$value; //debug echo" status found $status<Br>"; } else if ($key == "title") { $msg=$value; //debug echo" title found $msg<Br>"; } } // create the output that gets displayed or returned if invoked by AJAX method if( $status == "pending" ) { $msg = "Success! <br>$email has been subscribed <Br>check your inbox for the confirmation email to complete your subscription"; } else { $msg = "Sorry can not subscribe email $email <br>$msg <Br>"; } echo "$msg <br>"; die(' '); // frees up mem etc.. ?> 
+9
source

For those who are looking for an updated way to do this, there is a really good package; https://github.com/spatie/laravel-newsletter

You can install it through composer, and it is very simple to configure and use:

 use Newsletter; Newsletter::subscribe(' test@mail.com '); 
0
source

The previous answers did not work, and I have to adapt them, here is the one that works:

 <?PHP $apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxx-us20"; // found in Account -> extra $list_id = "xxxxxxxxx"; // found in Audience -> audience id $email = $_POST["email"]; $data = array( 'apikey' => $apikey, 'email_address' => $email, 'status' => 'subscribed', ); // Setup cURL $ch = curl_init('https://us20.api.mailchimp.com/3.0/lists/'.$list_id.'/members/'); curl_setopt_array($ch, array( CURLOPT_POST => TRUE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_HTTPHEADER => array( 'Authorization: apikey '.$apikey, 'Content-Type: application/json' ), CURLOPT_POSTFIELDS => json_encode($data) )); $response = curl_exec($ch); $status = "undefined"; $msg = "unknown error occurred"; $myArray = json_decode($response, true); foreach($myArray as $key => $value){ if( $key == "status" ){ $status=$value; } else if ($key == "title"){ $msg=$value; } } if( $status == "subscribed" ){ $msg = "Success"; } else { $msg = "Sorry can not subscribe email $email <br>$msg <Br>"; } echo "$msg"; die(' '); // frees up mem etc.. ?> 
0
source

Source: https://habr.com/ru/post/1201378/


All Articles