2015-09-25 17 views
7

Đã có bản cập nhật lớn trên API Mailchimp (v3.0) và nhiều plugin jQuery đã lỗi thời để POST người đăng ký trên form.submit().Mailchimp API V3 Người đăng ký jQuery Ajax POST

Sau khi đọc tài liệu v3.0:

Managing subscribers cho thấy định dạng sau JSON đối tượng:

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

Và điểm cuối gốc sau cho tài nguyên danh sách API:

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

Đây là mã số form.submit() của tôi với yêu cầu 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); 
      } 
     }); 
    } 
}); 

Đây là đối tượng JSON.stringify(data):

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

Và tôi nhận được lỗi sau:

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

Điều gì có thể xảy ra?

Đây là liên kết tới Mailchimp's API v3.0 docs (liệt kê bộ sưu tập thành viên).

+0

Cách tốt nhất là http://stackoverflow.com/a/21491824/1821607 –

Trả lời

1

Bạn nhận được 401 vì bạn không chuyển mã API của mình.

Bạn sẽ cần phải thêm dòng sau vào bạn gọi ajax:

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

đâu mailchimp_api_key là chìa khóa cho tài khoản của bạn. Hãy xem http://kb.mailchimp.com/api/article/api-3-overview để biết thêm thông tin về auth với api.

+3

Nhưng cũng có thể: nếu điều này là từ JS của khách hàng, thì cũng sẽ có một vấn đề về tập lệnh chéo trang ở đây. Các cuộc gọi cần được ủy quyền thông qua một máy chủ thay vì dựa vào máy khách. – TooMuchPete

+0

@TooMuchPete vì vậy không có cách nào dễ dàng để đăng lên mailchimp thông qua ứng dụng khách? Có rất nhiều plugin jQuery/Angular sử dụng API v2.0 để thực hiện điều này. – Gus

+0

@aubreyhodes cảm ơn câu trả lời của bạn nhưng bây giờ tôi nhận được 404. Tôi cũng đã thêm API phù hợp. Không thành công. – Gus

-1

Bạn cần thêm khóa API trong thông số, như sau;

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

Sau đó, bạn cần thay đổi loại dữ liệu từ "jsonp" thành "json". "jsonp" chỉ GET và sẽ không hoạt động với phương thức POST.

Và điều cuối cùng bạn cần làm là cho phép tập lệnh tên miền chéo;

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

2

Con đường tôi đã làm điều đó là sử dụng mã AJAX của bạn nhưng loại bỏ tất cả những thứ MailChimp và gửi dữ liệu gửi lên một file PHP. Tôi đã sử dụng mã này:

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

Tôi chỉ tước ra tất cả mọi thứ nhưng phần tôi cần thiết cho việc đăng ký một người dùng duy nhất và nó làm việc như một nét duyên dáng.Để báo cáo lỗi, bạn có thể phát hiện lỗi ở phía PHP và gửi trạng thái HTTP tới AJAX.

Các vấn đề liên quan