2017-06-19 5 views
1

次のコードは動作しており、新規メンバーを正常に購読しています。ただし、電子メールアドレスがすでに購読されている場合でも、ステータスは200に戻ります。私は、$ MEMBER_IDが正しくハッシングされていることを確認している、と同じ値にもかかわらず、それはまだ同様のスニペットを使用しながら、私も同じ問題を抱えていた200Mailchimp APIステータス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

を返します。 MailChimpのAPIにmanaging subscribersに関連する3.0ドキュメントを読む

(特にセクションは、住所を購読)、この方法は、新規加入者を追加するための正しい方法ではないことは明らかでした。

要求タイプは、POST

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

とJSONを含む要求体は同一であるエンドポイント

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

に送信されなければならないことが必要です。

電子メールアドレスがリストに正常に追加されると、応答コードは200になり、電子メールアドレスがすでにリストに存在する場合は400になります。

このメソッドは、既存のサブスクライバを更新するためには機能しません。要求タイプはPATCHである必要があります。ハッシュされた電子メールアドレスで終わる元のエンドポイントを使用する必要があります。

関連する問題