Mailchimp API 已订阅会员的状态 200

Mailchimp API status 200 for members who are already subscribed

以下代码正在运行并成功订阅了新成员。但是,即使电子邮件地址已经订阅,状态 returns 200 也是如此。我已经检查 $member_id 是否正确散列,尽管值相同它仍然 returns 200.

$result = array(
    'status' => sync_mailchimp($data)
);

var_dump($result) // 200

function sync_mailchimp($data) {

    // Setup our Mailchimp info
    $api_key = 'xxxxx';
    $list_id = 'ab8abde5bb';

    $member_id  = md5(strtolower($data['email'])); // lowercase hash of the email
    $datacenter = 'us16';
    $url = 'https://' . $datacenter . '.api.mailchimp.com/3.0/lists/' . $list_id . '/members/' . $member_id;

    $json = json_encode([
        'email_address' => $data['email'],
        'status'        => $data['status']
    ]);

    // Send via curl
    $ch = curl_init($url);

    curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $api_key);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);                                                                                                                 

    $result = curl_exec($ch);

    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    return $httpcode;
}

我在使用类似代码段时也遇到了同样的问题。

阅读与 managing subscribers 相关的 MailChimp API 3.0 文档(特别是 订阅地址 部分),很明显此方法不是添加新订阅者的正确方法。

请求类型必须是POST

curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');

并且必须发送到端点

https://<data_center>.api.mailchimp.com/3.0/lists/<list_id>/members/

包含 JSON 的请求正文是相同的。

当电子邮件地址成功添加到列表时,响应代码将为 200,当电子邮件地址已存在于列表中时,响应代码将为 400

请注意,此方法不适用于更新现有订阅者 - 为此,请求类型必须为 PATCH,并且您必须使用以散列电子邮件结尾的原始端点地址.