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() 代码,带有 jQ​​uery 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 订阅者的主要内容,如果未能解决你的问题,请参考以下文章

Mailchimp API V3 jQuery Ajax POST 订阅者

使用 MailChimp API V3 跟踪打开

如何在 mailchimp api v3 中安排活动?

连接到 MailChimp v3.0 API

MailChimp 发送邮件 v3.0

只需一次调用 MailChimp API v3 即可获取所有 mailchimp 活动的详细信息