Не удается заставить Curl MailChimp API работать

Я попытался и попытался отправить данные в MailChimp с помощью curl, но не смог получить данные для сохранения в MailChimp. Любая помощь с этим будет принята с благодарностью!

Вот мой код:

$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); 

Solutions Collecting From Web of "Не удается заставить Curl MailChimp API работать"

Как я уже упоминал в своем комментарии, вы должны рассмотреть новейший API 2.0. Помимо этого, это код, который я использую в рабочей среде.

Хотя он грязный, он функциональный. Просто замените merge_vars и переменные тем, что у вас есть. Все переменные $lead вытягиваются в другом месте скрипта … Не имеет к этому отношения. Вы все равно должны получить эту идею. 😉

Если что-то еще не сохраняется, тогда у вас есть опечатка. Проверьте ВСЕ. Принял меня один час, чтобы понять, что у меня с ошибками '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 

Здесь работает простой фрагмент кода MailChimp PHP API 3.0 Curl

 <?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.. ?>