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

我正在使用R来拨打亚马逊MWS API并获取以下错误:

我们计算的请求签名与您提供的签名不匹配。 检查您的AWS秘密访问密钥和签名方法。 详细信息请参阅服务文档。

这篇文章帮助我了解了产品广告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('POSTnmws.amazonservices.comn/Products/2011-10-01n',
            '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,并确保我的字符串签名匹配。

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

任何帮助,将不胜感激!


阅读这篇文章后,我发现了自己的问题。 我从字面上理解了Amazon的例子,并使用POST而不是GET。 我也用我的时间戳计算进行了不必要的调整,我也修正了这个问题。 希望这可以帮助那些在路上的人。

链接地址: http://www.djcxy.com/p/39015.html

上一篇: Using R to make Amazon MWS API calls

下一篇: Amazon MWS API returning SignatureDoesNotMatch