簡體   English   中英

使用帶有Curl的API無法讓MailChimp保存我的數據

[英]Can not get MailChimp to save my data using the API with Curl

我嘗試過嘗試使用curl將數據發送到MailChimp,但無法將數據保存在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);

這里是簡單的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 (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..

?>

正如我在評論中提到的,您應該考慮最新的2.0 API。 除此之外,這是我在生產環境中使用的代碼。

雖然很亂,但它很實用。 只需將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

對於尋找更新方式的人來說,有一個非常好的包裝; https://github.com/spatie/laravel-newsletter

你可以通過composer安裝它,它的設置和使用非常簡單:

use Newsletter;

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

以前的答案沒有用,我必須調整它們,這里有一個工作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM