Zttp 傳送 form params 請求 而非 JSON 請求

蝸牛發表於2017-06-09

前段時間,@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 協議》,轉載必須註明作者和本文連結

Study hard and make progress every day. Study hard and make progress every day.

相關文章