使用其API创建基本的MailChimp注册表单


75

我是MailChimp的新手,需要帮助。

使用其基本的新闻快报注册表单...,您只需将一些预包装的HTML嵌入到页面中即可。但是,这样做的问题是,单击“提交”将重定向到MailChimp页面。(我不想重定向到MailChimp,我希望用户点击“提交”后留在自己的网站上。

他们提供了API和大量文档,但有用的示例仅为零。该API应该允许我与我的网站或应用程序进行完全集成。看来,当我在他们的文档中阅读适用于我的内容时,我点击了链接以获取更多信息,最后我转了一圈。他们告诉您如何做,但是他们没有“告诉”您如何做。

我可以获得API密钥,它们具有大量文档,以及大量包装器和插件... PHP,Drupal,Wordpress等...

关于他们的预打包解决方案,这里的困惑是我只有一个常规的静态HTML页面,而不是Wordpress,PHP或Drupal ...所以我只是不知道从哪里开始...我什至都不知道如果我应该使用POSTGET

我不是API的新手...我非常擅长让Google Maps API做我想做的事情。但是,Google除了提供详细的文档(我是如何学习的)之外,还提供了实际的工作示例。我只想在实际操作中看到它,然后才能掌握API的要点。

在其在线文档中没有任何可靠的示例或教程的情况下,我想问一下如何使用其API创建最基本的HTML注册表单。


我不确定仅是简单的HTML页面就需要API。您是否只是尝试嵌入表格?kb.mailchimp.com/article/...
丹·埃斯帕扎

@DanEsparza,当然您需要MailChimp API。否则,您的表单将始终重定向到MailChimp页面,这正是我在此要解决的问题。
Sparky

对不起,我想我被这样的句子所吸引:“问题是我只有用HTML创建的常规页面,而不是wordpress,php和drupal ...我只是不知道从哪里开始”
Dan Esparza

@DanEsparza,不用担心。 “不知道从哪里开始”指的是定义问题的第二段,“问题是它(他们的基本通讯注册表单)不是很聪明。点击提交会打开一个带有Mailchimp网址的窗口,等等。”
Sparky

@DanEsparza,我看到我如何两次使用“问题是”,这可能会引起误解。我将进行澄清。
Sparky

Answers:


73

编辑:

自发布此答案以来,MailChimp已发布了其API的版本2和3。版本3将是从2017年开始唯一受支持的版本。一旦有机会对其进行测试,我将针对API版本3更新此答案。


MailChimp API v3.0

根据此页面顶部的通知, 2016年之后将不再支持该API的所有早期版本。

我的解决方案在后台使用PHP处理API,并在jQuery中使用Ajax。

1)下载支持API v3.0的PHP包装器。在撰写本文时,最新的支持v3.0的MailChimp文档中没有列出任何官方文档,但是GitHub上列出了一些文档,因此我选择了文档。

2)store-address.php使用您自己的API密钥和列表ID创建以下PHP文件,然后将其放置在与第一步中的包装器相同的目录中。记住要遵循包装程序的文档,但是它们看上去都与此相似。

<?php // for MailChimp API v3.0

include('MailChimp.php');  // path to API wrapper downloaded from GitHub

use \DrewM\MailChimp\MailChimp;

function storeAddress() {

    $key        = "xxxxxxxxxxxxxxx-us1";
    $list_id    = "xxxxxx";

    $merge_vars = array(
        'FNAME'     => $_POST['fname'],
        'LNAME'     => $_POST['lname']
    );

    $mc = new MailChimp($key);

    // add the email to your list
    $result = $mc->post('/lists/'.$list_id.'/members', array(
            'email_address' => $_POST['email'],
            'merge_fields'  => $merge_vars,
            'status'        => 'pending'     // double opt-in
            // 'status'     => 'subscribed'  // single opt-in
        )
    );

    return json_encode($result);

}

// If being called via ajax, run the function, else fail

if ($_POST['ajax']) { 
    echo storeAddress(); // send the response back through Ajax
} else {
    echo 'Method not allowed - please ensure JavaScript is enabled in this browser';
}

3)创建HTML / CSS / JavaScript(jQuery)表单(不需要在PHP页面上,并且访问者永远不会看到PHP在后台使用。

响应使用JSON,因此您必须正确处理它。

这是我的index.html文件的样子:

<form id="signup" action="index.html" method="get">
    First Name: <input type="text" name="fname" id="fname" />
    Last Name: <input type="text" name="lname" id="lname" />
    email Address (required): <input type="email" name="email" id="email" />
    <input type="submit" id="SendButton" name="submit" value="Submit" />
</form>
<div id="message"></div>

<script src="jquery.min.js"></script>
<script>
$(document).ready(function() {
    $('#signup').submit(function() {
        $("#message").html("Adding your email address...");
        $.ajax({
            url: 'inc/store-address.php', // proper url to your "store-address.php" file
            type: 'POST', // <- IMPORTANT
            data: $('#signup').serialize() + '&ajax=true',
            success: function(msg) {
                var message = $.parseJSON(msg),
                    result = '';
                if (message.status === 'pending') { // success
                    result = 'Success!  Please click the confirmation link that will be emailed to you shortly.';
                } else { // error
                    result = 'Error: ' + message.detail;
                }
                $('#message').html(result); // display the message
            }
        });
        return false;
    });
});
</script>

MailChimp API版本1:

原始答案

经过一段时间的摸索,我发现了一个使用带有jQuery的PHP示例的站点。由此,我能够使用包含基本注册表单的jQuery创建一个简单的HTML页面。PHP文件在后台被“隐藏”,用户永远不会看到它们,但jQuery仍然可以访问和使用。

1)在此处下载PHP 5 jQuery示例...(编辑:链接已失效。但是,唯一重要的部分是PHP的官方API包装器,可在此处使用。)

http://apidocs.mailchimp.com/downloads/mcapi-simple-subscribe-jquery.zip

如果只有PHP 4,只需下载MCAPI的1.2版并替换MCAPI.class.php上面的相应文件。

http://apidocs.mailchimp.com/downloads/mailchimp-api-class-1-2.zip

2)按照自述文件中的说明store-address.php,在适当的位置将API密钥和列表ID添加到文件中。

3)您可能还希望收集您的用户名和/或其他信息。您必须store-address.php使用相应的合并变量将数组添加到文件中。

这是我的store-address.php文件的样子,其中还收集了名字,姓氏和电子邮件类型:

<?php

function storeAddress() {

    require_once('MCAPI.class.php');  // same directory as store-address.php

    // grab an API Key from http://admin.mailchimp.com/account/api/
    $api = new MCAPI('123456789-us2');

    $merge_vars = Array( 
        'EMAIL' => $_GET['email'],
        'FNAME' => $_GET['fname'], 
        'LNAME' => $_GET['lname']
    );

    // grab your List's Unique Id by going to http://admin.mailchimp.com/lists/
    // Click the "settings" link for the list - the Unique Id is at the bottom of that page. 
    $list_id = "123456a";

    if ($api->listSubscribe($list_id, $_GET['email'], $merge_vars , $_GET['emailtype'])) {
        // It worked!   
        return 'Success!&nbsp; Check your inbox or spam folder for a message containing a confirmation link.';
    } else {
        // An error ocurred, return error message   
        return '<b>Error:</b>&nbsp; ' . $api->errorMessage;
    }

}

// If being called via ajax, autorun the function
if($_GET['ajax']) { 
    echo storeAddress(); 
}

4)创建HTML / CSS / jQuery表单。它不需要在PHP页面上。

这是我的index.html文件的样子:

<form id="signup" action="index.html" method="get">
    First Name: <input type="text" name="fname" id="fname" />
    Last Name: <input type="text" name="lname" id="lname" />
    email Address (required): <input type="email" name="email" id="email" />
    HTML: <input type="radio" name="emailtype" value="html" checked="checked" />
    Text: <input type="radio" name="emailtype" value="text" />
    <input type="submit" id="SendButton" name="submit" value="Submit" />
</form>
<div id="message"></div>

<script src="jquery.min.js"></script>
<script>
$(document).ready(function() {
    $('#signup').submit(function() {
        $("#message").html("Adding your email address...");
        $.ajax({
            url: 'inc/store-address.php', // proper url to your "store-address.php" file
            data: $('#signup').serialize() + '&ajax=true',
            success: function(msg) {
                $('#message').html(msg);
            }
        });
        return false;
    });
});
</script>

必需品...

  • 如上所述或类似构造的index.html。使用jQuery,外观和选项无穷无尽。

  • 在Mailchimp网站上作为PHP示例的一部分下载了store-address.php文件,并使用您的API KEYLIST ID进行了修改。您需要将其他可选字段添加到数组。

  • 从Mailchimp网站下载的MCAPI.class.php文件(PHP 5版本1.3或PHP 4版本1.2)。将其放置在与store-address.php相同的目录中,或者必须更新store-address.php中的url路径才能找到它。


注意-如果收到500服务器错误,则可能未安装php curl。apt-get install php-curl应该修复它(在Ubuntu 16.04上)
Nitay

20

这是将Mailchimp API 2.0版mailchimp-api(用于处理Mailchimp API的最小php抽象类)一起使用的示例。

<?php

include('MailChimp.php');

$MailChimp = new MailChimp('API_KEY');
$result = $MailChimp->call('lists/subscribe', array(
    'id'                => 'LIST_ID',
    'email'             => array( 'email' => $_POST['email'] ),
    'merge_vars'        => array(
        'MERGE2' => $_POST['name'] // MERGE name from list settings
        // there MERGE fields must be set if required in list settings
    ),
    'double_optin'      => false,
    'update_existing'   => true,
    'replace_interests' => false
));

if( $result === false ) {
    // response wasn't even json
}
else if( isset($result->status) && $result->status == 'error' ) {
    // Error info: $result->status, $result->code, $result->name, $result->error
}

?>

MailChimp API文档中了解有关通过API调用可以发送的内容的更多信息。


谢谢乔纳斯。我已经使用您提供的链接下载了mailchimp api软件包。但是,我只能找到一个名为MailChimp.php的文件,而不是像代码第二行那样的MailChimp.class.php文件。我是否需要重命名文件以在php扩展名之前添加wry“类”?谢谢
格雷格2014年

嗨,格雷格,不需要.class.php扩展名。我想程序包所有者只是将文件重命名了。当我写下答案时,它被命名为MailChimp.class.php。我将使用当前文件名更新答案。
乔纳斯·阿佩格兰(JonasÄppelgran),2014年

最新的MailChimp使用命名空间... new / Drewm / MailChimp('API_KEY');
亚当·米尔斯

8

这是另一个使用Official PHP Wrapper使用Mailchimp API 2.0版的示例。

我的榜样,别人张贴在这里的区别是,我使用的订阅的方法Mailchimp_Lists类,通过Mailchimp类(的实例访问->lists),而不是一般的呼叫方法。

$api_key = "MAILCHIMP_API_KEY";
$list_id = "MAILCHIMP_LIST_ID";

require('Mailchimp.php');
$Mailchimp = new Mailchimp($api_key);
$subscriber = $Mailchimp->lists->subscribe($list_id, array('email' => $_POST['email']));

if ( ! empty($subscriber['leid'])) {
    // Success
}

如果您仅使用列表,是否需要所有位于顶部的文件Mailchimp.php
chris_s 2014年

而且,如果您使用MERGE变量,只需添加它们即可:$ merge_vars = array(“ FNAME” =>“ name”,“ CUSTOMMRG” =>“ test123”); $ Mailchimp_Lists-> subscribe($ list_id,array('email'=> $ _POST ['email']),$ merge_vars);
Mladen Janjetovic 2014年

嗨,由于某种原因,我收到此错误消息。你知道为什么吗?致命错误:在第6行/homez.527/dqsdsq/www/desdsqd.com/newsletter/subscribe.php中找不到类'Mailchimp'– 2014年
格雷格

@Greg也许您没有包含('Mailchimp.php')或require(Mailchimp.php)文件。
aesede 2014年

@chris_s您可能希望删除/注释掉其中的一些,老实说,我似乎并没有。但是您将需要主Mailchimp.php,因为在实例化Mailchimp_Lists时必须传递自身的实例化。
davidnknight 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.