Mailchimp 3.0 PHP Добавить подписчика прямо в список без согласия

Мой вопрос касается использования API Mailchimp 3.0 и PHP для добавления подписчика непосредственно в мой список рассылки.

Код, который я использую (см. Ниже), работает должным образом и добавляет подписчика. Однако подписчику отправляется электронное письмо с подтверждением.

скриншот теста

Код отсюда: http://www.johnkieken.com/mailchimp-form-using-api-v3-0-and-jquery-ajax/

Желаемое поведение - добавить подписчика непосредственно в список без подтверждения по электронной почте, а также предоставить сообщение на сайте, на который он был успешно подписан.

На моем сервере работает PHP 5.3.16.

У меня есть HTML-файл, оболочка API Mailchimp (mailchimp.php) и subscribe.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>

subscribe.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';
}

Если я отредактирую subscribe.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 protected] уже является членом списка. Используйте PUT, чтобы вставить или обновить членов списка».

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
2 052
1

Ответы 1

Похоже, что подписчик, которого вы пытаетесь использовать для POST, уже является членом списка (вероятно, в состоянии в ожидании). Возможно, из более раннего POST, где 'status' => 'pending'. В этих случаях вам нужно будет сделать запрос PUT или PATCH, чтобы обновить контакт, который уже находится в 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 для желаемого поведения, которое вы описали выше.

Другие вопросы по теме