【问题标题】:Subscribe Mailchimp from controller without form CakePHP从控制器订阅 Mailchimp 没有表单 CakePHP
【发布时间】:2015-07-23 08:59:56
【问题描述】:

我正在为 Android 应用程序创建网络服务。
Android 应用程序有一个包含 3 个字段的“时事通讯订阅”选项:
- 电子邮件
- 姓氏
- 电话号码

应用程序将这些数据以 json 格式发送到我的网络服务上的NewsletterControlleur.php

{
    "Newsletter":{
        "user":{
            "first_name":"Hugo",
            "surname":"Dumoulin",
            "phone":"0606060606",
            "email":"hugo@gmail.fr"
        }
     }
}

我现在需要将此人添加到我的 Mailchimp 订阅者列表中。
如何在控制器中使用我的 json 数据且没有任何形式来执行此操作?

我知道我必须将这些数据发布到这样的网址(mailchimp 给我的):

http://******.us1.list-manage.com/subscribe/post?u=************&id=********

有谁知道我如何做到这一点?
提前致谢。

【问题讨论】:

标签: json cakephp mailchimp


【解决方案1】:

该列表管理 URL 旨在由使用浏览器的用户点击,并且有几种不同的事情可能会影响您的流程。具体来说,如果 MailChimp 认为订阅来自机器人,它有时会显示验证码。

先决条件

更好的方法是使用 MailChimp 的 API。你需要四样东西:

  1. 您的数据中心 - 这类似于 us7,当您登录 MailChimp 时,它位于 URL 的开头。我将在下面使用 us7,但您应该替换自己的。
  2. 您的 API 密钥 - 您可以在帐户设置的“附加”部分或click here 中找到它。
  3. 您的列表 ID - 您可以在设置中找到(从“设置”菜单中选择“名称和默认值”链接)。它看起来像这样:1295ff8fdb
  4. 相关合并标签 -- 您只需要知道名字、姓氏和电话的合并标签是什么。我假设它们是下面的FNAMELNAMEPHONE,但您需要替换自己的以使其正常工作。

一旦你有了这些东西,你就可以使用任何 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 错误,并且此代码不考虑任何其他错误情况,因此绝对将此作为起点而不是完整的解决方案,但它应该会让你指向正确的方向。

【讨论】:

  • 哇。感谢您的详细解释。确实这似乎是正确的方法,我会尽快尝试。非常感谢!
  • 很好的答案,但它没有显示如何使用 API 密钥进行身份验证。
  • @doonot -- 还有其他一些问题解释了如何使用 MailChimp 进行身份验证,可能更彻底,但我已经更新了这个答案,在这里也包括了特定于 CakePHP 的答案。
猜你喜欢
  • 2014-02-19
  • 2011-02-11
  • 2018-08-27
  • 2016-05-30
  • 2014-04-24
  • 2017-11-18
  • 2016-11-01
  • 1970-01-01
  • 2018-12-18
相关资源
最近更新 更多