Zttp 发送 form params 请求 而非 JSON 请求
前段时间,@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 协议》,转载必须注明作者和本文链接
昨天也发现这个问题了
@dinghua :+1: 我也是昨天发现的,然后找了半天,最后看到个 form_parms ,果断去看了下源码里,然后测试了下,就解决了。
我在他的测试文件里看的,我基本把测试文件当文档看:
@dinghua 看样子下次我得仔细点看了:joy: