Shopware 6 Product API无法设置产品采购价及售价问题排查求助
问题分析与解决方案
嘿,我一眼就揪出你代码里的问题啦!这是个很容易踩的编码误区:
核心错误:重复编码价格数据
你单独对$price数组执行了json_encode(),然后把这个JSON字符串塞进了$product数组里。当你最后对整个$product数组做编码时,price字段就变成了带引号的字符串格式,但Shopware 6的API期望的是原生数组类型的价格数据——API根本识别不了字符串格式的价格,自然就不会给产品设置售价了。
修正后的代码
把单独编码$price的步骤删掉,直接把价格数组作为product的price值,最后只对整个产品数组做一次编码就好:
// 直接定义价格数组,不需要单独编码 $price = [ "currencyId" => "b7d2554b0ce847cd82f3ac9bd1c0dfca", "net" => $net, "gross" => $gross, "linked" => false ]; // 产品数组直接使用price数组,而非编码后的字符串 $product = [ "id" => str_replace("-","", $productId), "productId" => str_replace("-","", $productId), "name" => $name, "taxId" => $taxId, "productNumber" => $productNumber, "minPurchase" => $minPurchase, "price" => $price, // 这里直接用数组 "purchasePrice" => $purchasePrice, "stock" => $stock, "images" => $images, "attributes" => $attributes, // 注意拼写修正:是attributes不是atributes "categoryId" => "7997459a37f94a75a14d7cbd872a926f" ]; // 最后只对整个产品数组做一次JSON编码 $productJson = json_encode($product);
额外提醒
- 如果你的产品需要支持多币种价格,
price字段应该是数组的数组,比如:
"price" => [ [ "currencyId" => "b7d2554b0ce847cd82f3ac9bd1c0dfca", "net" => 10.00, "gross" => 12.00, "linked" => false ], [ "currencyId" => "其他币种ID", "net" => 15.00, "gross" => 18.00, "linked" => false ] ]
- 你代码里的
atributes是拼写错误,正确的字段名是attributes——这个小错误可能会导致属性数据无法被正确识别,记得修正哦。
内容的提问来源于stack exchange,提问作者Grimclaw Draven
相关产品推荐
相关产品推荐

