11

提出此请求时:

// Subscribe a new account holder to a MailChimp list
function subscribeSomeoneToMailChimpList()
{
  var options =
  {
    "apikey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "id": "xxxxxx",
    "email":
    {
      "email": "me@example.com"
    },
    "send_welcome": false
  };
  var mcSubscribeRequest = UrlFetchApp.fetch("https://us4.api.mailchimp.com/2.0/lists/subscribe.json", options);
  var mcListObject = Utilities.jsonParse(mcSubscribeRequest.getContentText());
}

返回此响应:

https://us4.api.mailchimp.com/2.0/lists/subscribe.json的请求失败,返回代码 500。截断的服务器响应:{"status":"error","code":-100,"name": "ValidationError","error":"You must specify a apikey value"}(使用 muteHttpExceptions 选项检查完整响应)(第 120 行,文件“v2”)

第 120 行UrlFetchApp.fetch是被调用的行。

API 密钥是有效的(我已经用不包括关联数组的更简单的 API 调用进行了测试)。当我将 API 密钥直接附加到基本 URL 并将其从 中删除时options,我收到一条错误消息,指出列表 ID 无效。然后,当我将列表 ID 直接附加到基本 URL 并将其从 中删除时options,我收到一条错误消息,指出电子邮件地址必须采用关联数组形式。

我的问题是:使用上述格式,如何发送包含关联数组的请求?

相关的 API 文档可以在这里找到。

4

3 回答 3

20

经过进一步的研究和修补,我能够解决这个问题:

https://<dc>.api.mailchimp.com/2.0/lists/subscribe.json?apikey=<my_api_key>&id=<my_list_id>&email[email]=test@test.com&merge_vars[FNAME]=John&merge_vars[LNAME]=Doe&double_optin=false&send_welcome=false

<dc>应该用 API Key 中破折号后的部分替换where 。例如“ us1 ”、 “ us2 ” 、“ uk1 ”等。

于 2014-03-18T20:51:57.663 回答
8

在 javascript 中执行此操作会将您的 API 密钥公开给全世界。如果有人拥有您的密钥,他/她可以更改或访问您的帐户。

于 2015-08-05T02:28:03.147 回答
0

我想我在阅读 UrlFetchApp.fetch 文档后弄清楚了发生了什么。 https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app?csw=1#fetch(String)

看起来您应该使用一些额外的参数来执行请求,例如有效负载和方法。您的 options 变量应如下所示。

  var payload =   {
    "apikey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "id": "xxxxxx",
    "email": {
      "email": "me@example.com"
    },
    "send_welcome": false
  };
  payload = Utilities.jsonStringify(payload); // the payload needs to be sent as a string, so we need this
  var options = {
     method: "post",
     contentType: "application/json", // contentType property was mistyped as ContentType - case matters
     payload: payload
  }; 
  var result = UrlFetchApp.fetch("https://<dc>.api.mailchimp.com/2.0/lists/subscribe.json", options);

<dc>应该用 API Key 中破折号后的部分替换where 。例如“ us1 ”、 “ us2 ” 、“ uk1 ”等。

问题是您的 options 变量应该用作 JSON 而不是 GET url 参数。mailchimp 还指定最好使用 POST 而不是 GET。因此,总的来说,您应该确保将您的方法设置为“发布”并确保您的有效负载是有效的 JSON。

于 2014-05-29T18:44:33.690 回答