从没有表单 CakePHP 的控制器订阅 Mailchimp
Subscribe Mailchimp from controller without form CakePHP
我正在为 Android 应用程序创建网络服务。
Android 应用程序有一个包含 3 个字段的 "Newsletter subscription" 选项:
- 电子邮件
- 姓氏
- phone_number
应用程序将这些数据以 json 格式发送到我的网络服务上的 NewsletterControlleur.php
:
{
"Newsletter":{
"user":{
"first_name":"Hugo",
"surname":"Dumoulin",
"phone":"0606060606",
"email":"hugo@gmail.fr"
}
}
}
我现在需要将此人添加到我的 Mailchimp 订阅者列表中。
我怎样才能从控制器使用我的 json 数据并且没有任何形式来做到这一点?
我知道我必须 post 像这样 url 这些数据(mailchimp 给我的):
http://******.us1.list-manage.com/subscribe/post?u=************&id=********
有人知道我如何做到这一点吗?
提前致谢。
list-manage URL 旨在让使用浏览器的用户访问,有几种不同的事情可能会阻碍您的进程。具体来说,如果 MailChimp 认为订阅来自机器人,它有时会显示验证码。
先决条件
更好的方法是使用 MailChimp 的 API。你需要四样东西:
- 您的数据中心 - 这类似于
us7
,当您登录到 MailChimp 时,它位于 URL 的开头。我将在下面使用 us7,但您应该替换为您自己的。
- 您的 API 密钥 - 您可以在帐户设置的 'extras' 部分或 click here.[=59= 中找到它]
- 您的列表 ID - 您可以在设置中找到(从 'settings' 菜单中选择 'name and defaults' link)。它看起来像这样:
1295ff8fdb
。
- 相关合并标签 -- 您只需要知道名字、姓氏和 phone 的合并标签是什么。我将假设它们是下面的
FNAME
、LNAME
和 PHONE
,但您需要替换为您自己的以使其正常工作。
一旦你有了这些东西,你就可以使用任何 HTTP 客户端(比如 Cake's)进行订阅。
身份验证
MailChimp API 的 v3 使用 HTTP Basic Authentication。这是一个 header-based 身份验证方案,绝大多数 HTTP 库都支持这种开箱即用的方式。如果您必须手动执行此操作,则传递一个名为 Authorization
的 header 并且 header 的内容是单词 "Basic" 后跟 space 和然后是您的用户名和密码,以冒号分隔,Base64 编码。对于 MailChimp,用户名无关紧要,您使用 API 密钥作为密码。
幸运的是,Cake 的客户端提供开箱即用的支持。要使用它,只需将 auth
键传递到请求的选项参数中。该值应如下所示:array('type' => 'basic', 'username' => 'anything', 'password' => $MAILCHIMP_API_KEY)
。 (注意,MailChimp 不使用用户名,您可以传递任何您想要的字符串。
有效负载
使用我上面的示例信息,我将使用如下所示的 JSON 有效负载对 https://us7.api.mailchimp.com/3.0/lists/1295ff8fdb/members/
进行 POST
调用:
{
"email_address": "hugo@leggett.fr",
"status": "subscribed",
"merge_fields": {
"FNAME": "Hugo",
"LNAME": "Dumoulin",
"PHONE": "0606060606"
}
}
样品申请
因此,如果您使用上面 linked 的 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 将 return 一个 4xx 错误并且此代码不考虑任何其他错误情况,因此一定要将此用作 jumping-off 点而不是一个完整的解决方案,但它应该让你指向正确的方向。
我正在为 Android 应用程序创建网络服务。
Android 应用程序有一个包含 3 个字段的 "Newsletter subscription" 选项:
- 电子邮件
- 姓氏
- phone_number
应用程序将这些数据以 json 格式发送到我的网络服务上的 NewsletterControlleur.php
:
{
"Newsletter":{
"user":{
"first_name":"Hugo",
"surname":"Dumoulin",
"phone":"0606060606",
"email":"hugo@gmail.fr"
}
}
}
我现在需要将此人添加到我的 Mailchimp 订阅者列表中。
我怎样才能从控制器使用我的 json 数据并且没有任何形式来做到这一点?
我知道我必须 post 像这样 url 这些数据(mailchimp 给我的):
http://******.us1.list-manage.com/subscribe/post?u=************&id=********
有人知道我如何做到这一点吗?
提前致谢。
list-manage URL 旨在让使用浏览器的用户访问,有几种不同的事情可能会阻碍您的进程。具体来说,如果 MailChimp 认为订阅来自机器人,它有时会显示验证码。
先决条件
更好的方法是使用 MailChimp 的 API。你需要四样东西:
- 您的数据中心 - 这类似于
us7
,当您登录到 MailChimp 时,它位于 URL 的开头。我将在下面使用 us7,但您应该替换为您自己的。 - 您的 API 密钥 - 您可以在帐户设置的 'extras' 部分或 click here.[=59= 中找到它]
- 您的列表 ID - 您可以在设置中找到(从 'settings' 菜单中选择 'name and defaults' link)。它看起来像这样:
1295ff8fdb
。 - 相关合并标签 -- 您只需要知道名字、姓氏和 phone 的合并标签是什么。我将假设它们是下面的
FNAME
、LNAME
和PHONE
,但您需要替换为您自己的以使其正常工作。
一旦你有了这些东西,你就可以使用任何 HTTP 客户端(比如 Cake's)进行订阅。
身份验证
MailChimp API 的v3 使用 HTTP Basic Authentication。这是一个 header-based 身份验证方案,绝大多数 HTTP 库都支持这种开箱即用的方式。如果您必须手动执行此操作,则传递一个名为 Authorization
的 header 并且 header 的内容是单词 "Basic" 后跟 space 和然后是您的用户名和密码,以冒号分隔,Base64 编码。对于 MailChimp,用户名无关紧要,您使用 API 密钥作为密码。
幸运的是,Cake 的客户端提供开箱即用的支持。要使用它,只需将 auth
键传递到请求的选项参数中。该值应如下所示:array('type' => 'basic', 'username' => 'anything', 'password' => $MAILCHIMP_API_KEY)
。 (注意,MailChimp 不使用用户名,您可以传递任何您想要的字符串。
有效负载
使用我上面的示例信息,我将使用如下所示的 JSON 有效负载对 https://us7.api.mailchimp.com/3.0/lists/1295ff8fdb/members/
进行 POST
调用:
{
"email_address": "hugo@leggett.fr",
"status": "subscribed",
"merge_fields": {
"FNAME": "Hugo",
"LNAME": "Dumoulin",
"PHONE": "0606060606"
}
}
样品申请
因此,如果您使用上面 linked 的 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 将 return 一个 4xx 错误并且此代码不考虑任何其他错误情况,因此一定要将此用作 jumping-off 点而不是一个完整的解决方案,但它应该让你指向正确的方向。