Javascript + MailChimp API 订阅
Posted
技术标签:
【中文标题】Javascript + MailChimp API 订阅【英文标题】:Javascript + MailChimp API subscribe 【发布时间】:2013-11-09 09:39:15 【问题描述】:发出此请求时:
// 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 value"(使用 muteHttpExceptions 选项检查完整响应)(第 120 行,文件“v2”)
第 120 行是调用 UrlFetchApp.fetch
的行。
API 密钥是有效的(我已经使用不包含关联数组的更简单的 API 调用进行了测试)。当我将 API 密钥直接附加到基本 URL 并将其从 options
中删除时,我收到一条错误消息,指出列表 ID 无效。然后,当我将列表 ID 直接附加到基本 URL 并将其从 options
中删除时,我收到一条错误消息,指出电子邮件地址必须采用关联数组形式。
我的问题是:使用上述格式,如何发送包含关联数组的请求?
相关API文档可以在here找到。
【问题讨论】:
在客户端代码中公开 API 密钥的坏主意:( @Maxim,此代码用于私有 Google 脚本。那还有风险吗? 我不确定 Google 如何保护它,但我来宾它已经足够好了。这完全取决于您需要多少安全性。在某些情况下,我什至会在我的服务器端代码中加密密码。 这道题的题目更准确的说是Google App Script + MailChimp API。否则,javascript 新手可能最终会在客户端代码中使用答案,从而暴露他们的 MailChimp API。 【参考方案1】:经过进一步研究和修补,我能够解决这个问题:
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”等
【讨论】:
正是我想要的。谢谢你。不知道为什么这不在 Mailchimp 文档中。 根据api docs,url 应该是https://<dc>.api.mailchimp.com/2.0/
,其中<dc>
应该替换为 API 密钥中破折号后面的部分。例如“us1”、“us2”、“uk1”等。如果您不更改 url,它会报告错误的 API 密钥。
我收到 ""error":"必须提供 TEXTAREAY - 请输入一个值""
@benmcdonald,也许可以发布您的请求。
在 Javscript 上使用 API 密钥公开此 URL 是否安全?我不太确定。【参考方案2】:
在 javascript 中执行此操作会将您的 API 密钥公开。如果有人拥有您的密钥,他/她可以更改或访问您的帐户。
【讨论】:
此代码包含在私有 Google 脚本中。 什么是 Google 脚本? 这不是答案,应该是评论。【参考方案3】:阅读 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 密钥中破折号后的部分。例如“us1”、“us2”、“uk1”等
问题是您的选项变量应该用作 JSON 而不是 GET url 参数。 mailchimp 还指定最好使用 POST 而不是 GET。因此,总的来说,您应该确保将您的方法设置为“发布”并确保您的有效负载是有效的 JSON。
【讨论】:
以上是关于Javascript + MailChimp API 订阅的主要内容,如果未能解决你的问题,请参考以下文章
Mailchimp 错误:错误请求 - 您的广告系列尚未准备好发送