已订阅的成员的Mailchimp API状态200

时间:2017-06-19 12:08:11

标签: mailchimp mailchimp-api-v3.0

以下代码正在运行并成功订阅新成员。但是,即使已经订阅了电子邮件地址,状态也会返回200。我已经检查过$ member_id是否正确散列,尽管值相同但它仍然返回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;
}

1 个答案:

答案 0 :(得分:1)

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

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

请求类型必须是POST

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

并且必须发送到端点

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

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

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

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