通过 Curl (Mailchimp API) 发布 PHP 会话

Posted

技术标签:

【中文标题】通过 Curl (Mailchimp API) 发布 PHP 会话【英文标题】:Post PHP Session via Curl (Mailchimp API) 【发布时间】:2017-10-22 02:16:16 【问题描述】:

我正在尝试将订阅者自动更新到 Mailchimp 列表。我可以使用表单等中的字符串更新列表。但是,我正在处理的电子商务网站已经有一个电子邮件地址存储在我需要使用的会话中,但在使用 Curl 时它会丢失。有人可以帮忙吗?

下面的示例使用了我提供的表格以供参考。

<?php
session_start();
if(isset($_POST['submit']))
$email = $_POST['email'];
if(!empty($email) && !filter_var($email, FILTER_VALIDATE_EMAIL) === false)
    // MailChimp API credentials
    $apiKey = 'xxx-us14';
    $listID = 'xxxxxxxx';

    // 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',
        'double_optin'   => false,
        'send_welcome'  => true,
        'update_existing'   => false,
        'replace_interests' => false,
        'merge_fields'  => [
            'FNAME'     => $fname,
            'LNAME'     => $lname
        ]

    ]);

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

【问题讨论】:

我没有看到您在代码中使用 SESSION 的任何地方? 是的,我刚刚包含了一个使用表单的工作示例。 问题还是一样。您问题中的SESSION 电子邮件代码在哪里? 我在午休时间使用了另一台计算机,所以我现在没有。会话包括名字、名字和电子邮件地址。 Mailchimp 需要的一切。 上面的代码使用了 $_POST['email'] 和一个提交表单。我需要帮助尝试使用存储在会话中的电子邮件,而不是让用户填写另一个表单。 【参考方案1】:

如果您想从会话中提取数据,则需要使用 PHP $_SESSION superglobal。上面的代码看起来正在使用$_POST 超全局并访问它的email 值。 $_SESSION 记录在这里:http://php.net/manual/en/reserved.variables.session.php

我想提一下,传统上,通过网络请求发送直接从会话中读取的数据并不是一种安全的做法。如果这是一个表格,我建议使用您已经发送的 $_POST。如果您不希望您的用户输入他们的电子邮件地址,您可以在表单上使用预先填充的隐藏字段。

【讨论】:

以上是关于通过 Curl (Mailchimp API) 发布 PHP 会话的主要内容,如果未能解决你的问题,请参考以下文章

无法让 MailChimp 使用带有 Curl 的 API 保存我的数据

使用 curl 从 mailchimp 获取数据我在哪里将 api 密钥放在 curl 调用中

访问 MailChimp API 3.0 (GET)

Mailchimp v3.0 API,使用 Perl Curl

使用 cURL 和 Mailchimp API v3 更新列表中的订阅者

MailChimp API 在 V3.0 PHP Curl 中响应 404