簡體   English   中英

Mailchimp 3.0 PHP將訂閱者直接添加到列表中,而無需選擇加入

[英]Mailchimp 3.0 PHP Add Subscriber Directly To List Without An Opt-In

我的問題是有關使用Mailchimp 3.0 API和PHP將訂戶直接添加到我的郵件列表中。

我正在使用的代碼(見下文)按預期運行,並添加了訂閱者。 但是,將向訂閱者發送選擇加入電子郵件。

測試屏幕截圖

代碼來自這里: http : //www.johnkieken.com/mailchimp-form-using-api-v3-0-and-jquery-ajax/

所需的行為是將訂戶直接添加到列表中,而無需選擇加入電子郵件,以及在已成功訂閱的站點上提供消息。

我的服務器正在運行PHP 5.3.16。

我有HTML文件,Mailchimp API包裝器(mailchimp.php)和subscription.php都位於同一目錄中以進行測試。

我不太熟悉編碼,所以希望有人能提供幫助。

的HTML

<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
</head>
<body>
<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: 'subscribe.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>
</body>
</html>

subscription.php

<?php // for MailChimp API v3.0

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

use \DrewM\MailChimp\MailChimp;

function storeAddress() {

    $key        = "mymailchimpAPIkey-us17";
    $list_id    = "mymailchimplistid";

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

如果我將subscription.php編輯為:

// 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
    )
);

我收到以下消息:

“錯誤:email@domain.com已經是列表成員。使用PUT插入或更新列表成員。”

它看起來像您嘗試向用戶POST已經是列表成員(可能處於掛起狀態)。 也許來自更早的POST ,其中'status' => 'pending' 在這些情況下,您將需要發出PUTPATCH請求,以更新MailChimp中已經存在的聯系人。 這是因為POST請求僅用於添加新記錄。 可以在以下位置找到對列表成員端點的PUT請求的文檔:

http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#edit-put_lists_list_id_members_subscriber_hash

看來您正在使用drewm/mailchimp-api 我對這個庫不是很熟悉,但是看起來您可以只調用$mc->patch(...)$mc->put(...)

如果發出PUT請求,則MailChimp將更新該電子郵件地址的記錄(如果該記錄已經存在),並將創建該記錄(如果不存在)。 因此,聽起來您應該僅遵循PUT請求以實現上述所需的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM