前段時間,@JokerLinly 琳姐 發表的一文章 Zttp ——簡化你的 Guzzle 呼叫,讓我開始使用 「Zttp」 替代 「Guzzle」作為我的 http 請求客戶端。
最近在對接百度外賣的 3.0 介面的時候,傳送的請求總是獲取不到需要的資料。總是獲取到 ‘unsupport api version’ 或 'sign not match',百度外賣開放平臺中有人也遇到過同樣的 問題,官方給出的答案是:
3.0是POST格式,並不是大的JSON串。
除錯後才知道 「Zttp」傳送的請求預設是 json,
array:4 [
"http_errors" => false
"query" => []
"json" => array:9 [
"body" => "{"order_id":"14969211155953"}"
"cmd" => "order.confirm"
"encrypt" => ""
"secret" => "404d601cab72fbd6"
"source" => "64824"
"ticket" => "AC555E53-C016-E4D6-BFE6-8FEF0EE873C5"
"timestamp" => 1496985951
"version" => 3
"sign" => "7652BDE9F8D5AF01807DA7330BBD31F3"
]
"synchronous" => true
]
解決辦法是在 post 請求之前呼叫 asFormParams() 方法。Zttp::asFormParams()->post(bd_api_url(), $params);
array:5 [
"http_errors" => false
"headers" => array:1 [
"Content-Type" => "application/x-www-form-urlencoded"
]
"query" => []
"form_params" => array:9 [
"body" => "{"order_id":"14969211155953"}"
"cmd" => "order.confirm"
"encrypt" => ""
"secret" => "404d601cab72fbd6"
"source" => "64824"
"ticket" => "AC555E53-C016-E4D6-BFE6-8FEF0EE873C5"
"timestamp" => 1496985890
"version" => 3
"sign" => "4EB8BA18D822D3BBDD125FFCF124E7B0"
]
"synchronous" => true
]
本作品採用《CC 協議》,轉載必須註明作者和本文連結