2017-09-03 54 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

相关问题