MailChimp组选项在php中选择

时间:2017-01-18 01:34:49

标签: php http-post mailchimp mailchimp-api-v3.0

我试着找到过去5个小时的答案,但我终于屈服了,正在寻求帮助。

基本上,这段代码工作得很好,直到我需要选择一个组选项。我不确定我是否正确创建了我的兴趣阵列,我可能不得不使用'merge_vars',但在我再花5个小时盲目地走进墙壁之前,我真的想要一些指导。

注意我的群组名称我一直在使用整个字符串“group [3117]”

Action.php

onOff = 0

的index.php

<?php
session_start();
if(isset($_POST['submit'])){
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];
$interest = $_POST['group[3117]'];

if(!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL) === false){
    // MailChimp API credentials
    $apiKey = '+ insert api key here +';
    $listID = 'insert list id';
    $interest = 'insert group name'; // YOUR INTEREST/GROUP ID

    // 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'  => [
            'FNAME'     => $fname,
            'LNAME'     => $lname
        ],
            'interests'        => array(
        $interest => true
        ),
    ]);

    // 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);

    // 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>';
}
}
// redirect to homepage
header('location:index.php');  

1 个答案:

答案 0 :(得分:0)

这是解决方案,有很多手动数据输入,但它有效,如果有人有一个更简单的方法请告诉我。 进入MailChimp API游乐场。选择您的列表/子资源/兴趣类别/兴趣名称/子资源/兴趣/响应。向下滚动,会有一个独特的“id”感兴趣。 (忽略类别ID) 以下是代码,信用额为Mukesh ChapeganCodexWorld

将此页面命名为Action.php

<?php
$email =  $_POST['email'];
$memberHash = md5($email);
$first_name = $_POST['fname'];
$last_name =  $_POST['lname'];
$interest = $_POST['location'];   
$api_key = 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'; // YOUR API KEY
$server = 'us14.'; //last part of ur api key
$list_id = 'XXXXXXX'; // YOUR LIST ID
$auth = base64_encode( 'user:'.$api_key );   
$data = array(
    'apikey'        => $api_key,
    'email_address' => $email,
    'status'        => 'subscribed',
    'merge_fields'  => array(
        'FNAME' => $first_name,
        'LNAME'    => $last_name
        ),
    'interests'        => array(
            $interest => true
            ),
    );
$json_data = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://'.$server.'api.mailchimp.com/3.0/lists/'.$list_id.'/members/'.$memberHash);
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_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
$result = curl_exec($ch);
$result_obj = json_decode($result);
echo $result_obj->status;
echo '<br>';
echo '<pre>'; print_r($result_obj); echo '</pre>';
?>

这是HTML表单。将此index.php命名 注意我将select元素命名为location,将选项值命名为通过API playground获取的兴趣ID。

<?php session_start(); // place it on the top of the script ?>
<?php
    $statusMsg = !empty($_SESSION['msg'])?$_SESSION['msg']:'';
    unset($_SESSION['msg']);
    echo $statusMsg;
?>

<form method="post" action="action.php">
    <p><label>First Name: </label><input type="text" name="fname" /></p>
    <p><label>Last Name: </label><input type="text" name="lname" /></p>
    <p><label>Email: </label><input type="text" name="email" /></p>
 <p> <select name="location" class="REQ_CSS" id="mce-group[3117]">
<option value=""></option>
<option value="f3eb68268d">Los Angeles</option>
<option value="3204c60199">Seattle</option>
<option value="3c5b8d638a">Portland</option> </p>
</select>

    <p><input type="submit" name="submit" value="SUBSCRIBE"/></p>
</form>

如果这个答案有助于请求upvote,那么它更容易找到。我在很长一段时间内都在寻找这个解决方案,并找到了很多问题但答案很少。