Mailchimp API v3.0 通过 NodeJS http 添加电子邮件到列表
Posted
技术标签:
【中文标题】Mailchimp API v3.0 通过 NodeJS http 添加电子邮件到列表【英文标题】:Mailchimp API v3.0 add email to list via NodeJS http 【发布时间】:2015-12-29 23:11:12 【问题描述】:我正在使用 NodeJS 调用新的 MailChimp 3.0 API,以便将电子邮件添加到列表中。虽然我可以通过 POSTman 让它工作,但我很难使用 Node 的 http:
var http = require('http');
var subscriber = JSON.stringify(
"email_address": "test@test.com",
"status": "subscribed",
"merge_fields":
"FNAME": "Tester",
"LNAME": "Testerson"
);
var options =
host: 'https://us11.api.mailchimp.com',
path: '/3.0/lists/<myListID>/members',
method: 'POST',
headers:
'Authorization': 'randomUser myApiKey',
'Content-Type': 'application/json',
'Content-Length': subscriber.length
var hreq = http.request(options, function (hres)
console.log('STATUS CODE: ' + hres.statusCode);
console.log('HEADERS: ' + JSON.stringify(hres.headers));
hres.setEncoding('utf8');
hres.on('data', function (chunk)
console.log('\n\n===========CHUNK===============')
console.log(chunk);
res.send(chunk);
);
hres.on('end', function(res)
console.log('\n\n=========RESPONSE END===============');
);
hres.on('error', function (e)
console.log('ERROR: ' + e.message);
);
);
hreq.write(subscriber);
hreq.end();
然而,我得到的不是来自 Mailchimp 的某种 JSON 错误,而是 html: 400 错误请求
400 错误请求
nginx
我在这里做错了什么清楚吗?看起来很简单,但我尝试过的任何方法似乎都不起作用。
一些额外的想法:
-
虽然 http 的选项具有“auth”属性,但我使用标头代替以确保在没有编码的情况下发送授权 (as mentioned here)。不过,我也尝试过使用“auth”属性,得到了相同的结果。
我实际上是从 inside 一个 ExpressJS API 进行此调用(我的客户端调用 Express API,它调用上面的代码 - 为了简单起见,我已经编辑了这个示例中的所有内容)。这就是为什么我的变量是“hres”和“hreq”,以将它们与 Express 中的“res”和“req”区分开来。是否有任何原因可能是问题所在?
如上所述,我在使用 POSTman 时能够获得成功的结果,所以我至少知道我的主机、路径、列表 ID 和 API 密钥是正确的。
【问题讨论】:
你试过使用 Node 的 https 模块吗?只是一个想法。 【参考方案1】:您可以在 API v3 中很好地使用 auth
属性,但如果您获得 400,那不是问题。 400 错误的正文应该提供更详细的信息,但有一件事会立即跳出来:MailChimp 不允许将假冒或假冒的电子邮件添加到列表中(如 test@test.com),所以我会尝试一个真实的地址,看看是否适合你。
【讨论】:
【参考方案2】:原来这有一个非常简单的解决方案:选项对象的“主机”属性需要仅域名。 IE,去掉“https://”协议:
var options =
host: 'us11.api.mailchimp.com',
path: '/3.0/lists/<myListID>/members',
method: 'POST',
headers:
'Authorization': 'randomUser myApiKey',
'Content-Type': 'application/json',
'Content-Length': subscriber.length
【讨论】:
我还必须指定协议:“https:”,否则我会被拒绝连接。【参考方案3】:试试这个,对我来说效果很好。
var request = require('request');
function mailchimpAddListCall(email, cb)
var subscriber = JSON.stringify(
"email_address": email,
"status": "subscribed"
);
request(
method: 'POST',
url: 'https://us13.api.mailchimp.com/3.0/lists/<Your list id>/members',
body: subscriber,
headers:
Authorization: 'apikey <your Mailchimp API key>',
'Content-Type': 'application/json'
,
function(error, response, body)
if(error)
cb(err, null)
else
var bodyObj = JSON.parse(body);
console.log(bodyObj.status);
if(bodyObj.status === 400)
cb(bodyObj.detail, null);
var bodyObj = JSON.parse(body);
cb(null, bodyObj.email_address +" added to list.");
);
request
是一个节点模块,您需要将其安装到您的 package.json 中。 npm install --save request
【讨论】:
在这里定义什么是请求可能会很好,因为这不适用于内置的 require('http') 库。 @Legoless 这是一个节点模块 -- npm install request 然后 var request = require('request') 像 WAQAR 一样使用它以上是关于Mailchimp API v3.0 通过 NodeJS http 添加电子邮件到列表的主要内容,如果未能解决你的问题,请参考以下文章
Mailchimp API v3.0 通过 NodeJS http 添加电子邮件到列表
如何在 mailchimp API v3.0 上获取具有特定标签的成员总数?