使用 MailChimp API V2 没有 Github 错误
Using MailChimp API V2 without Github error
我使用 MailChimp(旧版本)进行了大量工作,但由于一些新功能,我最近不得不更新到较新的 V2。现在我无法让我的代码工作,无论我搜索什么和在哪里,我能找到的唯一解决方案是在 GitHub 存储库 https://github.com/mailchimp/mcapi2-php-examples 的帮助下,它不能在这个项目中工作。
我的代码:
<?php
include "../../system/function/db.php";
$espid = urlencode(make_safe($_GET['espid']));
$apikey = urlencode($_GET['apikey']);
$usX = explode("-", $apikey);
$listid = urldecode($_GET['listid']);
$data = array(
'apikey'=> $apikey,
'filters' => array( 'list_id' => $listid ),
);
$payload = json_encode($data);
$submit_url = "http://" . $usX[1] . ".api.mailchimp.com/1.3/?method=campaigns";
$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, urlencode($payload));
$result = curl_exec($ch);
curl_close ($ch);
$data = json_decode(json_encode(json_decode($result)), true);
$data = $data['data'];
foreach ($data as $id) {
$ids .= $id['id'] . ",";
}
$campaigns = explode(",", $ids);
foreach ($campaigns as $campaign) {
if (!empty($campaign)) {
$data = array(
'apikey'=> $apikey,
'cid' => $campaign,
);
$payload = json_encode($data);
$submit_url = "https://" . $usX[1] . ".api.mailchimp.com/2.0/reports/opened.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, urlencode($payload));
$result = curl_exec($ch);
curl_close ($ch);
echo '<pre>'; var_dump($result); echo '</pre>';
}
}
?>
错误:
string(97) "{"status":"error","code":-100,"name":"ValidationError","error":"You must specify a apikey value"}"
我已经尝试用 API 键的字符串替换变量,这没有做任何不同的事情 - 我不知道我是否可以将信息 "wrong" 发送到MailChimp 服务器。
你们能帮帮我吗?希望您的理解和感谢!
您不需要对已经 JSON 编码的 CURLOPT_POSTFIELDS
数据进行 urlencode。只需使用原始 $payload
变量,它就可以工作。 (此示例中的两个调用都是如此)。
我使用 MailChimp(旧版本)进行了大量工作,但由于一些新功能,我最近不得不更新到较新的 V2。现在我无法让我的代码工作,无论我搜索什么和在哪里,我能找到的唯一解决方案是在 GitHub 存储库 https://github.com/mailchimp/mcapi2-php-examples 的帮助下,它不能在这个项目中工作。
我的代码:
<?php
include "../../system/function/db.php";
$espid = urlencode(make_safe($_GET['espid']));
$apikey = urlencode($_GET['apikey']);
$usX = explode("-", $apikey);
$listid = urldecode($_GET['listid']);
$data = array(
'apikey'=> $apikey,
'filters' => array( 'list_id' => $listid ),
);
$payload = json_encode($data);
$submit_url = "http://" . $usX[1] . ".api.mailchimp.com/1.3/?method=campaigns";
$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, urlencode($payload));
$result = curl_exec($ch);
curl_close ($ch);
$data = json_decode(json_encode(json_decode($result)), true);
$data = $data['data'];
foreach ($data as $id) {
$ids .= $id['id'] . ",";
}
$campaigns = explode(",", $ids);
foreach ($campaigns as $campaign) {
if (!empty($campaign)) {
$data = array(
'apikey'=> $apikey,
'cid' => $campaign,
);
$payload = json_encode($data);
$submit_url = "https://" . $usX[1] . ".api.mailchimp.com/2.0/reports/opened.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, urlencode($payload));
$result = curl_exec($ch);
curl_close ($ch);
echo '<pre>'; var_dump($result); echo '</pre>';
}
}
?>
错误:
string(97) "{"status":"error","code":-100,"name":"ValidationError","error":"You must specify a apikey value"}"
我已经尝试用 API 键的字符串替换变量,这没有做任何不同的事情 - 我不知道我是否可以将信息 "wrong" 发送到MailChimp 服务器。
你们能帮帮我吗?希望您的理解和感谢!
您不需要对已经 JSON 编码的 CURLOPT_POSTFIELDS
数据进行 urlencode。只需使用原始 $payload
变量,它就可以工作。 (此示例中的两个调用都是如此)。