2014-08-29 5 views
5

Ich habe versucht und versucht, Daten an MailChimp mit curl senden, aber kann nicht die Daten in MailChimp speichern. Jede Hilfe mit diesem würde sehr geschätzt werden!MailChimp API Curl kann nicht funktionieren

Hier ist mein 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="[email protected]"; 
$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); 
+0

was Rückkehr tut MailChimp funktioniert? –

+0

Es gibt true – MagentoMan

+0

Zunächst einmal würde ich Ihnen empfehlen, die neueste 2.0 API zu verwenden ... Sortieren der gleichen Struktur, aber sie vereinfachen ein paar Dinge. – Oberst

Antwort

5

Wie ich in meinem Kommentar erwähnt, sollten Sie die neueste 2.0 API betrachten. Abgesehen davon ist dies Code, den ich in einer Produktionsumgebung verwende.

Obwohl chaotisch, ist es funktional. Ersetzen Sie einfach die merge_vars und Variablen durch Ihre Alle $lead Variablen werden an anderer Stelle im Skript gezogen ... Nicht relevant für diese. Sie sollten immer noch in der Lage sein, die Idee zu bekommen. ;)

Wenn noch etwas nicht gespeichert wird, dann hast du irgendwo einen Tippfehler. Überprüfen Sie alles. Es dauerte eine Stunde, bis ich bemerkte, dass ich 'merge_vars' falsch geschrieben hatte.

$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 
+0

Vielen Dank @Oberst! Bis du es erwähnt hast, habe ich nichts über die 2.0 API erfahren. Der eine, den ich ursprünglich benutzt habe, kam von hier: 'http: // apidocs.mailchimp.com/api/1.3/listsubscribe.func.php' Sobald ich zu dem konvertiert habe und' email_address' in 'email' geändert habe und ein' 'verwendet habe Array für den Wert, den es gearbeitet hat :) Danke nochmal! – MagentoMan

6

Hier einfach MailChimp PHP API 3.0 Curl-Beispiel-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 (e.g. 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.. 

?> 
+0

es gibt mir diesen Fehler [Typ] => http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/ [Titel] => JSON Parse Fehler [Status] => 400 [detail] => Wir haben einen nicht spezifizierten JSON-Parsing-Fehler festgestellt. – saadk

+0

Dies sollte nun die akzeptierte Antwort sein, da die Version 2 der MailChimp API eingestellt wird. – BFWebAdmin

+2

Kann jemand bitte erklären, warum die Mailchimp-Entwickler kein so einfach zu bedienendes Beispiel geliefert haben? Ich denke, es wäre zu leicht dann ... – Black