2017-09-03 53 views
3

我正在嘗試添加一個將新訂閱者添加到我的MailChimp列表的php文件。這裏是我的形式應觸發php文件來添加新用戶:MailChimp使用API​​ 3.0添加訂閱者PHP

<form action="/scripts/freemonth_action.php" class="email_form_freemonth" method="post"> 
    <h3>Get your first month free</h3> 
    <div class="form-group customised-formgroup"> <span class="icon-user"></span> 
     <input type="text" name="full_name" class="form-control" placeholder="Name"> 
    </div> 
    <div class="form-group customised-formgroup"> <span class="icon-envelope"></span> 
     <input type="email" name="email" class="form-control" placeholder="Email"> 
    </div> 
    <!--<div class="form-group customised-formgroup"> <span class="icon-telephone"></span> 
     <input type="text" name="phone" class="form-control" placeholder="Phone (optional)"> 
    </div>--> 
    <div class="form-group customised-formgroup"> <span class="icon-laptop"></span> 
     <input type="text" name="website" class="form-control" placeholder="Website (optional)"> 
    </div> 
    <!--<div class="form-group customised-formgroup"> <span class="icon-bubble"></span> 
     <textarea name="message" class="form-control" placeholder="Message"></textarea> 
    </div>--> 
    <div> 
     <br> 
     <button style="margin: 0 auto" type="submit" class="btn btn-fill full-width">GET FREE MONTH<span class="icon-chevron-right"></span></button> 
    </div> 
</form> 

這裏是freemonth_action.php:

<?php 
session_start(); 
if(isset($_POST['submit'])){ 
    $name = trim($_POST['full_name']); 
    $email = trim($_POST['email']); 
    if(!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL) === false){ 
     // MailChimp API credentials 
     $apiKey = '6b610769fd3353643c7427db98d43ad6-us16'; 
     $listID = '0cf013d1d9'; 

     // MailChimp API URL 
     $memberID = md5(strtolower($email)); 
     $dataCenter = substr($apiKey,strpos($apiKey,'-')+1); 
     $url = 'https://' . $dataCenter . '.api.mailchimp.com/3.0/lists/' . $listID . '/members/' . $memberID; 

     // member information 
     $json = json_encode([ 
      'email_address' => $email, 
      'status'  => 'subscribed', 
      'merge_fields' => [ 
       'NAME'  => $name, 
      ] 
     ]); 

     // send a HTTP POST request with curl 
     $ch = curl_init($url); 
     curl_setopt($ch, CURLOPT_USERPWD, 'user:' . $apiKey); 
     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); 
     echo json_encode($result); 

     // store the status message based on response code 
     if ($httpCode == 200) { 
      $_SESSION['msg'] = '<p style="color: #34A853">You have successfully subscribed to CodexWorld.</p>'; 
     } else { 
      switch ($httpCode) { 
       case 214: 
        $msg = 'You are already subscribed.'; 
        break; 
       default: 
        $msg = 'Some problem occurred, please try again.'; 
        break; 
      } 
      $_SESSION['msg'] = '<p style="color: #EA4335">'.$msg.'</p>'; 
     } 
    }else{ 
     $_SESSION['msg'] = '<p style="color: #EA4335">Please enter valid email address.</p>'; 
    } 
} 

我什至不知道如何調試這一點,因爲當我做echo $結果(或類似的東西)我沒有看到頁面上的任何內容或登錄到控制檯。我也打開任何使用JavaScript的建議,只要它仍然是3.0 API。

+0

我不確定MailChimp API規則,但通常你會'json_decode()'結果而不是'json_encode()'在最後。 – Wishan

+0

哦,好的,謝謝。並打印到文檔或登錄到控制檯? – Tom

+0

會將發送回JSON的數據MailChimp轉換爲數組。然後,您可以操作該陣列以打印到控制檯或其他任何東西。 – Wishan

回答

1

您的訂閱代碼正常工作。您沒有看到任何結果的原因是因爲isset($_POST['submit'])查找名稱爲「提交」而非「提交」類型的元素。就在name屬性添加到您的按鈕,它應該爲你工作:

<button style="margin: 0 auto" type="submit" name="submit" class="btn btn-fill full-width">GET FREE MONTH<span class="icon-chevron-right"></span></button> 

此外,你應該保持API密鑰祕密,因此其他人無法通過API訪問您的MailChimp帳戶。我建議禁用當前的密鑰並創建一個新密鑰。有關更多詳細信息,請參閱MailChimp關於API Keys的知識庫文章。

+0

我添加了name =「submit」,但它仍然沒有將郵件添加到郵件黑猩猩的訂閱列表中。我甚至沒有看到郵件中記錄的api調用成功api log – Tom

+0

@Tom當你回顯'$ _SESSION ['msg']'時,你能夠得到一條消息嗎? –

+1

我發現了問題。 Joel H.對我忘了把name =「submit」說了一遍,另一個問題是我收到一條錯誤消息:'不能將blah轉換爲第43行的字符串,這就是'echo json_encode($ result) ;'。在我的html中添加name ='submit'並取出該行的php後,api正在工作。 – Tom

相關問題