如何在 mailchimp rest api 中更新没有 ID 的订阅

how to update an subscription without id in mail chimp rest api

我真的很喜欢新的 Mail Chimp REST API - 通过 PUT 创建订阅很容易,并且可以使用订阅 ID 更新订阅。

但我想简单地使用电子邮件地址更新订阅,因为我不想在我的中间件应用程序中保存任何新的 Mail Chimp Id,只要电子邮件足以作为标识符?

要更新列表成员,API 是:

/lists/{list_id}/members/{id}

但我更喜欢更简单的方法:

/lists/{list_id}/members/{email}

这样的事情可能吗?

订阅者的 ID 是其电子邮件地址的 MD5 哈希值。由于您必须调用 URL 的函数来为您的第二种方式对电子邮件地址进行编码,因此使用第一种方式同样简单。

有关详细信息,请参阅此 help document on managing subscribers

关于更新订阅者到 MailChimp 结果的更多细节 API。

// node/javascript specific, but pretty basic PUT request to MailChimp API endpoint

// dependencies (npm)
var request = require('request'),
    url = require('url'),
    crypto = require('crypto');

// variables
var datacenter = "yourMailChimpDatacenter", // something like 'us11' (after '-' in api key)
    listId = "yourMailChimpListId",
    email = "subscriberEmailAddress",
    apiKey = "yourMailChimpApiKey";

// mailchimp options
var options = {
    url: url.parse('https://'+datacenter+'.api.mailchimp.com/3.0/lists/'+listId+'/members/'+crypto.createHash('md5').update(email).digest('hex')),
    headers: {
        'Authorization': 'authId '+apiKey // any string works for auth id
    },
    json: true,
    body: {
        email_address: email,
        status_if_new: 'pending', // pending if new subscriber -> sends 'confirm your subscription' email
        status: 'subscribed',            
        merge_fields: {
            FNAME: "subscriberFirstName",
            LNAME: "subscriberLastName"
        },
        interests: {
            MailChimpListGroupId: true // if you're using groups within your list
        }
    }
};

// perform update
request.put(options, function(err, response, body) {
    if (err) {
        // handle error
    } else {
        console.log('subscriber added to mailchimp list');
    }
});