Tạo biểu mẫu đăng ký MailChimp cơ bản bằng API của họ


75

Tôi mới sử dụng MailChimp và cần một số trợ giúp.

Với biểu mẫu đăng ký bản tin cơ bản của họ ... bạn chỉ cần nhúng một số HTML đóng gói sẵn vào trang của mình. Tuy nhiên, vấn đề với điều này là việc nhấp vào gửi chuyển hướng đến trang MailChimp. ( Tôi không muốn chuyển hướng đến MailChimp, tôi muốn người dùng ở lại trang web của riêng mình sau khi nhấn gửi. )

Họ cung cấp một API và nhiều tài liệu nhưng không có ví dụ hữu ích nào. API được cho là cho phép tôi tích hợp đầy đủ với trang web hoặc ứng dụng của mình. Có vẻ như khi tôi đọc điều gì đó trong tài liệu của họ áp dụng cho tôi, tôi nhấp vào liên kết để có thêm thông tin và cuối cùng tôi đã đi vòng quanh. Họ cho bạn biết cách thực hiện nhưng họ không "chỉ" cho bạn cách thực hiện.

Tôi có thể nhận được Khóa API, chúng có rất nhiều tài liệu và một loạt các trình bao bọc & bổ sung ... PHP, Drupal, Wordpress, v.v.

Sự nhầm lẫn ở đây liên quan đến các giải pháp đóng gói sẵn của họ là tôi chỉ có một trang HTML tĩnh thông thường, nó không phải Wordpress, PHP hoặc Drupal ... vì vậy tôi không biết bắt đầu từ đâu ... Tôi thậm chí không biết nếu tôi phải sử dụng POSThoặc GET.

Tôi không phải là người mới làm quen với API ... Tôi làm rất tốt với việc sử dụng API Google Maps để làm bất cứ điều gì tôi muốn. Tuy nhiên, Google cung cấp các ví dụ làm việc trong thế giới thực ngoài tài liệu chi tiết của họ, đó là cách tôi học được. Tôi chỉ muốn xem nó hoạt động trước khi tôi có thể nắm được những điểm tốt hơn của API.

Không có bất kỳ ví dụ hoặc hướng dẫn vững chắc nào trong tài liệu trực tuyến của họ, tôi đang hỏi cách tạo biểu mẫu đăng ký HTML cơ bản nhất bằng cách sử dụng API của họ.


Tôi không chắc rằng API là thứ bạn cần cho một trang HTML đơn giản. Bạn đã thử chỉ nhúng biểu mẫu của mình chưa? kb.mailchimp.com/article/…
Dan Esparza

@DanEsparza, tất nhiên bạn cần API MailChimp. Nếu không, biểu mẫu của bạn sẽ luôn chuyển hướng đến trang MailChimp, đây chính là vấn đề tôi đang giải quyết ở đây.
Sparky vào

Xin lỗi, tôi đoán tôi đã bị ném bởi câu, "Vấn đề là tôi chỉ có một trang thông thường tôi tạo bằng HTML, không phải wordpress, không php, không phải drupal ... Tôi chỉ không biết bắt đầu từ đâu"
Dan Esparza,

@DanEsparza, đừng lo lắng. "không biết bắt đầu từ đâu" liên quan đến đoạn thứ hai xác định vấn đề, "vấn đề là nó (biểu mẫu đăng ký bản tin cơ bản của họ) không thông minh lắm. Nhấp vào gửi sẽ mở ra một cửa sổ có url Mailchimp, Vân vân."
Sparky

@DanEsparza, tôi thấy cách tôi sử dụng "vấn đề là" hai lần có thể gây hiểu lầm. Tôi sẽ chỉnh sửa để làm rõ.
Sparky

Câu trả lời:


73

ĐÃ CHỈNH SỬA:

Kể từ khi đăng câu trả lời này, MailChimp đã phát hành phiên bản 2 & 3 của API của họ. Phiên bản 3 sẽ là phiên bản được hỗ trợ duy nhất bắt đầu từ năm 2017. Ngay sau khi tôi có cơ hội kiểm tra nó, tôi sẽ cập nhật câu trả lời này cho phiên bản API 3.


API MailChimp v3.0

Theo thông báo ở đầu trang này , tất cả các phiên bản trước của API sẽ không được hỗ trợ sau năm 2016.

Giải pháp của tôi sử dụng PHP nền để xử lý API và jQuery để tạo điều kiện cho Ajax.

1) Tải xuống trình bao bọc PHP hỗ trợ API v3.0. Khi viết bài này, không có tài liệu chính thức nào được liệt kê trong tài liệu MailChimp mới nhất hỗ trợ v3.0, nhưng một số tài liệu được liệt kê trên GitHub, vì vậy tôi đã chọn tài liệu này .

2) Tạo tệp PHP sau store-address.php, sử dụng khóa API và ID danh sách của riêng bạn, sau đó đặt nó vào cùng thư mục với trình bao bọc từ bước một. Hãy nhớ làm theo tài liệu cho trình bao bọc của bạn, nhưng tất cả chúng đều có vẻ khá giống với tài liệu này.

<?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) Tạo biểu mẫu HTML / CSS / JavaScript (jQuery) của bạn ( Nó không bắt buộc phải ở trên trang PHP và khách truy cập sẽ không bao giờ thấy PHP đang được sử dụng trong nền. )

Phản hồi ở dạng JSON nên bạn sẽ phải xử lý chính xác.

Đây là index.htmltệp của tôi trông như thế nào:

<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>

API MailChimp phiên bản 1:

( câu trả lời ban đầu )

Sau khi tìm hiểu một lúc, tôi tìm thấy một trang web sử dụng ví dụ PHP với jQuery. Từ đó, tôi đã có thể tạo một trang HTML đơn giản với jQuery có chứa biểu mẫu đăng ký cơ bản. Các tệp PHP được "ẩn" trong nền mà người dùng không bao giờ nhìn thấy chúng nhưng jQuery vẫn có thể truy cập và sử dụng.

1) Tải xuống ví dụ jQuery PHP 5 tại đây ... ( CHỈNH SỬA : các liên kết đã chết. Tuy nhiên, phần quan trọng duy nhất là trình bao bọc API chính thức cho PHP có sẵn TẠI ĐÂY .)

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

Nếu bạn chỉ có PHP 4, chỉ cần tải xuống phiên bản 1.2 của MCAPI và thay thế MCAPI.class.phptệp tương ứng ở trên.

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

2) Thực hiện theo các hướng dẫn trong tệp Readme bằng cách thêm khóa API và ID danh sách của bạn vào store-address.phptệp tại các vị trí thích hợp.

3) Bạn cũng có thể muốn thu thập tên người dùng và / hoặc thông tin khác. Bạn phải thêm một mảng vào store-address.phptệp bằng các Biến Hợp nhất tương ứng.

Đây là store-address.phptệp của tôi trông giống như thế nào, nơi tôi cũng thu thập tên, họ và loại email:

<?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) Tạo biểu mẫu HTML / CSS / jQuery của bạn. Nó không bắt buộc phải ở trên một trang PHP.

Đây là index.htmltệp của tôi trông như thế nào:

<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>

Các mảnh bắt buộc ...

  • index.html được xây dựng như trên hoặc tương tự. Với jQuery, sự xuất hiện và các tùy chọn là vô tận.

  • Tệp store-address.php được tải xuống như một phần của các ví dụ PHP trên trang Mailchimp và được sửa đổi với API KEYID LIST của bạn . Bạn cần thêm các trường tùy chọn khác của mình vào mảng.

  • Tệp MCAPI.class.php tải xuống từ trang Mailchimp (phiên bản 1.3 cho PHP 5 hoặc phiên bản 1.2 cho PHP 4). Đặt nó trong cùng thư mục với store-address.php của bạn hoặc bạn phải cập nhật đường dẫn url trong store-address.php để nó có thể tìm thấy nó.


Lưu ý - Nếu bạn gặp lỗi máy chủ 500, có thể bạn chưa cài đặt php curl. apt-get install php-curlnên sửa nó (Trên Ubuntu 16.04)
Nitay 28/10/16

20

Đây là một ví dụ sử dụng phiên bản 2.0 của API Mailchimp cùng với mailchimp-api (một lớp trừu tượng php tối thiểu để xử lý API Mailchimp).

<?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
}

?>

Đọc thêm về những gì bạn có thể gửi với lệnh gọi API tại Tài liệu API MailChimp .


Cảm ơn Jonas. Tôi đã tải xuống gói api mailchimp bằng liên kết mà bạn đã cung cấp. Tuy nhiên, tôi chỉ có thể tìm thấy một tệp có tên là MailChimp.php chứ không phải MailChimp.class.php như trên dòng thứ 2 của mã của bạn. Tôi có cần đổi tên tệp để thêm "lớp" wry trước phần mở rộng php không? Cảm ơn
Greg

Xin chào Greg, không cần phần mở rộng .class.php. Tôi đoán chủ sở hữu gói chỉ đơn giản là đã đổi tên tệp. Nó được đặt tên là MailChimp.class.php khi tôi viết câu trả lời. Tôi sẽ cập nhật câu trả lời với tên tệp hiện tại.
Jonas Äppelgran

MailChimp mới nhất sử dụng Không gian tên ... new / Drewm / MailChimp ('API_KEY');
Adam Mills

8

Đây là một ví dụ khác về việc sử dụng phiên bản 2.0 của API Mailchimp bằng Trình gói PHP chính thức .

Sự khác biệt giữa ví dụ của tôi và những người khác được đăng ở đây là tôi đang sử dụng phương thức đăng ký của lớp Mailchimp_Lists , có thể truy cập thông qua việc tạo lớp Mailchimp ( ->lists), thay vì phương thức gọi chung .

$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
}

Nếu bạn chỉ sử dụng Danh sách, bạn có yêu cầu tất cả các tệp ở trên cùng Mailchimp.phpkhông?
chris_s

Và nếu bạn sử dụng MERGE vars, chỉ cần thêm chúng như: $ merge_vars = array ("FNAME" => "name", "CUSTOMMRG" => "test123"); $ Mailchimp_Lists-> subscribe ($ list_id, array ('email' => $ _POST ['email']), $ merge_vars);
Mladen Janjetovic

Xin chào, vì lý do nào đó, tôi nhận được thông báo lỗi này. Bạn có biết tại sao không? Lỗi nghiêm trọng: Không tìm thấy lớp 'Mailchimp' trong /homez.527/dqsdsq/www/desdsqd.com/newsletter/subscribe.php trên dòng 6
Greg

@Greg có thể bạn đã không bao gồm ('Mailchimp.php') hoặc tệp yêu cầu (Mailchimp.php).
aesede

@chris_s Bạn có thể xem xét để xóa / nhận xét một số người trong số họ, tôi không thành thật mà nói. Nhưng bạn sẽ cần Mailchimp.php chính vì một phần tạo của chính nó phải được chuyển qua khi tạo Mailchimp_Lists.
davidnknight
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.