2013-10-30 72 views
10

提出这个要求时:的JavaScript + MailChimp API订阅

// Subscribe a new account holder to a MailChimp list 
function subscribeSomeoneToMailChimpList() 
{ 
    var options = 
    { 
    "apikey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
    "id": "xxxxxx", 
    "email": 
    { 
     "email": "[email protected]" 
    }, 
    "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截断服务器响应:{ “地位”:“错误(使用muteHttpExceptions选项来检查完整响应)(第120行,文件“v2”)

(“100”,“name”:“ValidationError”,“error”:“您必须指定apikey值”

线120是调用UrlFetchApp.fetch的线。

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

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

相关的API文档可以找到here

+3

在您的客户端代码中暴露您的API密钥的不好主意:( – Maxim

+0

@Maxim,这个代码在私有Google脚本中使用。这仍然有风险吗? – barryedmund

+0

我不确定Google如何保护它,但我是客人这一切都取决于你需要多少安全性,在某些情况下,我甚至会在服务器端代码中加密密码。 – Maxim

回答

18

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

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

<dc>应该与你的API密钥破折号后的部分进行更换。例如“US1”, “US2”, “UK1” 等

+0

正是我在找的东西。谢谢。不知道为什么这不在Mailchimp文档中。 –

+1

根据[api docs](https://apidocs.mailchimp.com/api/2.0/),网址应该是'https:// .api.mailchimp.com/2.0 /',其中''应该被替换与您的API密钥中破折号之后的部分一起使用。例如“us1”,“us2”,“uk1”等。如果您不更改网址,则报告错误的API密钥。 – mmrmartin

+0

我得到“”错误“:”必须提供TEXTAREAY - 请输入一个值“” – benmcdonald

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": "[email protected]" 
    }, 
    "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。

5

在javascript中这样做会将您的API密钥暴露给全世界。如果有人拥有您的钥匙,他/她可以更改或访问您的帐户。

+1

此代码包含在私人Google脚本中。 – barryedmund

+3

什么是Google脚本? – zeckdude

相关问题