使用JSON_LISTINGS_FEED调用SP-API始终返回QuotaExceeded错误求助
Amazon SP-API提交JSON_LISTINGS_FEED时遭遇QuotaExceeded(429)错误排查与解决
提交Feed时收到如下429错误:
Too Many Requests (429) Response: { "errors": [ { "code": "QuotaExceeded", "message": "You exceeded your quota for the requested resource.", "details": "" } ] }
已尝试的操作
- 确认Feed内容及请求结构无误
- 收到错误后等待30分钟重试,仍返回相同错误
- 未修改代码或内容的情况下,部分请求会随机成功,问题原因难以定位
代码实现
try { $feedsApi = $connector->feedsV20210630(); $contentType = "application/json"; $createFeedDoc = new CreateFeedDocumentSpecification($contentType); $feedDocument = $feedsApi->createFeedDocument($createFeedDoc); $feedDocument = json_decode($feedDocument, true); $feedDocumentId = $feedDocument["feedDocumentId"]; $url = $feedDocument["url"]; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $url, CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 90, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_FOLLOWLOCATION => true, CURLOPT_CUSTOMREQUEST => 'PUT', CURLOPT_POSTFIELDS => $feedContent, CURLOPT_HTTPHEADER => [ 'Accept: application/json', 'Content-Type: ' . $contentType, ], ]); $response = curl_exec($curl); $error = curl_error($curl); $httpcode = (int)curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($httpcode >= 200 && $httpcode <= 299) { $MIDS = [$marketplace_ids]; $feedType = 'JSON_LISTINGS_FEED'; $createFeedSpec = new CreateFeedSpecification( marketplaceIds: $MIDS, inputFeedDocumentId: $feedDocumentId, feedType: $feedType, ); sleep(15); $result = $feedsApi->createFeed($createFeedSpec); $result = json_decode($result, true); $feed_submission_id = $result["feedId"]; } else { $this->appendOutputBuffer(' - Feed submission failed.<br />'); } } catch (Exception $e) { print_r($e->getMessage()); }
排查与解决步骤
确认SP-API配额类型与重置周期
Amazon SP-API配额分请求配额(按分钟/小时窗口重置)和并发配额(同时处理请求数上限)。登录Seller Central的SP-API开发者控制台,查看Feeds API的剩余配额与重置时间,确认是否真的超出配额,或是对配额计算逻辑理解有误。添加请求幂等性控制
固定sleep(15)无法避免网络延迟导致的重复请求,这类请求会额外消耗配额:- 为每个Feed提交生成唯一
clientRequestToken,在CreateFeedSpecification中传入该参数,避免重复创建Feed; - 记录已成功生成的
feedId,跳过相同内容的重复提交。
- 为每个Feed提交生成唯一
优化请求频率与重试策略
- 替换固定
sleep为指数退避重试:首次失败等待1秒,第二次2秒,第三次4秒,最多重试5次,避免集中请求触发配额限制; - 读取响应头中的
x-amzn-RateLimit-Limit和x-amzn-RateLimit-Remaining字段,实时获取剩余配额,动态调整请求间隔。
- 替换固定
修复资源泄漏问题
代码中curl_exec后未调用curl_close($curl),可能导致连接泄漏间接增加请求计数,需添加该语句释放资源。排查第三方连接器配额共享问题
如果使用第三方SP-API连接器,确认是否存在同一应用配额被多个账号共享的情况,导致其他用户的请求消耗了你的配额。可直接使用官方SDK发起请求,排除连接器的影响。
内容的提问来源于stack exchange,提问作者user3797126
相关产品推荐
相关产品推荐

