mailchimp http error: you must specify a apikey

mailchimp http error: you must specify a apikey

我正在使用 MailChimp 2.0 api 并尝试 post 使用 php 调用 lists/subscribe。调用返回错误 "You must specify a apikey value".

这是使 post:

的代码
  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 后缀。有什么想法吗?

订阅:

$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
}

您得到 "API Key Missing" 但肯定存在 API 密钥的情况通常来自 JSON 语法错误,MailChimp 不会具体捕​​获这些错误。您需要确保 JSON 没有被双重编码或类似的情况。

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

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