如何通过SP API SDK查询亚马逊库存JSON上传状态及相关问题
解决方案
一、用SDK查询Feed状态
你的代码已创建CreateFeedSpecification,但缺少提交Feed和轮询状态的步骤,补充代码如下:
// 创建Feed,提交处理请求 $createFeedResponse = $feedsApi->createFeed($createFeedSpecification); $feed = $createFeedResponse->dto(); $feedId = $feed->feedId; // 轮询查询Feed状态(建议设置30秒间隔,避免频繁请求) do { sleep(30); $getFeedResponse = $feedsApi->getFeed($feedId); $feedStatus = $getFeedResponse->dto()->processingStatus; echo "当前Feed状态:{$feedStatus}\n"; } while (!in_array($feedStatus, ['DONE', 'FAILED', 'CANCELLED'])); // 处理完成后获取结果文档 if ($feedStatus === 'DONE') { $resultDocId = $getFeedResponse->dto()->resultFeedDocumentId; $getFeedDocResponse = $feedsApi->getFeedDocument($resultDocId); $resultDocument = $getFeedDocResponse->dto(); // 下载并打印处理结果(包含错误信息或成功提示) $resultContent = $resultDocument->download(); echo "Feed处理结果:{$resultContent}\n"; }
说明:Feed处理需要时间,轮询是必要的。结果文档会明确告知失败原因(比如字段错误、SKU不存在等),能直接定位库存未更新的问题。
二、JSON payload字段必填性
- productType:对于
JSON_LISTINGS_FEED的PARTIAL_UPDATE操作,属于必填项,必须与该SKU在亚马逊后台的产品类型完全一致,否则Feed会处理失败。 - attributes:在你的场景中(更新库存
fulfillment_availability),该字段是必填项,库存更新的核心数据都在这个节点下。 - 额外注意:
lead_time_to_ship_max_days要求是数字类型,你的payload里用了字符串"5",建议改为数字5,这可能是库存未更新的原因之一。
三、不使用SDK上传库存的简便方法
可以直接通过HTTP请求完成,用Postman、curl等工具即可执行,步骤如下:
1. 获取LWA访问令牌
向亚马逊LWA接口发送POST请求,获取access_token:
curl -X POST "https://api.amazon.com/auth/o2/token" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=refresh_token&client_id=你的LWA_CLIENT_ID&client_secret=你的LWA_CLIENT_SECRET&refresh_token=你的LWA_REFRESH_TOKEN"
2. 创建Feed文档
向SP API的Feed文档接口发送POST请求,拿到feedDocumentId和上传URL:
curl -X POST "https://sellingpartnerapi-eu.amazon.com/feeds/2021-06-30/documents" \ -H "Authorization: Bearer {access_token}" \ -H "Content-Type: application/json" \ -d '{"contentType": "application/json"}'
3. 上传Feed内容
向拿到的上传URL发送PUT请求,上传你的JSON payload:
curl -X PUT "{上传URL}" \ -H "Content-Type: application/json" \ -d '{你的完整JSON payload}'
4. 提交Feed处理
向SP API的Feed接口发送POST请求,提交Feed处理:
curl -X POST "https://sellingpartnerapi-eu.amazon.com/feeds/2021-06-30/feeds" \ -H "Authorization: Bearer {access_token}" \ -H "Content-Type: application/json" \ -d '{"marketplaceIds": ["你的市场ID"], "inputFeedDocumentId": "{feedDocumentId}", "feedType": "JSON_LISTINGS_FEED"}'
5. 轮询Feed状态
定期向Feed详情接口发送GET请求,直到处理完成:
curl -X GET "https://sellingpartnerapi-eu.amazon.com/feeds/2021-06-30/feeds/{feedId}" \ -H "Authorization: Bearer {access_token}"
处理完成后,可通过返回的resultFeedDocumentId下载结果文档,查看处理详情。
内容的提问来源于stack exchange,提问作者wharfdale
相关产品推荐
相关产品推荐

