2014-08-29 14 views
5

Tôi đã thử và cố gắng gửi dữ liệu đến MailChimp bằng cách sử dụng curl nhưng không thể lấy dữ liệu để lưu trong MailChimp. Bất kỳ sự giúp đỡ này sẽ được đánh giá rất nhiều!Không thể nhận được API MailChimp Curl để làm việc

Đây là mã của tôi:

$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

những gì hiện trở lại MailChimp? –

+0

Nó trả về đúng – MagentoMan

+0

Trước hết, tôi khuyên bạn nên sử dụng API 2.0 mới nhất ... Sắp xếp cùng một cấu trúc, nhưng chúng đơn giản hóa một vài điều. – Oberst

Trả lời

5

Như tôi đã đề cập trong nhận xét của tôi, bạn nên xem xét mới nhất 2.0 API. Bên cạnh đó, đây là mã tôi đang sử dụng trong một môi trường sản xuất.

Mặc dù lộn xộn, nó hoạt động. Chỉ cần thay thế merge_vars và biến với những gì của bạn là Tất cả các biến $lead đang được kéo ở nơi khác trong kịch bản ... Không liên quan đến điều này. Bạn vẫn có thể có được ý tưởng. ;)

Nếu một thứ gì đó vẫn chưa được lưu, thì bạn có lỗi đánh máy ở đâu đó. Kiểm tra mọi thứ. Đã cho tôi một giờ một lần để nhận ra tôi đã viết sai chính tả '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

Cảm ơn rất nhiều @Oberst! Cho đến khi bạn đề cập đến nó, tôi đã không chạy trên bất cứ điều gì liên quan đến API 2.0. Một trong những tôi đã được sử dụng ban đầu đến từ đây: 'http: // apidocs.mailchimp.com/api/1.3/listsubscribe.func.php' Một khi tôi chuyển đổi qua đó và thay đổi' email_address' để 'email' và sử dụng một' mảng' cho giá trị nó đã hoạt động :) Cảm ơn bạn lần nữa! – MagentoMan

6

đây đang làm việc đơn giản MailChimp PHP đoạn API 3.0 dụ Curl đang

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

nó đang cho tôi lỗi này [loại] => http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/ [tiêu đề] => Lỗi phân tích cú pháp JSON [trạng thái] => 400 [detail] => Chúng tôi đã gặp lỗi phân tích cú pháp JSON không xác định. – saadk

+0

Điều này bây giờ sẽ là câu trả lời được chấp nhận vì phiên bản 2 của API MailChimp đang bị ngưng. – BFWebAdmin

+2

Ai đó có thể giải thích tại sao các nhà phát triển mailchimp không cung cấp ví dụ dễ sử dụng như vậy? Tôi đoán nó sẽ dễ dàng sau đó ... – Black

Các vấn đề liên quan