ios - 亚马逊 MWS 产品 API 返回 401 错误 "Access denied"

标签 ios objective-c http amazon-web-services http-status-code-401

我绝望地坚持尝试调用 Amazon MWS Products API。特别是我正在尝试请求 this function

它需要构建一个带有签名的非常复杂的请求:

POST /Products/2011-10-01 HTTP/1.1
Content-Type: x-www-form-urlencoded
Host: mws.amazonservices.com
User-Agent: <Your User Agent Header>

AWSAccessKeyId=AKIAEXAMPLEFWR4TJ7ZQ
&Action=ListMatchingProducts
&MWSAuthToken=amzn.mws.4ea38b7b-f563-7709-4bae-87aeaEXAMPLE
&MarketplaceId=ATVPDKIKX0DER
&Query=0439708184
&SellerId=A1IMEXAMPLEWRC
&SignatureMethod=HmacSHA256
&SignatureVersion=2
&Timestamp=2012-12-12T22%3A23%3A50Z
&Version=2011-10-01
&Signature=V%2BEXAMPLERT%2Baj%2Fxwqo7y3PIifMFHeqFlNYW0EXAMPLEA%3D

我在 little library 的帮助下构建了这个查询:

所以我的最终 url 字符串如下所示:

https://mws.amazonservices.com/Products/2011-10-01?AWSAccessKeyId=<MY_ACCESS_KEY>&Action=ListMatchingProducts&MarketplaceId=A1PA6795UKMFR9&Query=0439708184&SellerId=<SELLER_ID>&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2016-04-19T16%3A50%3A13Z&Version=2011-10-01&Signature=mZt3OhM14gwLdsQ%2Bhxz5UFMzr7m2U36DvZ7RG3dcsTI%3D

并且看起来 url 字符串构建正确。我认为是这样,因为如果参数丢失或不正确,API 会返回 400 错误,并说明该参数无效。这同样适用于签名。如果签名不正确,API 将返回错误,明确指出签名无效。所以,我再次认为 url 一定没问题。然而,API 返回 401 错误和一个如下所示的 html 页面:

<?xml version="1.0"?>
<ErrorResponse xmlns="http://mws.amazonservices.com/schema/Products/2011-10-01">
<Error>
<Type>Sender</Type>
<Code>AccessDenied</Code>
<Message>Access denied</Message>
</Error>
<RequestID>7b12e3c8-7b1a-4b6e-b7ba-15ec8c4e0968</RequestID>
</ErrorResponse>

访问被拒绝。我不知道为什么。我已经花了几个小时试图找出问题所在。谁能帮帮我?

最佳答案

问题的原因是我调用了美国 url https://mws.amazonservices.com 而不是欧洲 url https://mws-eu.amazonservices.com。如果亚马逊响应提供更多关于错误的上下文而不是简单的 Access denied

那就太好了

关于ios - 亚马逊 MWS 产品 API 返回 401 错误 "Access denied",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36725048/

相关文章:

javascript - 响应.重定向("")或窗口.位置=""

ios - Swift - 如何将点击手势添加到 UIViews 数组?

ios - 为什么我在使用它之前不必先实例化 NSCharacterSet 对象?

Objective-C 重新定义类

objective-c - -didDeselectRowAtIndexPath 将单元格设置为手动选择后未调用

java - 适当的 json 到后端 post 调用

ios - CAShapeLayer 不可见

ios - Audiokit 4.5.2 - 无法通过终端中的 cocoa pod 安装

ios - 如何在按下按钮时播放音频并在手指离开同一按钮时立即停止?

ruby - 为什么 Ruby 中的 curl 比命令行 curl 慢?