如何使用他们的 api 3.0 创建/更新大量电子邮件到 Mailchimp 列表?

Posted

技术标签:

【中文标题】如何使用他们的 api 3.0 创建/更新大量电子邮件到 Mailchimp 列表?【英文标题】:How to create/update bulk of emails to Mailchimp list using their api 3.0? 【发布时间】:2016-07-19 23:19:33 【问题描述】:

我有一个已经在 MailChimp 中创建的列表,它在订阅和取消订阅列表中有一些地址。

现在,我需要在 php 代码中使用 api 创建/更新订阅者列表。

$apiKey = "XXXXXXXXXXXXXXXXXXXXXXXXX-us12";

$subscribers = array(array(
    'email_address'     => 'subscriber1@gmail.com',
    'status'    => 'subscribed',
    'merge_fields'  => array(
            'FNAME'     => "subscriber1F",
            'LNAME'     => "Arunachalam1L"
        )
),
array(
    'email_address'     => 'subscriber2@gmail.com',
    'status'    => 'subscribed',
    'merge_fields'  => array(
            'FNAME'     => "subscriber2F",
            'LNAME'     => "subscriber2L"
        )
));

$listId = "b633deb4c8";

$url = "https://us12.api.mailchimp.com/3.0/batches";
$id = 1;
    foreach ($subscribers as $subscriber) 
        #echo $subscriber['email_address'];
        $operation = array(
            'method'=>'PUT',
            'path'=>'/lists/'.$listId.'/members/'.md5(strtolower($subscriber['email_address'])),
            'body'=>json_encode($subscriber));
        $id++;
        array_push($batch_operations, $operation);
    

    $request_encoded = json_encode(array('operations'=>$batch_operations));

    $curl = curl_init($url);

    curl_setopt($curl, CURLOPT_USERPWD, 'user:' . $apiKey);    
    curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);//raw output
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
    curl_setopt($curl, CURLOPT_POSTFIELDS, $request_encoded); 
$result = curl_exec($curl);

我收到响应 200。然后我什至尝试通过获取批处理操作提交后返回的 BatchId 的响应。

它返回操作完成,并且所有操作都成功但列表尚未更新。有没有人成功使用过他们的批次 api?

编辑1: 我收到了此操作的回复,该操作有一个新的电子邮件地址。

"status_code":404,"operation_id":null,"response":"\"type\":\"http:\/\/developer.mailchimp.com\/documentation\/mailchimp\/guides\/error-glossary\/\",\"title\":\"Resource Not Found\",\"status\":404,\"detail\":\"The requested resource could not be found.\",\"instance\":\"\""

编辑 2

解释 对不起,我不明白你的意思。但我正在做的是首先发送批处理请求,(例如:- 它有 2 个操作,如帖子中所示)。然后我在我提出的请求的响应中得到一个 BatchId。然后我用 BatchId 发出了一个 Get 请求,为此我得到了一个包含错误操作信息的响应。我得到了一个链接来获取批处理操作的响应以及我发送的所有地址的结果。它只是具有所有操作,但如果地址已经存在,那么该操作是成功的(在某种意义上,它只是添加到成功的操作计数中)但我所做的更改没有反映,如果地址不存在,则添加在失败的操作中启动。

【问题讨论】:

您发布的代码中有一个语法错误,其中分配了$url 变量。此外,您的路径开头没有斜线,MailChimp's documentation shows。假设这不是问题,批量操作显示成功的操作有多少?这是您预期的数字吗? 我已经用 $url 变量和路径更新了帖子。仍然收到错误。实际上,我只对列表中已经存在的地址获得成功响应,对于每个新地址,我都获得了失败的操作。 该响应是在成功的批处理调用中返回的,还是您在进行批处理调用时得到的?如果是前者,最有可能的是列表 ID 不正确。如果您使用 runscope 之类的东西,您将能够看到正在发送的帖子正文。 响应是我使用从批处理操作请求的响应中获得的 batchId 发出的请求。 听起来你传入的列表ID无效。 【参考方案1】:

我解决了这个问题。这是因为 url 路径。虽然 Mailchimp 文档如下所示(即使我正在尝试批量操作)docs,

我在操作中改变了路径,应该是这样的。

'path'=>'lists/'.$listId.'/members/'.md5(strtolower($subscriber['email_address'])),

现在它按预期工作。已尝试使用 'PUT' 方法运行,它确实创建/更新订阅者到 mailchimp 中的列表。

【讨论】:

他想说的是“从路径中删除初始斜线”。【参考方案2】:

请删除以下代码并将类型更改为 POST,问题已解决。

array_push($batch_operations, $operation);

【讨论】:

欢迎来到 SO。您能否详细说明为什么以及如何解决 OP 的问题?

以上是关于如何使用他们的 api 3.0 创建/更新大量电子邮件到 Mailchimp 列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Shopify API 更新电子邮件模板(通知)?

如何通过 MailChimp 3.0 api 发送电子邮件?

我正在为客户开发电子商务网站,他们如何更新商店中的商品?

使用 Ruby 中的 MailChimp API 3.0 订阅电子邮件

api design - 如何设计公共 POST api 以防止垃圾邮件请求

mailchimp API 3.0,模板 html 源码