Json 从控制器订阅Mailchimp,无需表单CakePHP

Json 从控制器订阅Mailchimp,无需表单CakePHP,json,cakephp,mailchimp,Json,Cakephp,Mailchimp,我正在为Android应用程序创建Web服务。 Android应用程序有一个“新闻稿订阅”选项,有3个字段: -电子邮件 -姓氏 -电话号码 应用程序以json格式将这些数据发送到my web服务上的newsletteController.php: { "Newsletter":{ "user":{ "first_name":"Hugo", "surname":"Dumoulin", "phone":

我正在为Android应用程序创建Web服务。
Android应用程序有一个“新闻稿订阅”选项,有3个字段:
-电子邮件
-姓氏
-电话号码

应用程序以json格式将这些数据发送到my web服务上的
newsletteController.php

{
    "Newsletter":{
        "user":{
            "first_name":"Hugo",
            "surname":"Dumoulin",
            "phone":"0606060606",
            "email":"hugo@gmail.fr"
        }
     }
}
我现在需要将此人添加到我的Mailchimp订户列表中。
如何使用json数据从控制器执行此操作,而不使用任何形式

我知道我必须将这些数据发布到如下url(mailchimp给我的):

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

有人知道我是如何做到这一点的吗?

提前感谢。

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

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

  • 您的数据中心-这类似于
    us7
    ,当您登录到MailChimp时,它位于URL的开头。我将使用下面的us7,但您应该替换您自己的
  • 您的API密钥-您可以在帐户设置的“附加”部分或
  • 您的列表ID-您可以在设置中找到(从“设置”菜单中选择“名称和默认值”链接)。它看起来像这样:
    1295ff8fdb
  • 相关合并标签——您只需要知道名字、姓氏和电话的合并标签是什么。我假设下面是
    FNAME
    LNAME
    PHONE
    ,但为了使其正常工作,您需要替换自己的
  • 一旦你拥有了这些东西,你就可以使用任何HTTP客户端(比如)来进行订阅

    认证 MailChimp API的v3使用。这是一种基于头的身份验证方案,绝大多数HTTP库都支持这种现成的方案。如果必须手动执行此操作,则需要传递一个名为
    Authorization
    的标题,标题的内容是单词“Basic”,后跟空格,然后是用户名和密码,以冒号分隔,Base64编码。对于MailChimp,用户名是不相关的,您使用API密钥作为密码

    幸运的是,Cake的客户提供了开箱即用的支持。要使用它,只需将一个
    auth
    键传递到请求的options参数中。该值应如下所示:
    array('type'=>'basic','username'=>'anything','password'=>$MAILCHIMP\u API\u KEY)
    。(注意,MailChimp不使用用户名,您可以传递任何需要的字符串

    有效载荷 使用上面的示例信息,我会打一个
    POST
    电话到
    https://us7.api.mailchimp.com/3.0/lists/1295ff8fdb/members/
    ,JSON负载如下所示:

    {
        "email_address": "hugo@leggett.fr",
        "status": "subscribed",
        "merge_fields": {
            "FNAME": "Hugo",
            "LNAME": "Dumoulin",
            "PHONE": "0606060606"
        }
    }
    
    <?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
        )
      )
    );
    
    样品请求 因此,如果您正在使用上面链接的HTTP客户端,代码可能如下所示:

    {
        "email_address": "hugo@leggett.fr",
        "status": "subscribed",
        "merge_fields": {
            "FNAME": "Hugo",
            "LNAME": "Dumoulin",
            "PHONE": "0606060606"
        }
    }
    
    <?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
        )
      )
    );
    

    我使用了一个插件@Abhishek我要看一看谢谢!哇。谢谢你的详细解释。确实这似乎是正确的方法,我会尽快尝试。非常感谢!回答得很好,但它没有显示如何使用API密钥进行身份验证。@donot——还有其他问题需要解释如何使用MailChimp的身份验证可能更彻底,但我已经更新了这个答案,在这里也包括了CakePHP特有的内容。