当前位置: 首页 > 面试题库 >

使用Mailchimp的API v3将订户添加到列表中

范峰
2023-03-14
问题内容

我试图将用户添加到我在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 请求,该请求根据文档
“添加新的列表成员,或者如果列表中已经存在电子邮件,则更新该成员”

此外apikey,绝对不是json模式的一部分,将它包含在json请求中没有意义。

另外,如@TooMuchPete的注释中所述,您可以使用CURLOPT_USERPWD基本的HTTP身份验证,如下所示。

我正在使用以下功能来添加和更新列表成员。您可能需要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;
}


 类似资料:
  • 我想在WooCommerce的“管理订单列表”页面中添加一栏,它通知我用户是否是第一次购买。 我认为这个“检查客户是否已经在WooCommerce购买了东西”可以用于我的案例。 但我不知道如何在WooCommerce的“订单”页面上添加它

  • 问题内容: 我使用SQLAlchemy制作了一个表,却忘记添加列。我基本上想这样做: 这是什么语法?我在文档中找不到它。 问题答案: 这称为数据库迁移(SQLAlchemy不支持即开即用的迁移)。您可以考虑使用sqlalchemy- migrate 在这种情况下提供帮助,也可以仅通过选择的数据库的命令行实用程序,

  • < code>list_of_lists=[[1,2,3],[4,5,6]] < br > < code > list _ to _ add =[" A "," B "," C"] 我希望结果是list_of_lists会变成: 谢谢!

  • 问题内容: 与此问题类似,如何将空列添加到数据框?,我想知道向DataFrame添加一列空列表的最佳方法。 我想要做的基本上是初始化一列,然后遍历行以处理其中的一些行,然后在此新列中添加填充列表以替换初始化的值。 例如,如果下面是我的初始DataFrame: 然后,我最终希望得到这样的结果,其中每一行都经过单独处理(显示了示例结果): 当然,如果我尝试像使用其他任何常量一样进行初始化,它会认为我正

  • 问题内容: 在Mailchimp上订阅列表的完整jQuery解决方案是什么? 问题是大多数解决方案要么使用库,要么需要服务器端代码。我想要一个快速而优雅的解决方案,它可以让我完全控制UI,因此可以控制表单及其功能的UX。 问题答案: @Nagra的解决方案很好,但是由于有效的“ 同源来源安全策略” ,因此从客户端的浏览器执行该解决方案将引发错误。本质上,这些安全措施是为了 防止 在发件人和发件人位

  • 很容易将列表列表转换为数据帧: 但是我如何将df转换回列表列表呢?