Javascript + MailChimp API订阅

时间:2013-10-30 00:27:34

标签: javascript api mailchimp

提出此请求时:

// 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”:“你必须指定apikey值“}(使用muteHttpExceptions选项检查完整响应)(第120行,文件”v2“)

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

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

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

可以找到相关的API文档here

3 个答案:

答案 0 :(得分:18)

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

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密钥中破折号后面的部分。例如&#34; us1 &#34;,&#34; us2 &#34;,&#34; uk1 &#34;等等。

答案 1 :(得分:5)

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

答案 2 :(得分:0)

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

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

  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密钥中破折号后面的部分。例如&#34; us1 &#34;,&#34; us2 &#34;,&#34; uk1 &#34;等等。

问题是您的选项变量被假定为JSON而不是GET url参数。 mailchimp还指出最好使用POST而不是GET。所以你应该确保将方法设置为&#34; post&#34;并确保您的有效负载是有效的JSON。