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

调用亚马逊getOrders API传递NextToken提示无法解码报错如何解决

亚马逊getOrders API NextToken解码错误排查方案

核心报错原因

该错误提示说明亚马逊服务端无法解析你传入的NextToken参数,常见问题如下:

  • 双重编码:手动编码参数后被框架二次编码,导致Token变形
  • Token本身无效:原始Token被误拼接、截断、混入多余空格
  • 编码规则不兼容:框架编码规则不符合亚马逊SP-API要求

具体解决步骤

1. 取消手动编码NextToken

UriComponentsBuilder的queryParam方法会自动对传入的参数值做URL编码,提前调用UriUtils.encode会导致参数被二次编码。比如原始Token中的空格被你手动编码为%20后,框架会再次将%编码为%25,最终传输的%2520在服务端仅解码一次得到%20,和原始Token的空格不符,自然无法解析。

2. 校验NextToken原始值合法性

你提供的NextToken示例存在明显的重复拼接问题:整段Token在末尾HGQ==后又重复了一次完全相同的内容,属于无效值。请先确认你从上游接口获取的原始NextToken是否被错误拼接、截断,或者混入了多余的首尾空格,必须保证传入的原始NextToken和亚马逊返回的内容完全一致。

3. 对齐编码规则为RFC 3986

亚马逊SP-API要求参数编码遵循RFC 3986规范,需要显式配置UriComponentsBuilder的编码规则,避免默认规则不兼容。修正后的代码如下:

String uri = UriComponentsBuilder.fromHttpUrl(applicationConfig.getBaseURL() + applicationConfig.getOrdersApi())
        .queryParam("CreatedAfter", "2017-01-20T19:49:35Z")
        .queryParam("MarketplaceIds", "XXXXXX")
        .queryParam("MaxResultsPerPage", request.getBatchSize())
        // 直接传入原始NextToken,不需要提前编码
        .queryParam("NextToken", nextTokenValue)
        // 显式指定UTF-8编码,遵循RFC3986规范
        .encode(StandardCharsets.UTF_8)
        .build()
        .toUri()
        .toString();

restTemplate.setRequestFactory(clientHttpRequestFactory(tokenResponse));
restTemplate.exchange(uri, HttpMethod.GET, entity, AmazonSellingOrders.class);

4. 兜底校验

如果修改后仍报错,可以打印最终生成的完整请求URL,取出其中NextToken的参数值做一次URL解码,确认解码后的内容和你拿到的原始NextToken完全一致,如果不一致说明代码中还有其他额外的编码逻辑需要排查。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:04