我绝望地试图打电话给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:
构建了此查询所以我的最终网址字符串如下所示:
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返回错误,该错误明确指出签名无效。所以,再次,我认为网址必须是好的。但是,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>
访问被拒绝。我不明白为什么。我已经花了好几个小时试图找出问题所在。任何人都可以帮助我吗?
答案 0 :(得分:7)
问题的原因是我打电话给美国网址https://mws.amazonservices.com
而不是欧洲网址https://mws-eu.amazonservices.com
。如果亚马逊的回复提供更多关于错误的背景而不仅仅是Access denied