You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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());
}

排查与解决步骤

  1. 确认SP-API配额类型与重置周期
    Amazon SP-API配额分请求配额(按分钟/小时窗口重置)和并发配额(同时处理请求数上限)。登录Seller Central的SP-API开发者控制台,查看Feeds API的剩余配额与重置时间,确认是否真的超出配额,或是对配额计算逻辑理解有误。

  2. 添加请求幂等性控制
    固定sleep(15)无法避免网络延迟导致的重复请求,这类请求会额外消耗配额:

    • 为每个Feed提交生成唯一clientRequestToken,在CreateFeedSpecification中传入该参数,避免重复创建Feed;
    • 记录已成功生成的feedId,跳过相同内容的重复提交。
  3. 优化请求频率与重试策略

    • 替换固定sleep为指数退避重试:首次失败等待1秒,第二次2秒,第三次4秒,最多重试5次,避免集中请求触发配额限制;
    • 读取响应头中的x-amzn-RateLimit-Limit和x-amzn-RateLimit-Remaining字段,实时获取剩余配额,动态调整请求间隔。
  4. 修复资源泄漏问题
    代码中curl_exec后未调用curl_close($curl),可能导致连接泄漏间接增加请求计数,需添加该语句释放资源。

  5. 排查第三方连接器配额共享问题
    如果使用第三方SP-API连接器,确认是否存在同一应用配额被多个账号共享的情况,导致其他用户的请求消耗了你的配额。可直接使用官方SDK发起请求,排除连接器的影响。

内容的提问来源于stack exchange,提问作者user3797126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 17:35:17