You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:33:56