如何在Guzzle服务描述中设置参数为JSON数组?
解决Guzzle服务描述中JSON参数的正确配置问题
我来帮你梳理下问题所在,主要是两个地方出错了:服务描述里的参数类型定义,以及调用时的传参格式。
1. 修正服务描述中的参数定义
你把order参数的type设成了array,但预期的JSON结构里order是一个对象(键值对形式),不是数组。所以要把type改成object,如果需要允许对象内包含任意属性,可以加上additionalProperties配置。
修改后的服务描述代码:
$service_description = new Description([ 'baseUri' => 'http://api.etrackerplus.com/api', 'operations' => [ 'createOrder' => [ 'httpMethod' => 'POST', 'uri' => 'api/stores/{store_id}/orders/new.json', 'responseModel' => 'getResponse', 'parameters' => [ 'store_id' => [ 'type' => 'string', 'location' => 'uri' ], "order" => [ "location" => "json", "type" => "object", // 从array改为object "additionalProperties" => true // 允许对象内包含任意属性 ] ] ] ], 'models' => [ 'getResponse' => [ 'type' => 'object', 'additionalProperties' => [ 'location' => 'json' ] ] ] ]);
2. 修正调用时的传参格式
你的调用代码传参格式有误,不需要嵌套多层数组。createOrder方法接收的是一个扁平的关联数组,直接把store_id和order作为顶级键即可。
正确的调用代码:
$response = $client->createOrder([ 'store_id' => '23', 'order' => [ "order_number" => "1233" ] ]);
效果验证
调整后,Guzzle会自动把order字段序列化成你预期的JSON结构:
{ "order": { "order_number": "1233" } }
内容的提问来源于stack exchange,提问作者Stefano Maglione
相关产品推荐
相关产品推荐

