使用 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 API v3.0 通过 NodeJS http 添加电子邮件到列表
通过 MailChimp API v3.0 向列表发送电子邮件?
使用 Coldfusion/Railo 向 Mailchimp API v3.0 发送 PUT 请求时出现 401 未经授权的错误