提出此请求时:
// 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。
答案 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。