【问题标题】:MailChimp Add Subscriber using API 3.0 PHPMailChimp 使用 API 3.0 PHP 添加订阅者
【发布时间】:2018-02-11 15:54:45
【问题描述】:

我正在尝试添加一个 php 文件,它将新订阅者添加到我的 MailChimp 列表中。这是我应该触发 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 $result(或类似的东西)时,我在页面上看不到任何内容或登录到控制台。我也愿意接受任何使用 javascript 的建议,只要它仍然是 3.0 API。

【问题讨论】:

  • 我不确定 MailChimp API 规则,但通常你会json_decode() 结果而不是最后的json_encode()
  • 哦,好的,谢谢。那会打印到文档还是登录到控制台?
  • 这会将 MailChimp 发送回的数据从 JSON 转换为数组。然后,您可以操作数组以打印到控制台或其他任何东西。
  • 请注意,您可能需要编辑您的问题并删除 api 密钥(如果它是真实的)。

标签: php html mailchimp


【解决方案1】:

您的订阅代码可以正常工作。您没有看到任何结果的原因是isset($_POST['submit']) 查找名称为“submit”而不是“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 的知识库文章。

【讨论】:

  • 我添加了 name="submit" 但它仍然没有将电子邮件添加到我在邮件黑猩猩的订阅列表中。我什至没有在邮件黑猩猩 api 日志中看到成功的 api 调用
  • @Tom 你回显$_SESSION['msg']时能收到消息吗?
  • 我发现了问题。 Joel H. 关于我忘记输入 name="submit" 是对的,另一个问题是我收到一条错误消息:'Cannot convert blah to string at line 43',即echo json_encode($result);。在我的 html 中添加 name='submit' 并取出那行 php 后,api 现在可以工作了。
猜你喜欢
  • 2017-05-31
  • 2015-08-13
  • 2020-08-20
  • 2016-06-12
  • 2018-05-15
  • 2017-05-05
  • 2015-10-17
  • 2020-08-09
  • 2017-08-07
相关资源
最近更新 更多