2015-09-25 3 views
7

Было большое обновление в Mailchimp API (v3.0), и многие из плагинов jQuery устарели, чтобы POST подписчиков на form.submit().Mailchimp API V3 jQuery Ajax POST-подписчики

После прочтения v3.0 документов:

Managing subscribers предлагает следующий формат JSON объекта:

{ 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Urist", 
     "LNAME": "McVankab" 
    } 
} 

И следующую корневую конечную точку для ресурса списков API:

https://<dc>.api.mailchimp.com/3.0/

Итак, вот мой код form.submit() с запросом jQuery Ajax POST:

$(document).ready(function(){ 
    var mcForm = $('#mailchimpForm'); 
    var mailchimp = {}; 
    mailchimp.dc='us5'; 
    mailchimp.id='xxxxxxxx'; 
    var url = '//' + mailchimp.dc + '.api.mailchimp.com/3.0/lists/' + mailchimp.id + '/members/'; 

    function beginMailchimpPost(data){ 
     var params = JSON.stringify(data); 
     $.ajax({ 
      url: url, 
      method: 'POST', 
      data: params, 
      dataType: 'jsonp', 
      contentType: 'application/json; charset=utf-8', 
      error: function(res, text){ 
       console.log('Err', res); 
      }, 
      success: function(res){ 
       console.log('Success', res); 
      } 
     }); 
    } 
}); 

Это JSON.stringify(data) объект:

{"email_address":"[email protected]","status":"subscribed","merge_fields":{"FNAME":"Name","LNAME":"Last name"}} 

И я получаю следующее сообщение об ошибке:

GET http://... 401 (Unauthorized) 
Err Object {readyState: 4, status: 404, statusText: "error"} 

Что может быть не так?

Вот ссылка на Mailchimp's API v3.0 docs (список членов коллекции).

+0

Лучше всего http://stackoverflow.com/a/21491824/1821607 –

ответ

1

Вы получаете 401, потому что не используете свой ключ API.

Вам нужно добавить следующее вы АЯКС вызов:

beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", 
    "Basic " + btoa("api:" + mailchimp_api_key)); }; 

Где mailchimp_api_key ключ для вашей учетной записи. Взгляните на http://kb.mailchimp.com/api/article/api-3-overview для получения дополнительной информации об аутентификации с помощью api.

+3

Но также: если это клиентский JS, здесь также будет проблема межсайтового скриптинга. Вызовы необходимо проксировать через сервер, а не полагаться на клиента. – TooMuchPete

+0

@TooMuchPete, так что нет простого способа отправить почтовый клиент через клиента? Существует много jQuery/Angular plugins, использующих API v2.0, которые это делают. – Gus

+0

@aubreyhodes спасибо за ваш ответ, но теперь я получаю 404. Я добавил API-интерфейс. Нет успеха. – Gus

-1

Вам необходимо добавить свой ключ API в параметры, например:

{ 
    "apikey": "your key here", 
    "email_address": "[email protected]", 
    "status": "subscribed", 
    "merge_fields": { 
     "FNAME": "Urist", 
     "LNAME": "McVankab" 
    } 
} 

Затем вам необходимо изменить тип данных с "jsonp" на "json". «jsonp» - только GET и не будет работать с методом POST.

И последнее, что вам нужно сделать, это разрешить междоменные скрипты;

http://enable-cors.org/server.html

2

К сожалению, это не возможно сделать запросы на передний конец Mailchimp API.

Note MailChimp does not support client-side implementation of our API using CORS requests due to the potential security risk of exposing account API keys.

https://developer.mailchimp.com/documentation/mailchimp/guides/get-started-with-mailchimp-api-3/#authentication

+0

приятно, ухаживать за вашим измененным решением php? – Himmators

2

То, как я сделал это, чтобы использовать код AJAX, но вырезать весь материал MailChimp и отправить почтовые данные в PHP-файл. Я использовал этот код:

https://github.com/actuallymentor/MailChimp-API-v3.0-PHP-cURL-example/blob/master/mc-API-connector.php

Я просто раздел все, но часть мне нужно для подписки одного пользователя и он работал как шарм.Для сообщения об ошибках вы можете обнаружить ошибки на стороне PHP и отправить статус HTTP в AJAX.

Смежные вопросы