【问题标题】:Check whether email is subscribed to list in MailChimp API 3.0 using PHP使用 PHP 检查邮件是否订阅 MailChimp API 3.0 中的列表
【发布时间】:2016-11-28 22:07:22
【问题描述】:

我刚刚在 MailChimp 网站上阅读了以下内容:

MailChimp API v3.0 现已上线! 2016 年之后将不再支持之前的版本,因此所有 API 用户都应该开始过渡到 v3.0。

因此,我想迁移到 API 的 v3.0。请问我可以有一个函数,在 PHP 中,它返回一个布尔值,它将检查电子邮件地址是否订阅了特定的 MailChimp 列表。我不想订阅那个用户,而只是检查他们是否被订阅。

【问题讨论】:

    标签: php get mailchimp mailchimp-api-v3.0


    【解决方案1】:

    如果你使用mailchimp-api,它看起来像这样

    include 'Mailchimp.php';
    use \DrewM\MailChimp\MailChimp;
    $MailChimp = new MailChimp('your**api***key');
    
    function emailExistsMc($subscriberMail, $list_id){
        global $MailChimp;
        $subscriber_hash = $MailChimp->subscriberHash($subscriberMail);
        $result = $MailChimp->get("lists/$list_id/members/$subscriber_hash");
        if($result['status'] == '404') return false;
        return true;
    }
    

    如果$result['status'] 是404,则找不到资源。 $result['status'] 的其他可能值在docs 中说明:

    • 已订阅
    • 退订
    • 已清理
    • 待定
    • 事务性

    【讨论】:

      【解决方案2】:

      更新:我用更详细的教程回答了另一个问题,该教程介绍了如何使用 jQuery .ajax():Adding subscribers to a list using Mailchimp's API v3

      查看Mailchimp documentation 并假设您有一个给定的列表,看起来您会使用 GET 调用此端点: /lists/{list_id}/members/{subscriber_hash}

      要在 PHP 中执行此操作,我找到了 nice script sitting on github。他们的最后一个功能可能会为您解决问题:

      function mc_checklist($email, $debug, $apikey, $listid, $server) {
          $userid = md5($email);
          $auth = base64_encode( 'user:'. $apikey );
          $data = array(
              'apikey'        => $apikey,
              'email_address' => $email
              );
          $json_data = json_encode($data);
          $ch = curl_init();
          curl_setopt($ch, CURLOPT_URL, 'https://'.$server.'.api.mailchimp.com/3.0/lists/'.$listid.'/members/' . $userid);
          curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json',
              'Authorization: Basic '. $auth));
          curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/2.0');
          curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($ch, CURLOPT_TIMEOUT, 10);
          curl_setopt($ch, CURLOPT_POST, true);
          curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
          curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
          curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
          $result = curl_exec($ch);
          if ($debug) {
              var_dump($result);
          }
          $json = json_decode($result);
          echo $json->{'status'};
      }
      

      如果该功能不起作用,我能找到的 v3 库的唯一包装器可以与 Laravel 一起使用 - Mailchimp v3 API PHP wrapper。

      【讨论】:

      • 工作完美,除了在 api.mailchimp.com 之前需要一个额外的点(或者当然 $server 可以在末尾有一个点,但这是不合逻辑的) - 我已经为此提交了一个编辑并删除死()
      • 我认为 Mailchimp 使用订阅者电子邮件地址的小写版本来创建用户 ID。因此, md5(strtolower($email)) 可能更安全一些。
      【解决方案3】:

      我使用 DrewM 库

      function isSubscribed($emailAddress, $listId) {
          $chimp = new \DrewM\MailChimp\MailChimp($apiKeyHere);
      
          $subscriberHash = $chimp->subscriberHash($emailAddress);
      
          $result = $chimp->get('lists/' . $listId . '/members/' . $subscriberHash);
      
          return ($chimp->success() && isset($result['id']));
      }
      

      【讨论】:

        猜你喜欢
        • 2016-05-25
        • 2015-08-13
        • 2018-02-11
        • 2014-09-25
        • 2017-05-05
        • 2018-05-31
        • 2015-07-20
        • 2014-04-24
        • 2014-04-03
        相关资源
        最近更新 更多