MWS API 签名与 R 不匹配



我正在尝试使用 GetMatchingProductForId 操作从 Amazon MWS API 获取数据。 当我使用亚马逊MWS暂存器时,它工作得很好。

我现在正在尝试复制在 HTTP POST 请求中发送的 URL,但收到签名错误消息。 我需要了解 url 请求应该如何构建。

以下是亚马逊MWS暂存器中请求的详细信息,我匿名了私人标识符,但这是我唯一更改的内容:

HTTP帖子

POST /Products/2011-10-01?AWSAccessKeyId=ANONYMIZED
&Action=GetMatchingProductForId
&SellerId=ANONYMIZED
&SignatureVersion=2
&Timestamp=2018-09-28T05%3A45%3A43Z
&Version=2011-10-01
&Signature=ANONYMIZED
&SignatureMethod=HmacSHA256
&MarketplaceId=A13V1IB3VIYZZH
&IdType=EAN
&IdList.Id.1=9781933988665 HTTP/1.1
Host: mws.amazonservices.fr
x-amazon-user-agent: AmazonJavascriptScratchpad/1.0 (Language=Javascript)
Content-Type: text/xml

要签名的字符串

POST
mws.amazonservices.fr
/Products/2011-10-01
AWSAccessKeyId=ANONYMIZED&Action=GetMatchingProductForId&IdList.Id.1=9781933988665&IdType=EAN&MarketplaceId=A13V1IB3VIYZZH&SellerId=ANONYMIZED&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2018-09-28T05%3A45%3A43Z&Version=2011-10-01

=======

现在我的问题是,(让我们假设我的签名被正确创建(,从 HTTP POST,请求应该是什么样子? 这是我的尝试:

https://mws.amazonservices.fr/Products/2011-10-01?AWSAccessKeyId=ANONYMIZED&Action=GetMatchingProductForId&SellerId=ANONYMIZED&SignatureVersion=2&Timestamp=2018-09-28T05%3A52%3A33Z&Version=2011-10-01&Signature=ANONYMIZED&SignatureMethod=HmacSHA256&MarketplaceId=A13V1IB3VIYZZH&IdType=EAN&IdList.Id.1=9781933988665

但是暂存器中的""转义字符呢? 最后的'HTTP/1.1'呢,我是否也应该包括它?

感谢您的帮助。

我没有 MWS 帐户,所以我无法测试以下内容,但这是您可以做到的一种方法:

# set this to your python2 binary; you'll need to do
#   pip2 install boto
# from a command-line before using this code
Sys.setenv("RETICULATE_PYTHON"="/usr/bin/python2.7") 
library(reticulate)
boto_mws_connection <- import("boto.mws.connection")
con <- boto_mws_connection$MWSConnection(
aws_access_key_id = ACCESS_KEY
aws_secret_access_key = AWS_SECRET
Merchant = MERCHANT_ID
)
con$get_matching_product_for_id(
MarketplaceId = "A13V1IB3VIYZZH",
IdType = "EAN",
IdList = c("9781933988665")
)

HTTP/1.1通常由您的 http 客户端库创建。我不熟悉R,但我用谷歌搜索,似乎有一个用于R的CURL包.CURL是包括PHP在内的许多语言的标准http库。我通过 curl 发送 XML 提要的 PHP 代码如下所示:

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, 'https://mws.amazonservices.fr/Products/2011-10-01?.....your data and signature here...');
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $xmlcontent);
curl_setopt($ch,CURLOPT_HTTPHEADER, array(
"Content-Type: text/xml",
"Content-MD5: ".base64_encode(md5($xmlcontent,true)),
"x-amazon-user-agent: TestScript/0.01")
);
$result = curl_exec($ch);
curl_close($ch);

通过查看此内容,在我看来,这应该很容易转换为 CURL 的 R 接口。

相关内容

最新更新