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

我正在使用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甚至得到某种types的JSON错误,但是,我得到HTML:400错误的请求

400错误的请求


nginx的

它是否清楚我在这里做错了什么?看起来很简单,但我没有试过似乎工作。

一些额外的想法:

  1. 虽然http的选项有一个“auth”属性,但是我使用头来确保授权在没有编码的情况下发送( 如这里所述 )。 不过,我也尝试了“auth”属性,并得到了相同的结果。
  2. 我实际上是 ExpressJS API 里面调用这个调用(我的客户调用Express API,调用了上面的代码 – 为了简单起见,我编辑了所有这些例子)。 这就是为什么我的variables是“hres”和“hreq”,以区别于Express中的“res”和“req”。 有什么理由可以解决这个问题吗?
  3. 如上所述,当使用POSTMAN时,我能够获得成功的结果,所以我至less知道我的主机,path,列表ID和API密钥是正确的。

事实certificate,这有一个非常简单的解决scheme:选项对象的“主机”属性需要域名。 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 } } 

试试这个,它对我的​​工作很好。

 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."); } }); } 

你可以在API v3中使用auth属性,但是如果你得到了400,那不是问题。 400错误的主体应该提供更详细的信息,但有一件事立即跳出来:MailChimp不允许将假的或假的电子邮件添加到列表(如test@test.com),所以我会尝试一个真实的地址,看看是否适合你。