使用R进行亚马逊MWS API调用

时间:2016-04-27 16:16:55

标签: r amazon-web-services amazon-mws

我正在使用R来调用亚马逊MWS API并收到以下错误:

  

我们计算的请求签名与您的签名不符   提供。检查您的AWS Secret Access Key和签名方法。请教   服务文档了解详情。

这个post帮助了我很多产品广告API。但是,我似乎无法让它在MWS方面发挥作用。

这是我的代码:

library(digest)
library(RCurl)

base.html.string <- "https://mws.amazonservices.com/Products/2011-10-01?"

SellerID <- 'A2UZXXXXXXXXXX'
MWSAuthToken <- 'ATVPXXXXXXXXX'
MarketplaceID <- 'ATVPXXXXXXXXX'
AWSAccessKeyId <- 'AKIAXXXXXXXXXXXXXXXX'
AWSsecretkey <- 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' 
ActionType <- 'GetMyPriceForASIN'
version.request = '2011-10-01'
ASINList.ASIN.1 <- 'B00XXXXXXX'

pb.txt <- Sys.time()

pb.date <- as.POSIXct(pb.txt, tz = Sys.timezone)

Timestamp = strtrim(format(pb.date, tz = "GMT", usetz = FALSE, "%Y-%m-%dT%H:%M:%SZ"), 24)

str = paste('POST\nmws.amazonservices.com\n/Products/2011-10-01\n',
            'ASINList.ASIN.1=', ASINList.ASIN.1,
            '&AWSAccessKeyId=', AWSAccessKeyId,
            '&Action=', ActionType,
            '&MWSAuthToken=', MWSAuthToken,
            '&MarketplaceId=', MarketplaceID,
            '&SellerId=', SellerID,
            '&SignatureMethod=HmacSHA256',
            '&SignatureVersion=2',
            '&Timestamp=', gsub('%2E','.',gsub('%2D', '-', curlEscape(Timestamp))),
            '&Version=', version.request,
            sep = '')

## signature test
Signature = curlEscape(base64(hmac(enc2utf8(AWSsecretkey), enc2utf8(str), algo = 'sha256', serialize = FALSE,  raw = TRUE)))


AmazonURL <- paste(base.html.string,
                   'ASINList.ASIN.1=', ASINList.ASIN.1,
                   '&AWSAccessKeyId=', AWSAccessKeyId,
                   '&Action=', ActionType,
                   '&MWSAuthToken=', MWSAuthToken,
                   '&MarketplaceId=', MarketplaceID,
                   '&SellerId=', SellerID,
                   '&SignatureMethod=HmacSHA256',
                   '&SignatureVersion=2',
                   '&Timestamp=', Timestamp,
                   '&Version=', version.request,
                   '&Signature=', Signature,
                   sep = '')

AmazonResult <- getURL(AmazonURL)

我正在使用亚马逊MWS Scratchpad,并确保我的字符串签署匹配。

我的密钥确实包含+,但我认为编码可以解决这个问题。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

我在阅读post之后想出了我的问题。我从字面上看了亚马逊的例子并使用了POST而不是GET。我也用我的时间戳计算进行了不必要的调整,我也修了一下。希望这有助于有人在路上。