Guzzle POST请求Shopware 6 API报JSON格式错误求助
问题原因及解决方法
核心问题分析
- 变量名不匹配:你定义了
$payload变量,但请求时传的是$data,导致实际发送的请求没有携带正确的参数。 - 请求体格式错误:使用
form_params会让Guzzle以application/x-www-form-urlencoded格式发送数据,但Shopware 6 API要求JSON格式的请求体,这就是返回"JSON payload is malformed"的根本原因。
修正后的代码
$payload = [ 'headers' => [ 'Accept' => 'application/json', // Content-Type会由Guzzle自动设置 ], 'json' => [ "name" => "productname", "productNumber" => "101003", "stock" => 2, "taxId" => "50ee15989533451095c9d7e03d9ce479", "price" => [ [ "currencyId" => "b7d2554b0ce847cd82f3ac9bd1c0dfca", "gross" => 15, "net" => 10, "linked" => false ] ] ] ]; // 注意这里使用定义好的$payload变量 $response = $client->request('POST', 'http://shopware6.shop.de/api/product', $payload);
关键说明
- 使用
json参数:Guzzle的json选项会自动将数组编码为JSON字符串,并设置正确的Content-Type: application/json请求头,无需手动处理编码和头信息。 - 变量名一致性:确保请求时传递的变量和定义的变量名一致,避免因变量未定义或为空导致的请求异常。
- 简化请求头:当使用
json参数时,Content-Type头会被自动设置,只需保留Accept头指定期望的响应格式即可。
内容的提问来源于stack exchange,提问作者TheTom
相关产品推荐
相关产品推荐

