Mailchimp API V3 jQuery Ajax POST订阅者

Mailchimp API(v3.0)有一个很大的更新,许多jQuery插件已经过时,以便在form.submit()form.submit() POST订阅者。

阅读v3.0文档后:

管理订阅者建议以下JSON对象格式:

 { "email_address": "urist.mcvankab@freddiesjokes.com", "status": "subscribed", "merge_fields": { "FNAME": "Urist", "LNAME": "McVankab" } } 

以下API的根端点列出了资源:

https://.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@mail.com","status":"subscribed","merge_fields":{"FNAME":"Name","LNAME":"Last name"}} 

而且我收到以下错误:

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

可能有什么不对?

这是Mailchimp的API v3.0文档 (列表成员集合)的链接。

不幸的是,无法对前端Mailchimp API发出请求。

注意MailChimp不支持使用CORS请求的客户端API实现,因为暴露帐户API密钥可能存在安全风险。

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

我这样做的方法是使用你的AJAX代码,但删除所有MailChimp的东西,并将发布数据发送到PHP文件。 我用过这段代码:

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

我刚刚删除了除了订阅单个用户所需的部分之外的一切,它就像一个魅力。 对于错误报告,您可以检测PHP端的错误并将HTTP状态发送到AJAX。

你得到的是401,因为你没有传递你的API密钥。

您需要将以下内容添加到ajax调用中:

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

mailchimp_api_key是您帐户的密钥。 有关使用api进行身份validation的更多信息,请查看http://kb.mailchimp.com/api/article/api-3-overview 。

你需要在params中添加你的API密钥,就像这样;

 { "apikey": "your key here", "email_address": "urist.mcvankab@freddiesjokes.com", "status": "subscribed", "merge_fields": { "FNAME": "Urist", "LNAME": "McVankab" } } 

然后你需要将datetype从“jsonp”更改为“json”。 “jsonp”仅限GET,不适用于POST方法。

您需要做的最后一件事是允许跨域脚本编写;

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