Flutter项目使用Amazon Product API遇InvalidSignature错误求助
解决Amazon Product API Scratchpad InvalidSignature错误的排查方向
1. 签名核心细节校验
- 确认Access Key ID和Secret Access Key完全匹配,复制时别带空格、换行符这类多余字符,哪怕一个空格都会导致签名失效。
- 检查请求时间戳:Scratchpad默认用当前时间,但如果本地时区和亚马逊服务器偏差太大,会触发签名过期。手动设置UTC格式时间戳,严格遵循
yyyy-MM-dd'T'HH:mm:ss'Z'格式。 - 验证参数编码:所有参数值必须按RFC 3986标准编码,比如空格要转成
%20而非+,&、=这类特殊字符必须转义。Scratchpad自动编码可能有遗漏,手动核对每个参数的编码结果。
2. Scratchpad自身问题排查
- 用无痕模式打开Scratchpad:浏览器缓存的旧凭证或参数可能干扰新请求,清空缓存后重新输入所有配置信息测试。
- 核对区域选择:确保Scratchpad选的区域(如US、EU)和你的AWS凭证所属区域完全一致,不同区域的签名算法逻辑有差异。
- 手动生成签名对比:用AWS CLI的
aws sign命令生成签名,和Scratchpad生成的签名比对。如果不一致,说明Scratchpad的签名逻辑存在问题。
3. 亚马逊账户配置核查
- 确认账户关联状态:Amazon Product API要求AWS账户和亚马逊卖家/开发者账户绑定,检查关联是否有效,有没有被平台限制。
- 检查IAM权限:确保你的IAM用户已被授予
ProductAdvertisingAPIFullAccess权限,或者自定义权限包含所有必要操作。 - 尝试全新IAM用户:如果旧凭证一直有问题,创建一个全新的IAM用户,仅分配Product API相关权限,再测试签名是否有效。
4. 请求结构正确性验证
- 确认请求方法:必须用
GET请求,Amazon Product API不支持POST请求用于签名验证。 - 核对端点URL:不同区域的端点不同,比如美国区是
webservices.amazon.com,欧盟区是webservices.amazon.co.uk,确保端点和所选区域匹配。 - 检查必填参数:
Service=AWSECommerceService、Operation(如ItemLookup)、Timestamp、SignatureVersion=2、SignatureMethod=HmacSHA256这些参数必须齐全,缺一个都会导致签名错误。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

