Shopware 6 Product API POST请求报Cannot unset string offsets错误如何排查
Shopware 6 Product API POST请求500错误解决方案
错误原因定位
本次返回Cannot unset string offsets错误的根本原因是请求体中多个字段类型不符合Shopware 6 API的规范要求,系统预期接收数组/对象类型的字段被传入了字符串,触发PHP底层类型操作异常:
price字段:Shopware 6要求该字段为价格对象数组,你的请求中传入了单个对象images、拼写错误的atributes字段:系统预期为数组类型,你传入了空字符串"",系统尝试对字符串执行数组键删除操作时触发报错- 其他关联错误:主键字段名错误(应为
id而非productId)、categoryId传入数字字符串而非UUID格式、数值类型字段(minPurchase、stock、价格相关字段)传入了字符串格式
具体修复步骤
修正后的请求体参考如下,根据你的实际业务调整参数即可:
{ "id":"fd1be1ea-884a-4049-b143-605d8dfaa589", "name":"Sorelie", "taxId":"f68a9c3c-8686-4c2e-a759-7062fc457cf7", "productNumber":"16345583549", "minPurchase":1, "purchasePrice":0, "price":[ { "currencyId":"b7d2554b-0ce8-47cd-82f3-ac9bd1c0dfca", "net":0, "gross":0, "linked": true } ], "stock":0, "categories": [ {"id": "替换为对应分类的UUID值"} ] }
修改点说明:
- 主键字段改为
id,普通产品无需传入parentId,仅变体产品需要关联父产品ID时传入 price改为数组格式,数值类型字段去掉字符串引号直接传数字- 删除不需要的空字符串字段,不需要的字段可以直接不传,如需传空值需传入空数组
[]而非空字符串 - 分类关联改为
categories数组,传入正确的分类UUID,不可使用数字ID
通用排查路径
- 开启调试模式:修改站点根目录
.env文件,将APP_ENV的值改为dev,再次发起请求即可获取完整错误堆栈,直接定位报错的具体代码位置和关联字段 - 校验字段规范:访问本地部署的swagger接口文档(路径为
/api/_info/swagger.html),查看Product实体的完整字段定义,确认每个字段的类型、必填要求 - 最小化测试:调试时先仅传入必填字段,请求成功后再逐步添加其他字段,快速定位问题字段
内容的提问来源于stack exchange,提问作者Grimclaw Draven
相关产品推荐
相关产品推荐

