如何解决Walmart Feeds API更新SKU时的产品ID重复报错?
如何通过Walmart API更新已有商品的SKU?
问题背景
- 使用
/v3/feeds?feedType=MP_MAINTENANCEAPI更新Walmart商品时,部分商品可正常操作,但更换某一已有商品SKU时触发错误:
The Product ID already exists in your seller catalog with a different SKU. Select Yes from the drop-down in the SKU Update column to update the SKU value.
- 查阅帮助文档仅找到手动更新SKU的方法,API文档未提及相关步骤
- 尝试调用
DELETE /v3/items/DEL5313221491接口下架商品,确认成功后再次更新SKU,仍报相同错误
当前请求负载代码
$object = new \stdClass(); $object->MPItemFeedHeader = new \stdClass(); $object->MPItemFeedHeader->sellingChannel = "mpmaintenance"; $object->MPItemFeedHeader->processMode = "REPLACE"; $object->MPItemFeedHeader->subset = "EXTERNAL"; $object->MPItemFeedHeader->locale = "en"; $object->MPItemFeedHeader->version = "1.5"; $object->MPItemFeedHeader->mart = "WALMART_US"; $object->MPItem = array(); foreach ($data as $key => $value) { $mpItem = new \stdClass(); $mpItem->Orderable = new \stdClass(); $mpItem->Orderable->sku = $value['sku']; $mpItem->Orderable->productIdentifiers = new \stdClass(); $mpItem->Orderable->productIdentifiers->productIdType = $value['productIdType']; $mpItem->Orderable->productIdentifiers->productId = $value['productId']; $mpItem->Orderable->productName = $value['productName']; $mpItem->Orderable->brand = $value['brand']; $mpItem->Orderable->price = $value['price']; if(isset($value['endDate'])) { $mpItem->Orderable->endDate = $value['endDate']; } $mpItem->Orderable->pricePerUnit = new \stdClass(); $mpItem->Visible = new \stdClass(); $mpItem->Visible->{$value['category']} = new \stdClass(); $mpItem->Visible->{$value['category']}->shortDescription = strip_tags($value['shortDescription']) . " " . strip_tags($value['addInfo']); $mpItem->Visible->{$value['category']}->mainImageUrl = $value['mainImageUrl']; if(isset($value['secondaryImagesUrls'])) { $mpItem->Visible->{$value['category']}->productSecondaryImageURL = $value['secondaryImagesUrls']; } $object->MPItem[] = $mpItem; }
解决方案
要通过API实现已有商品的SKU更新,需调整请求参数以触发官方支持的SKU更新逻辑,具体修改如下:
- 修改处理模式:将
MPItemFeedHeader中的processMode从REPLACE改为UPSERT。REPLACE模式会尝试完全替换商品记录,而UPSERT支持更新已有关联的商品信息。 - 添加SKU更新标识:在
Orderable节点下新增skuUpdate字段并设置为true,明确告知API允许更新该商品的SKU(对应手动操作中“在SKU Update列选择Yes”的逻辑)。
修改后的关键代码片段:
// 更新processMode为UPSERT $object->MPItemFeedHeader->processMode = "UPSERT"; // 在Orderable节点添加skuUpdate字段 $mpItem->Orderable->skuUpdate = true;
补充说明
- 下架商品后仍报错,是因为Walmart后台会保留商品的Product ID与原SKU的绑定记录,仅下架无法解除该关联。
- 使用
UPSERT模式+skuUpdate=true的组合,是API层面触发SKU更新的标准方式,能覆盖手动操作的逻辑。
内容的提问来源于stack exchange,提问作者habib
相关产品推荐
相关产品推荐

