该列表管理 URL 旨在由使用浏览器的用户点击,并且有几种不同的事情可能会影响您的流程。具体来说,如果 MailChimp 认为订阅来自机器人,它有时会显示验证码。
先决条件
更好的方法是使用 MailChimp 的 API。你需要四样东西:
-
您的数据中心 - 这类似于
us7,当您登录 MailChimp 时,它位于 URL 的开头。我将在下面使用 us7,但您应该替换自己的。
-
您的 API 密钥 - 您可以在帐户设置的“附加”部分或click here 中找到它。
-
您的列表 ID - 您可以在设置中找到(从“设置”菜单中选择“名称和默认值”链接)。它看起来像这样:
1295ff8fdb。
-
相关合并标签 -- 您只需要知道名字、姓氏和电话的合并标签是什么。我假设它们是下面的
FNAME、LNAME 和PHONE,但您需要替换自己的以使其正常工作。
一旦你有了这些东西,你就可以使用任何 HTTP 客户端(如Cake's)进行订阅。
认证
MailChimp 的 API v3 使用 HTTP Basic Authentication。这是一种基于标头的身份验证方案,绝大多数 HTTP 库开箱即用地支持它。如果您必须手动执行此操作,则传递一个名为 Authorization 的标头,该标头的内容是单词“Basic”,后跟一个空格,然后是您的用户名和密码,用冒号分隔,Base64 编码。对于 MailChimp,用户名无关紧要,您可以使用 API 密钥作为密码。
幸运的是,Cake 的客户提供了开箱即用的支持。要使用它,只需将auth 键传递到请求的选项参数中。该值应如下所示:array('type' => 'basic', 'username' => 'anything', 'password' => $MAILCHIMP_API_KEY)。 (注意,MailChimp 不使用用户名,你可以传递任何你想要的字符串。
有效载荷
使用上面的示例信息,我将使用如下所示的 JSON 有效负载对 POST 进行 POST 调用:
{
"email_address": "hugo@leggett.fr",
"status": "subscribed",
"merge_fields": {
"FNAME": "Hugo",
"LNAME": "Dumoulin",
"PHONE": "0606060606"
}
}
样品请求
因此,如果您使用的是上面链接的 HTTP 客户端,代码可能如下所示:
<?php
use Cake\Network\Http\Client;
$http = new Client();
$subscriberData = array(
'email_address' => 'hugo@leggett.fr',
'status' => 'subscribed',
'merge_fields' => array(
'FNAME' => 'Hugo',
'LNAME' => 'Dumoulin',
'PHONE' => '0606060606'
)
);
$response = $http->post(
'https://us7.api.mailchimp.com/3.0/lists/1295ff8fdb/members/',
json_encode($subscriberData),
array(
'type' => 'json'
'auth' => array(
'type' => 'basic',
'username' => 'anything',
'password' => $MAILCHIMP_API_KEY
)
)
);
现在,如果用户已经订阅,MailChimp 将返回一个 4xx 错误,并且此代码不考虑任何其他错误情况,因此绝对将此作为起点而不是完整的解决方案,但它应该会让你指向正确的方向。