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 添加电子邮件到列表

使用 .Net 调用 MailChimp API v3.0

如何在 mailchimp API v3.0 上获取具有特定标签的成员总数?

Mailchimp API v3.0 添加待处理成员而无需确认电子邮件

连接到 MailChimp v3.0 API

使用 Mailchimp api v3.0 将订阅者添加到分段