2017-06-19 69 views
1

以下代碼正在工作併成功訂閱新成員。但是,即使電子郵件地址已訂閱,狀態也會返回200。我已經檢查了$ member_id正確散列,儘管相同的值,它仍然會返回200已訂閱成員的Mailchimp 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 3.0與managing subscribers文檔(特別是部分訂閱一個地址),很明顯,該方法是不添加新訂戶的正確方法。

請求類型需要是POST

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

和必須被髮送到端點

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

含有JSON請求正文是相同的。

當電子郵件地址成功添加到列表中時,響應代碼將爲200,當列表中已存在電子郵件地址時,響應代碼將爲400

請注意,此方法不適用於更新現有訂閱者 - 爲此,請求類型必須爲PATCH,並且您必須使用以散列電子郵件地址結尾的原始端點。