9

Mailchimp API (v3.0) 进行了重大更新,许多 jQuery 插件已经过时,无法POSTform.submit().

阅读 v3.0 文档后:

管理订阅者建议使用以下 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 AjaxPOST请求代码:

$(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 文档(列表成员集合)的链接。

4

4 回答 4

3

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

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

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

于 2016-11-08T19:04:42.073 回答
2

我这样做的方式是使用您的 AJAX 代码,但去掉所有 MailChimp 内容并将发布数据发送到 PHP 文件。我使用了这段代码:

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

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

于 2016-12-15T20:41:53.320 回答
-1

您收到 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 进行身份验证的更多信息。

于 2015-09-25T15:39:56.470 回答
-2

您需要在参数中添加您的 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

于 2016-01-05T12:42:58.910 回答