更新 mailchimp 电子邮件订阅不起作用

Posted

技术标签:

【中文标题】更新 mailchimp 电子邮件订阅不起作用【英文标题】:update mailchimp email subscription is not working 【发布时间】:2019-11-18 20:04:40 【问题描述】:

以下是我在 Mailchimp 中创建或更新订阅的代码。

function mailchimp_ajax_subscription()

    $data = isset( $_POST['formData'] ) ? $_POST['formData'] : array();
    ob_start();
    if(count($data) > 0)
    

        $api_key = 'XXXXXXXXXXXXXX';
        $status = 'unsubscribed'; // subscribed, unsubscribed, cleaned, pending

            $args = array(
                'method' => 'PUT',
                'headers' => array(
                    'Authorization' => 'Basic ' . base64_encode( 'user:'. $api_key )
                ),
                'body' => json_encode(array(
                    'email_address' => $data["email"],
                    'status'        => $status,
                    'tags'  => array($data["name"])
                ))
            );

            $response = wp_remote_post( 'https://' . substr($api_key,strpos($api_key,'-')+1) . '.api.mailchimp.com/3.0/lists/XXXXX/members/' . md5(strtolower($email)), $args );

            $body = json_decode( $response['body'] );

            if ( $response['response']['code'] == 200 && $body->status == $status ) 
                echo 'The user has been successfully ' . $status . '.';
             else 
                echo '<b>' . $response['response']['code'] . $body->title . ':</b> ' . $body->detail;
            

    
    wp_die();  

使用上面的代码,我可以创建 Mailchimp 订阅,但如果我输入相同的电子邮件来编辑标签/状态,它会给我错误。

错误:

400Member 存在:abc@xyz.com 已经是列表成员。使用 PUT 插入或更新列表成员。

我已经在代码中使用了 PUT,所以缺少什么?

【问题讨论】:

【参考方案1】:

您可以使用 TAGS API 来更新 TAGS。以下是更新 TAG 的示例代码:

$postdata = array(
    'apikey' => $api_key,
    'email_address' => $userData["email"],
    'tags' => array(
        array(
            'name' => $userData["name"],
            'status' => 'active'
        ),
    )
);

$mch_api = curl_init(); // initialize cURL connection 
curl_setopt($mch_api, CURLOPT_URL, 'https://' . substr($api_key,strpos($api_key,'-')+1) . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/' . md5(strtolower($userData['email']))."/tags"); 
curl_setopt($mch_api, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Authorization: Basic '.base64_encode( 'user:'.$api_key ))); 
curl_setopt($mch_api, CURLOPT_RETURNTRANSFER, true); // return the API response 
curl_setopt($mch_api, CURLOPT_TIMEOUT, 10); 
curl_setopt($mch_api, CURLOPT_POST, true); 
curl_setopt($mch_api, CURLOPT_POSTFIELDS, json_encode($postdata) ); // send data in json 
$result = curl_exec($mch_api); 

【讨论】:

以上是关于更新 mailchimp 电子邮件订阅不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Mailchimp 时事通讯订阅在 html 中不起作用

如何使用他们的 api 3.0 创建/更新大量电子邮件到 Mailchimp 列表?

在 Wordpress 中将 Mailchimp 表单实现到我的页脚时,100% 宽度不起作用

MailChimp API v3 - 无法修补/更新?

Mailchimp 表单字段内联显示不起作用

在 Laravel 中使用 Mailchimp 自动导出订阅者