MailChimp HTTP 错误:您必须指定 APIKEY



我是使用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 后缀。 有什么想法吗?

订阅:

$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 密钥丢失"但 API 密钥肯定存在的情况通常来自 JSON 语法错误,MailChimp 没有专门捕获这些错误。您需要确保 JSON 没有进行双重编码或类似的东西。

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

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

最新更新