2014-08-29 13 views
5

Próbowałem i próbowałem wysyłać dane do MailChimp za pomocą curl, ale nie mogę uzyskać danych do zapisania w MailChimp. Każda pomoc zostanie doceniona!Nie można przekonwertować funkcji MailChimp API Curl do pracy

Oto mój kod:

$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

co robi MailChimp zwrot? –

+0

Zwraca true – MagentoMan

+0

Po pierwsze, polecam korzystanie z najnowszego interfejsu API 2.0 ... Sortowanie tej samej struktury, ale upraszcza kilka rzeczy. – Oberst

Odpowiedz

5

Jak wspomniałem w moim komentarzu, należy rozważyć najnowszą 2.0 API. Poza tym jest to kod, którego używam w środowisku produkcyjnym.

Mimo bałaganu jest funkcjonalny. Po prostu zamień zmienne merge_vars i zmienne na twoje, Wszystkie zmienne $lead są przeciągane gdzie indziej w skrypcie ... Nie dotyczy to tego. Powinieneś być w stanie uzyskać pomysł. ;)

Jeśli coś wciąż nie jest zapisywane, to masz gdzieś literówkę. Sprawdź WSZYSTKO. Zajęło mi to godzinę, aby się zorientować, że popełniłem błąd w pisaniu kodu: '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 
+0

Dziękuję bardzo @Oberst! Dopóki o tym nie wspomniałeś, nie natknąłem się na nic z 2.0 API. Ten, którego początkowo używałem, pochodzi stąd: 'http: // apidocs.mailchimp.com/api/1.3/listsubscribe.func.php' Kiedyś przekonwertowałem na to i zmieniłem' email_address' na 'email' i użyłem' ' tablica' dla wartości, którą przepracował :) Jeszcze raz dziękuję! – MagentoMan

6

Tu pracuje prosto urządzone MailChimp PHP za API 3.0 Curl przykład fragment kodu

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

daje mi ten błąd [typ] => http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/ [title] => Błąd analizy pliku JSON [status] => 400 [detail] => Napotkaliśmy nieokreślony błąd analizy składni JSON. – saadk

+0

To powinno być teraz zaakceptowaną odpowiedzią, ponieważ wersja 2 interfejsu MailChimp API jest przerywana. – BFWebAdmin

+2

Czy ktoś może wyjaśnić, dlaczego programiści programu Mailchimp nie przedstawili tak łatwego w użyciu przykładu? Myślę, że byłoby to łatwe ... – Black

Powiązane problemy