将以下 JSON 发送到 Mailchimp API 3.0 -- 出现错误,我错过了什么?

Sending the following JSON to Mailchimp API 3.0 -- Getting errors, what am I missing?

我正在尝试将以下 JSON 提交到我的列表中。我正在努力,以便向我们的 501(c)(3) 慈善机构捐款的人会自动通过电子邮件收到用于税收目的的收据,并注册我们的 "Donors" 列表,以便我们将来可以通知他们新资源和活动。

这是与 Google 应用脚本 UrlFetchApp.fetch 一起提交的。为了阅读错误信息,我用 curl 提交了我的 JSON。我已经回到几天前尝试过的方法,使用 Google 声明我应该提交 JSON 并为 URLFetchApp.fetch.

指定特定参数的方式
{
    "method": "POST",
    "Authorization": "Basic loginname:apikey",
    "Content-Type": "application/json",
    "payload": {
        "status": "subscribed",
        "email_address": "email@example.com",
        "merge_fields": {
            "FNAME": "Tony",
            "LNAME": "Blackmon"
        }
    }
}

Method 和 Authorization 是为了 URLFetchApp.fetch 知道这是一个 POST 请求,以及发送什么身份验证。据推测,唯一发送到 MailChimp 的是 "payload" JSON 对象(根据 Google 文档)。

如果我使用 curl 仅提交有效负载对象,它似乎可以正常工作。当我说它似乎有效时,我的列表仍然是空的,但如果我第二次重新 运行 curl 命令,我被告知用户已经在列表中。我等了几分钟,确认用户确实在列表中。

不过,我从 运行 宁 Google 应用程序脚本返回错误,这没有任何意义。让我去删除我的用户,然后 运行 再次删除,看看我得到了什么。

想通了...这是我要发送到 MailChimp 的所有代码:

function sendToMailChimp(first_name, last_name, email_address){

  var loginKey = Utilities.base64Encode("bch:" + API_KEY);

  var payload = {"status":"subscribed",
                 "email_address":email_address,
                 "merge_fields":{
                      "FNAME":first_name, 
                       "LNAME":last_name}};

  var payload = JSON.stringify(payload);

  var options = {"method":"POST",
                 "headers":{ "Authorization":"Basic " + loginKey},
                 "Content-Type":"application/json",
                 "muteHttpExceptions" : true,
                 "payload":payload }; 

  //var options = JSON.stringify(options);

  Logger.log(options);

  var response = UrlFetchApp.fetch(mc_base_url,options);
  Logger.log(response);

}

"options" 的注释行 JSON.stringify 不需要发生。它让 URLFetchApp.fetch 弄乱了它的选项。相反,我只需要 JSON.stringify 有效负载。既然我已经在这个问题上浪费了两天时间,希望如果其他人遇到这个问题,他们将能够因为这个 post.

而克服它