使用CURL脚本使用API将新条目添加到Mailchimp邮件列表,但会收到无效的资源错误。我可以在邮件列表中看到三个字段,即EMAIL,FNAME& LNAME所以无法理解为什么会出现验证错误。我怎样才能更好地排除故障,以便查看错误的确切原因?
<?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 = "xxxxxxxxxxxxxxxxxxxxxxx-us13"; // 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 = "xxxxxxxx"; // web site list
// the data I used to register (there may be others you can use, check API docs)
$email = "test@test.com";
$fname = "Test";
$lname = "Test";
$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://us13.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(' ');
?>
答案 0 :(得分:0)
试试这个
$data = ([
'apikey' => $apikey,
'email_address' => $email,
'status' => 'pending',
'merge_fields' => array(
'FNAME' => $fname,
'LNAME' => $lname,
]);
$json_data = json_encode($data);