Поддержка 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. Усеченный ответ сервера: { "status": "error", "code": - 100, "name": "ValidationError", "error": "Вы должны указать значение apikey" } (используйте параметр muteHttpExceptions для проверки полного ответа) (строка 120, файл "v2" )
Строка 120 - это линия, на которой вызывается UrlFetchApp.fetch
.
Ключ API действителен (я тестировал более простые вызовы API, которые не включают ассоциативные массивы). Когда я добавляю ключ API непосредственно к базовому URL-адресу и удаляю его из options
, я получаю сообщение об ошибке, указывающее, что идентификатор списка недействителен. Когда я затем добавляю идентификатор списка непосредственно к базовому URL-адресу и удаляю его из options
, я получаю сообщение об ошибке, указывающее, что адрес электронной почты должен быть в форме ассоциативного массива.
Мой вопрос: используя вышеприведенный формат, как отправлять запросы, содержащие ассоциативные массивы?
Соответствующую документацию API можно найти здесь.
Ответы
Ответ 1
После дальнейших исследований и мастеринга я смог решить это:
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" и т.д.
Ответ 2
Выполнение этого в javascript предоставляет ключ API для всего мира. Если у кого-то есть ваш ключ, он может внести изменения или получить доступ к вашей учетной записи.
Ответ 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": "[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" и т.д.
Проблема заключается в том, что ваша переменная options предполагается использовать как JSON, а не как параметр URL-адреса GET. Также mailchimp указывает, что лучше использовать POST вместо GET. Таким образом, над всем, вы должны убедиться, что ваш метод "отправил" и убедитесь, что ваша полезная нагрузка действительна JSON.