2013-10-30 93 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

相關問題