2017-09-03 16 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>'; 
    } 
} 

ので、ときに私は、これをデバッグする方法さえわかりません私はエコー$の結果(またはそのようなもの)私はページに何も表示されないか、またはコンソールに記録されません。私はまだ3.0 APIである限り、javascriptを使用する提案にもオープンしています。

+0

MailChimp APIのルールについてはわかりませんが、通常は最後に 'json_encode()'の代わりに 'json_decode()'を実行してください。 – Wishan

+0

ああ、ありがとう。ドキュメントやログをコンソールに出力しますか? – Tom

+0

は、MailChimpデータをJSONから配列に変換して変換します。コンソールやその他のものに印刷するために配列を操作することができます。 – Wishan

答えて

1

登録コードが正常に動作します。結果が表示されない理由は、isset($_POST['submit'])が、 'submit'というタイプではなく 'submit'という名前のエレメントを探すためです。ちょうどあなたのボタンにname属性を追加し、それはあなたのために働く必要があります。他の人がAPIを通して、あなたのMailChimpアカウントにアクセスできないように

<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キー秘密にしておく必要があります。現在の鍵を無効にして新しい鍵を作成することをお勧めします。詳細についてはMailChimpのナレッジベース記事API Keysを参照してください。

+0

私はname = "submit"を追加しましたが、依然としてメールchimpの購読リストにメールを追加していません。私はメールチンパンジーのログに記録された成功したAPI呼び出しを見ていません – Tom

+0

@Tom '$ _SESSION ['msg']'をエコーするとメッセージを受け取ることができますか? –

+1

私は問題を見つけました。 Joel H.はname = "submit"を置くことを忘れていましたが、もう1つの問題はエラーメッセージが出ていたことです: '43行目の文字列に変換できません。これはecho json_encode($ result) ; '。私のHTMLにname = 'submit'を追加して、phpのその行を取り出したら、apiは現在動作しています。 – Tom

関連する問題