【问题标题】:Using R to make Amazon MWS API calls使用 R 进行亚马逊 MWS API 调用
【发布时间】:2016-04-27 16:16:55
【问题描述】:

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

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

这个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 并确保我的签名字符串匹配。

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

任何帮助将不胜感激!

【问题讨论】:

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


    【解决方案1】:

    阅读post 后,我发现了我的问题。我从字面上理解了亚马逊的例子,并使用了 POST 而不是 GET。我还对时间戳计算进行了不必要的调整,我也修复了它。希望这对以后的人有所帮助。

    【讨论】:

    • 嗨,你能更详细地解释一下你的方法吗?我的代码出现“请求时间戳太远”错误(POST 更改为 GET)
    猜你喜欢
    • 1970-01-01
    • 2014-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 2012-12-06
    • 1970-01-01
    相关资源
    最近更新 更多