我嘗試使用cURL向API(mailchimp)發送請求。它適用於GET,但是,我有問題將GET-URl轉換爲通過POST發送的適當的關聯PHP數組。 編輯因爲隨着MarcB評論,GET請求有一些消極的一面,就像一個lenght限制等PHP - 無法獲得關聯數組的結構權利
請注意,我更換了變量的值與asteriks(*)。
這是工作GET參數:
https://us3.api.mailchimp.com/2.0/ecomm/order-add.json?apikey=***
&order[id]=***
&order[campaign_id]=***
&order[email_id]=***
&order[total]=***
&order[store_id]=***
&order[items][0][product_id]=***
&order[items][0][category_id]=***
&order[items][0][category_name]=***
&order[items][1][product_id]=***
&order[items][1][category_id]=***
&order[items][1][category_name]=***
...
這是POST請求的PHP數組:
Array
(
[apikey] => ***
[order] => Array
(
[id] => ***
[campaign_id] => ***
[email_id] => ***
[total] => ***
[order_date] => ***
[shipping] => ***
[tax] => ***
[store_id] => ***
[store_name] => ***
[items] => Array
(
[0] => Array
(
[product_id] => ***
[category_id] => ***
[category_name] => ***
)
[1] => Array
(
[product_id] => ***
[category_id] => ***
[category_name] => ***
)
...
)
)
)
響應是:
Validation error: {\"order\":\"Please enter a struct\\\/associative array\"}
不限想法,我在這裏想念什麼?這裏的結構不一樣嗎?
-
UPDATE:
這是捲曲代碼:
function httpPost($url,$params)
{
$postData = '';
//create name value pairs seperated by &
foreach($params as $k => $v)
{
$postData .= $k . '='.$v.'&';
}
rtrim($postData, '&');
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, count($postData));
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
$output=curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return array($output, $httpCode);
}
print_r(httpPost($mc_api_url, $curl_data));
這是一個很長的查詢字符串。那麼多的數據應該通過發佈,而不是GET查詢。由於某種原因,查詢字符串長度受限,並且您的某個地方可能會被截斷。 –
嗨@MarcB,是的,謝謝你,你是對的。這就是爲什麼我想通過POST而不是GET來做到這一點。 GET只是嘗試,如果它的工作,但現在我得到這個錯誤,當使用POST,並不明白爲什麼? – Chris
好吧,驗證錯誤看起來像JSON。 mailchimp API是否期望json?你是否正在做一個正確的json_encode(),如果是這樣的話? –