使用 MailChimp API v3.0 创建新的订阅者验证错误

Posted

技术标签:

【中文标题】使用 MailChimp API v3.0 创建新的订阅者验证错误【英文标题】:Creating new subscriber validation error using MailChimp API v3.0 【发布时间】:2016-01-03 05:13:20 【问题描述】:

我在使用 v3 API 在列表中创建新成员时遇到问题。我正在发送带有 json 数据的 post 请求:

网址:

https://us10.api.mailchimp.com/3.0/lists/<list-id>/members

标题:

   Content-type: application/json
   Authorization: apikey <my-api-key>

Json 正文:


  "status": "pending",
  "email_address": "emai@example.com",
  "merge_fields": 
    "FNAME": "John",
    "LNAME": "Smith",
    "REFERRER": "referrer",
    "REFERRAL": "referral"
  

它基于 api 文档和教程 https://teamtreehouse.com/library/mailchimp-api/mailchimp-api/adding-new-members-to-your-list 。但是每个响应看起来像:


  "type": "http://kb.mailchimp.com/api/error-docs/400-invalid-resource",
  "title": "Invalid Resource",
  "status": 400,
  "detail": "Your merge fields were invalid.",
  "instance": "",
  "errors": [
    
      "field": "FNAME",
      "message": "Please enter a value"
    ,
    
      "field": "LNAME",
      "message": "Please enter a value"
    ,
    
      "field": "REFERRAL",
      "message": "Please enter a value"
    ,
    
      "field": "REFERRER",
      "message": "Please enter a value"
    
  ]

我做错了什么? MailChimp API 有问题吗?

【问题讨论】:

我在 MailChimp 操场上试过你的 JSON,至少它似乎在那里工作us5.api.mailchimp.com/playground 您如何将此数据发送到该端点?卷曲还是什么?因为那个错误消息很能说明问题,它没有得到你的 merge_fields 值,只有键。 【参考方案1】:

将用户添加到列表时,您必须在列表中添加所有“必填”字段。要查看您的字段,请登录邮件黑猩猩点击“列表”,然后进入您的列表。从“设置”下拉菜单中选择“列出字段和 |MERGE| 标签”。

Newsletter 是我添加的一个额外的自定义必填字段。如果我不发送它,我会收到您遇到的错误,因为它是必填字段。所有其他字段都需要添加到 merge_fields 数组中,例如“NEWSLETTER”。

$dataCenter ='us10'; //last part of the api key
$auth = base64_encode( 'user:'.$apikey );
$data = array(
   'apikey'        => $apikey,
   'email_address' => $email,
   'status'        => 'subscribed',
   'merge_fields'  => ['NEWSLETTER' => '1']
);
$json_data = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/f3e05535e8/members/');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json',
'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);

如果我的表单中有更多自定义字段,我会像这样添加它们:

'merge_fields'  => [
    'NEWSLETTER' => '1',
    'ANOTHERFIELD' => 'this is example data',
]

Mail chimp 文档说它需要一个“merge_fields”对象,当数组转换为 json 时,它会变成一个 json 对象。

http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/

【讨论】:

【参考方案2】:

此外(缺少必填字段)我尝试添加带有大写字母的电子邮件时遇到了这个问题。因此,如果您发送的数据格式错误,也可能会发生这种情况。

【讨论】:

【参考方案3】:

我认为 json 是可以的。 虽然它说合并字段,但测试电子邮件地址不合适。

我可以通过两种方式制作 400 错误代码:

尝试添加已在列表中的电子邮件地址 尝试添加一个无法验证的虚假地址 (emai@example.com) 之类的......

如果您想制作虚假地址,请使用 @freddiesjokes.com 前// emai@freddiesjokes.com

我也尝试了@example.com,希望这对未来的人有所帮助(在询问后将近 2 年才回答)

【讨论】:

【参考方案4】:

您需要填写您的 REQUIRED 合并标签或删除它们,

注意:删除 REQUIRED 合并字段后会有(可能)延迟。

我没有坚持多久,我可以在复制需要合并标签的列表后确认。

【讨论】:

以上是关于使用 MailChimp API v3.0 创建新的订阅者验证错误的主要内容,如果未能解决你的问题,请参考以下文章

MailChimp 发送邮件 v3.0

使用 .Net 调用 MailChimp API v3.0

连接到 MailChimp v3.0 API

Mailchimp API v3.0 通过 NodeJS http 添加电子邮件到列表

通过 MailChimp API v3.0 向列表发送电子邮件?

使用 Coldfusion/Railo 向 Mailchimp API v3.0 发送 PUT 请求时出现 401 未经授权的错误