2015-04-16 77 views
1

我是使用MailChimp 2.0 api並嘗試使用php發佈列表/訂閱呼叫。該調用返回錯誤「您必須指定apikey值」。mailchimp http錯誤:您必須指定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":"[email protected]"},"merge_vars":{"groupings":{"name":"test"}}} 

curl_error: 0 

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

我相信有一些錯誤的語法。從我的mailchimp帳戶頁面粘貼api密鑰&。我已經嘗試過,沒有-us10後綴。有任何想法嗎?

+0

似乎有一個[封裝](https://github.com/mailchimp/mcapi2-php-examples)類的手在使用'v2.0' API時 – DarkBee

+0

@darkbee - 我遇到過2.0示例你引用。這是如此之大,我不知道它的哪一部分與我的問題有關。挖掘它真的值得嗎?我希望我發佈的問題很簡單,很容易解決。 –

+0

那麼..這[問題](http://stackoverflow.com/questions/18427405/mailchimp-api-2-0-subscribe-through-php)有一個答案+示例使用該包裝雖然;-) – DarkBee

回答

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 
} 
+0

我試過你的代碼,但我仍然得到相同的錯誤。也許我有些微妙的錯誤,但我沒有看到它。看起來你的代碼和我的主要區別在於你使用的是1.3版本,而我試圖使用2.0。任何其他想法,爲什麼我得到apikey錯誤? –

+0

我會在我的網站上查看api的新版本,看看是否有效;) –

+0

Millan - 解決方案非常簡單。我錯誤地輸入了CURLOPT_POSTFIELDS(仍然在我的原始文章中顯示不正確)。你的代碼和我的代碼之間還有一些其他的區別,但我認爲這是唯一的重大變化。 –

1

案例你在哪裏得到「API密鑰缺失」,但API密鑰肯定是有的通常來自JSON語法錯誤,MailChimp不專門捕獲。你會想確保JSON沒有得到雙重編碼或類似的東西。

在這種情況下,它可能是CURLOPT_POST_FIELDS - 您正在尋找的實際PHP ConstantCURLOPT_POSTFIELDS

您應該使用Guzzle或其他HTTP庫來確保您不會對JSON進行雙重編碼,否則會由於Curl庫的冗長而絆倒。

+0

我還沒有嘗試過。我只是看着他們(我是PHP的新手),我需要問:他們將如何幫助解決基本問題?我目前使用json_encode,如果我有語法問題,它的編碼級別比較高,不是嗎?假如是這種情況,我怎麼知道語法問題是什麼? –

+1

這是一條評論。回答不需要進一步的問題 – DarkBee

+0

我刪除了帖子中的「問題」,因爲它似乎讓一些人感到困惑。推薦@PeriHartman嘗試一個不太複雜的圖書館是一種有禮貌的方式。我還添加了另一個可能的答案。 – TooMuchPete

相關問題