【问题标题】:Mailchimp API V3 jQuery Ajax POST subscribersMailchimp API V3 jQuery Ajax POST 订阅者
【发布时间】: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(列表成员集合)的链接。

【问题讨论】:

标签: jquery ajax mailchimp mailchimp-api-v3.0


【解决方案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

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 2014-02-26
      • 2016-03-26
      • 2017-08-07
      • 2015-08-09
      • 2015-08-12
      • 2014-10-19
      相关资源
      最近更新 更多