【问题标题】:Add Member to Mailchimp list via Node and Mailchimp API 3.0通过 Node 和 Mailchimp API 3.0 将成员添加到 Mailchimp 列表
【发布时间】:2016-02-08 18:48:17
【问题描述】:

我想将我的应用中的新注册添加到 Mailchimp 列表中。它通过这样的 cURL 语句完美运行:

curl --request POST --url 'https://us4.api.mailchimp.com/3.0/lists/[listid]/members' --user 'anystring:[api key]-us4' --header 'content-type: application/json' --data '{"email_address":"test@example.com", "status":"subscribed","merge_fields":{"FNAME":"Freddie","LNAME":"Jones"}}' --include

我在 Node.js 中使用 Request 模块,如下所示:

var request = require('request');

request({
    url: 'https://us4.api.mailchimp.com/3.0/lists/[list-id]/members',
    user: 'anystring:[api-key]',
    json: {
        "email_address":"test@example.com",
        "user":"anystring:[api-key]",
        "status":"subscribed",
        "merge_fields":{
            "FNAME":"Freddie",
            "LNAME":"Jones"
        }
    },
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    }
}, function(error, response, body){
        if(error) {
            console.log(error);
        } else {
            console.log(response.statusCode, body);
        }
    }
);

但我收到此错误:

401 { type: 'http://developer.mailchimp.com/documentation/mailchimp/guides/error-glossary/',
title: 'API Key Missing',
status: 401,
detail: 'Your request did not include an API key.',
instance: '' }

我如何正确地提出这个请求?

【问题讨论】:

  • 顺便说一句,我在代码示例中编辑了 api 密钥和列表 ID。在我的实际请求中,这些是真实的。

标签: node.js npm mailchimp


【解决方案1】:

与客户支持反复讨论了几次,最后发现我需要将我的 API 密钥添加到 请求标头 以便正确使用 MailChimp 进行身份验证v3.0 API。这是我使用的代码:

request({
    url: 'https://us4.api.mailchimp.com/3.0/lists/[list id]/members',
    json: {
        'email_address': user.email,
        'user': 'anystring:[api key]',
        'status': 'subscribed',
        'merge_fields': {
            'FNAME': user.firstName,
            'LNAME': ''
        }
    },
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
        'Authorization': 'apikey [api key]'
    }
}, function(error, response, body){
    if(error) {
        console.log(error);
    } else {
        console.log(response.statusCode, '>>>>> USER ADDED TO MAILCHIMP');
        // THEN log the user into the app
        req.login(user, function(err) {
            if (err) {
                res.status(400).send(err);
            } else {
                res.json(user);
            }
        });
    }
});

【讨论】:

    【解决方案2】:

    我刚刚比较了我最近用于访问 Mailchimp 的一些代码,并注意到我提供的 API 密钥是这样的:

    var request = require('superagent'); // I am using SuperAgent
    
    request.post(url)
    .set('Authorization', 'apikey ' + apiKey) // this sets a header field
    .send(data)
    .end(function(err, response) {
        // ...
    });
    

    请注意,我使用的是 SuperAgent 而不是 Request 库。不过,您应该能够轻松移植 sn-p。

    本质上,标题字段Authorization 是字符串apikey(尾随空格)和实际API 密钥的串联。查看请求documentation,这应该可以工作:

    request({
        url: 'https://us4.api.mailchimp.com/3.0/lists/[list-id]/members',
        json: json,
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
            'Authorization': 'apikey ' + apiKey
        }
    }, function(error, response, body) {
        // ...
    });
    

    【讨论】:

    • 这是否意味着我需要在我的请求中添加授权密钥值?
    • 连接起来是不是像这样:'Authorization': 'apikey 12345apikeystringvaluehere'
    • 是的。 (此文本仅用于克服答案的最小字符限制)
    • 嗯...不工作。 :( 我也在跟进 Mailchimp 支持。我会在收到回复后发布答案。感谢您的帮助!:)
    • 顺便说一句,您是否将 Mailchimp v3.0 api 用于您的 SuperAgent 请求?
    【解决方案3】:

    我在mailchimp v3 wrapper 中使用请求。我使用以下授权没有问题:

    request({
      method : ...,
      url : ...,
      auth : {
        user : 'any',
        password : api_key
      },
      json : ...,
      qs : ...
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-17
      • 2021-09-24
      • 2016-11-18
      • 1970-01-01
      • 2017-08-15
      • 2023-02-11
      • 2016-08-04
      • 2018-07-31
      • 2017-05-25
      相关资源
      最近更新 更多