【问题标题】:mailchimp http error: you must specify a apikeymailchimp http 错误:您必须指定 apikey
【发布时间】:2015-06-22 06:37:06
【问题描述】:

我正在使用 MailChimp 2.0 api 并尝试使用 php 发布列表/订阅调用。调用返回错误“您必须指定 apikey 值”。

这是发布帖子的代码:

  function json_post ($url, $params)
  {
    print '<p>url = ' . $url . '</p>';
    $data = json_encode ($params);
    print '<p>data = ' . $data . '</p>';

    $handle = curl_init ($url);
    curl_setopt ($handle, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt ($handle, CURLOPT_POST_FIELDS, $data);
    curl_setopt ($handle, CURLOPT_RETURNTRANSFER, true);
    curl_setopt ($handle, CURLOPT_HTTPHEADER, array ('Content-Type: application/json',
                                                     'Content-Length: ' . strlen($data_string)));

    $result = curl_exec ($handle);
    print '<p>curl_error: ' . curl_errno ($handle) . '</p>';
    return $result;
  }

打印语句显示:

url = https://us10.api.mailchimp.com/2.0/lists/subscribe.json

data = {"apikey":"...","id":"...","email":{"email":"test1@abc.com"},"merge_vars":{"groupings":{"name":"test"}}}

curl_error: 0

{"status":"error","code":-100,"name":"ValidationError","error":"You must specify a apikey value"}

我认为语法有问题。 api 密钥是从我的 mailchimp 帐户页面剪切和粘贴的。我已经尝试过使用和不使用 -us10 后缀。有什么想法吗?

【问题讨论】:

  • 使用v2.0 API 时似乎有一个wrapper 类用于手
  • @darkbee - 我确实遇到了您引用的 2.0 示例。它是如此之大,以至于我不知道它的哪一部分与我的问题相关。真的值得花时间去挖掘吗?我希望我发布的问题是直截了当且易于解决的。
  • 嗯.. 这个question 有一个答案 + 使用该包装器的示例 ;-)

标签: php json curl mailchimp


【解决方案1】:

订阅:

$email='';
$apikey='';
$listId='';

    $data = array(
                    'email_address'=>$email,
                    'apikey'=>$apikey,
                    'merge_vars' => array(),
                    'id' => $listId,
                    'double_optin' => false,
                    'update_existing' => true,
                    'replace_interests' => false,
                    'send_welcome' => false,
                    'email_type' => 'html'
            );
    $submit_url = "http://us6.api.mailchimp.com/1.3/?method=listSubscribe";


$payload = json_encode($data); 
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $submit_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, urlencode($payload));

$result = curl_exec($ch);
curl_close ($ch);
$data = json_decode($result);
if (isset($data->error) and $data->error){
        //Error
} else {
        //Ok
}

【讨论】:

  • 我试过你的代码,但我仍然得到同样的错误。也许我有一些微妙的错误,但我没有看到。您的代码和我的代码之间的主要区别似乎是您使用的是 1.3 版,而我正在尝试使用 2.0。任何其他想法为什么我会收到 apikey 错误?
  • 我会在我的网站上检查新版本的 api,看看是否有效;)
  • Millan - 解决方案非常简单。我打错了 CURLOPT_POSTFIELDS(在我的原始帖子中仍然显示不正确)。您的代码和我的代码之间还有一些其他差异,但我认为这是唯一的重大变化。
【解决方案2】:

您得到“API Key Missing”但 API Key 确实存在的情况通常来自 JSON 语法错误,MailChimp 没有专门捕捉到这些错误。您需要确保 JSON 没有被双重编码或类似的东西。

在这种情况下,它可能是CURLOPT_POST_FIELDS -- 您正在寻找的实际PHP ConstantCURLOPT_POSTFIELDS

您应该使用 Guzzle 或其他 HTTP 库来确保您不会对 JSON 进行双重编码,否则会被 Curl 库的冗长所困扰。

【讨论】:

  • 我没试过。我只是查找了它们(我是 PHP 的新手),我需要问:它们将如何帮助解决基本问题?我目前正在使用 json_encode 所以,如果我有语法问题,它比编码更高,不是吗?假设是这种情况,我如何找出语法问题?
  • 这是一条评论。答案不需要更多问题
  • 我删除了帖子中的“问题”,因为它似乎让一些人感到困惑。这是一种礼貌的方式,建议@PeriHartman 尝试一个不那么复杂的库。我还添加了另一个可能的答案。
猜你喜欢
  • 2016-06-10
  • 1970-01-01
  • 2019-06-23
  • 2021-03-16
  • 2020-06-21
  • 2018-08-07
  • 1970-01-01
  • 2021-12-21
  • 2017-03-15
相关资源
最近更新 更多