我试图将用户添加到我在Mailchimp中创建的列表中,但是在任何地方都找不到任何代码示例。我曾尝试弄清楚如何使用API,但我非常像个“看例子学习”的人。
我尝试使用API的第2版,但尽管通过网络上的示例进行了工作,但似乎没有任何效果,Mailchimp在其网站上说了有关其API早期版本的以下内容:
不推荐使用2.0版和更早版本。这些版本仅提供最小的支持(错误修复,安全补丁)。
更新1 :基于TooMuchPete的答案,我对“管理订户”上的链接进行了进一步的研究,并更改了我在此处找到的一些代码,但是由于函数http_build_query()不能处理嵌套数组,因此无法正常工作。我不确定如何处理添加订户的“ merge_fields”部分。我当前的代码如下:
$postdata = http_build_query( array( 'apikey' => $apikey, 'email_address' => $email, 'status' => 'subscribed', 'merge_fields' => array( 'FNAME' => $name ) ) ); $opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ) ); $context = stream_context_create($opts); $result = file_get_contents('https://us2.api.mailchimp.com/3.0/lists/<list_id>/members/', false, $context); var_dump($result); die('Mailchimp executed');
更新2 :我现在诉诸于使用curl,并且我设法使某些东西几乎可以正常工作。数据发送到Mailchimp,但是我收到错误消息 “您的请求未包含API密钥”。 我猜我需要按照此处所述进行身份验证。我尝试将其添加到无法正常工作的http标头中。请参阅下面的代码:
$apikey = '<api_key>'; $auth = base64_encode( 'user:'.$apikey ); $data = array( 'apikey' => $apikey, 'email_address' => $email, 'status' => 'subscribed', 'merge_fields' => array( 'FNAME' => $name ) ); $json_data = json_encode($data); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://us2.api.mailchimp.com/3.0/lists/<list_id>/members/'); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json/r/n Authorization: Basic '.$auth)); curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/2.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); var_dump($result); die('Mailchimp executed');
根据“ 列表成员实例”文档,最简单的方法是使用一个 PUT 请求,该请求根据文档 “添加新的列表成员,或者如果列表中已经存在电子邮件,则更新该成员” 。
PUT
此外apikey,绝对不是json模式的一部分,将它包含在json请求中没有意义。
apikey
另外,如@TooMuchPete的注释中所述,您可以使用CURLOPT_USERPWD基本的HTTP身份验证,如下所示。
CURLOPT_USERPWD
我正在使用以下功能来添加和更新列表成员。您可能需要merge_fields根据列表参数包括一些稍有不同的设置。
merge_fields
$data = [ 'email' => 'johndoe@example.com', 'status' => 'subscribed', 'firstname' => 'john', 'lastname' => 'doe' ]; syncMailchimp($data); function syncMailchimp($data) { $apiKey = 'your api key'; $listId = 'your list id'; $memberId = md5(strtolower($data['email'])); $dataCenter = substr($apiKey,strpos($apiKey,'-')+1); $url = 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/' . $listId . '/members/' . $memberId; $json = json_encode([ 'email_address' => $data['email'], 'status' => $data['status'], // "subscribed","unsubscribed","cleaned","pending" 'merge_fields' => [ 'FNAME' => $data['firstname'], 'LNAME' => $data['lastname'] ] ]); $ch = curl_init($url); curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $apiKey); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $json); $result = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $httpCode; }