Mailchimp API V3 jQuery Ajax POST 订阅者
Posted
技术标签:
【中文标题】Mailchimp API V3 jQuery Ajax POST 订阅者【英文标题】:Mailchimp API V3 jQuery Ajax POST subscribers 【发布时间】:2017-11-26 05:25:28 【问题描述】:Mailchimp API (v3.0) 进行了重大更新,许多 jQuery 插件已过时,无法在form.submit()
上订阅POST
。
阅读 v3.0 文档后:
Managing subscribers 建议使用以下 JSON 对象格式:
"email_address": "urist.mcvankab@freddiesjokes.com",
"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@mail.com","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(列表成员集合)的链接。
【问题讨论】:
最好的是***.com/a/21491824/1821607 【参考方案1】:很遗憾,无法向前端 Mailchimp API 发出请求。
注意 MailChimp 不支持我们 API 的客户端实现 由于暴露的潜在安全风险而使用 CORS 请求 帐户 API 密钥。
https://developer.mailchimp.com/documentation/mailchimp/guides/get-started-with-mailchimp-api-3/#authentication
【讨论】:
很好,愿意主持您修改后的 php 解决方案吗?【参考方案2】:我这样做的方式是使用您的 AJAX 代码,但去掉所有 MailChimp 内容并将发布数据发送到 PHP 文件。我使用了这段代码:
https://github.com/actuallymentor/MailChimp-API-v3.0-PHP-cURL-example/blob/master/mc-API-connector.php
除了订阅单个用户所需的部分之外,我只是删除了所有内容,它就像一个魅力。对于错误报告,您可能可以检测 PHP 端的错误并将 HTTP 状态发送到 AJAX。
【讨论】:
【参考方案3】:您收到 401 是因为您没有传递 API 密钥。
您需要将以下内容添加到您的 ajax 调用中:
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 进行身份验证的更多信息。
【讨论】:
另外:如果这是来自客户端 JS,那么这里也会出现跨站点脚本问题。调用需要通过服务器进行代理,而不是依赖客户端。 @TooMuchPete 所以没有简单的方法可以通过客户端发布到 mailchimp?有很多使用 API v2.0 的 jQuery/Angular 插件可以做到这一点。 @aubreyhodes 感谢您的回复,但现在我收到了 404。我也添加了正确的 API。没有成功。 我见过的客户端 javascript 库通常要么通过服务器代理请求,要么发布到表单提交端点,而不是使用经过身份验证的 API。除了技术限制之外,您不希望向客户发送您的 API 密钥,因为这样可以让您网站的每个访问者都可以完全访问您的帐户。 ^^ 这个。 不要在浏览器上使用您的 API 密钥。您的 API 密钥应保密。【参考方案4】:您需要在参数中添加您的 API 密钥,如下所示;
"apikey": "your key here",
"email_address": "urist.mcvankab@freddiesjokes.com",
"status": "subscribed",
"merge_fields":
"FNAME": "Urist",
"LNAME": "McVankab"
然后您需要将日期类型从“jsonp”更改为“json”。 "jsonp" 仅适用于 GET,不适用于 POST 方法。
您需要做的最后一件事是允许跨域脚本;
http://enable-cors.org/server.html
【讨论】:
以上是关于Mailchimp API V3 jQuery Ajax POST 订阅者的主要内容,如果未能解决你的问题,请参考以下文章