使用此代码(我已经删除了ID和密钥以解决安全问题-它们输入正确)。我不确定出了什么问题。请帮帮忙。
我正在使用R并尝试调用RequestReport接口(http://docs.developer.amazonservices.com/en_US/reports/Reports_RequestReport.html)。因此,请仅在R脚本中建议解决方案。
base.html.string <- "https://mws.amazonservices.com/Reports/2009-01-01?"
SellerID <- 'xxxxxxxx'
MarketplaceID <- 'xxxxxxxxxxxxxx'
AWSAccessKeyId <- 'xxxxxxxxxxxxxxxx'
AWSsecretkey <- 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
ActionType <- 'RequestReport'
version.request <- '2009-01-01'
ReportType <- '_GET_FLAT_FILE_ACTIONABLE_ORDER_DATA_'
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/\n',
'AWSAccessKeyId=', AWSAccessKeyId,
'&Action=', ActionType,
'&Merchant=', SellerID,
'&ReportType=', ReportType,
'&SignatureMethod=HmacSHA256',
'&SignatureVersion=2',
'&Timestamp=', gsub('%2E','.',gsub('%2D', '-', curlEscape(Timestamp))),
'&Version=', version.request,
sep = '')
Signature <- curlEscape(base64(hmac(enc2utf8(AWSsecretkey), enc2utf8(str), algo = 'sha256', serialize = FALSE, raw = TRUE)))
AmazonURL <- paste(base.html.string,
'AWSAccessKeyId=', AWSAccessKeyId,
'&Action=', ActionType,
'&Merchant=', SellerID,
'&SignatureVersion=2',
'&Timestamp=', gsub('%2E','.',gsub('%2D', '-', curlEscape(Timestamp))),
'&Version=', version.request,
'&Signature=', Signature,
'&SignatureMethod=HmacSHA256',
'&ReportType=', ReportType,
sep = '')
AmazonResult <- getURL(AmazonURL)
AmazonResult
这是我得到的回应
<?xml version=\"1.0\"?>\n<ErrorResponse xmlns=\"http://mws.amazonaws.com/doc/2009-01-01/\">\n <Error>\n <Type>Sender</Type>\n <Code>SignatureDoesNotMatch</Code>\n <Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message>\n </Error>\n <RequestID>fa1f2abf-3acf-435b-b98d-7377e778f53c</RequestID>\n</ErrorResponse>\n
发布于 2020-12-23 17:26:29
解决了它。菜鸟的错误。我用getURL(网址)代替了POST(网址)。
其次,base.html.string是"https://mws.amazonservices.com/?“而不是"https://mws.amazonservices.com/Reports/2009-01-01?”
https://stackoverflow.com/questions/65413774
复制