繁体   English   中英

Javascript + MailChimp API订阅

[英]Javascript + MailChimp API subscribe

提出此请求时:

// 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文档可以在这里找到。

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

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密钥中破折号后面的部分。 例如, “US1”, “US2”, “UK1”,等等。

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

我想在阅读了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密钥中破折号后面的部分。 例如, “US1”, “US2”, “UK1”,等等。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM