我在网上找到了,我正在尝试重新创建他们在官方API文档中的签名here . 但是,我没有生成相同的签名 .
他们声明要签名的字符串如下:
GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=I
temLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReview
s&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&
Version=2009-01-06
它声明“使用上面的字符串使用我们的”虚拟“秘密访问密钥:1234567890,使用SHA256哈希算法计算符合RFC 2104的HMAC . ”
我使用以下代码执行此操作:
$private_key = "1234567890";
$string_to_sign = "GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&ItemId=0679722769&Operation=I
temLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReview
s&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&
Version=2009-01-06";
$signature = base64_encode(hash_hmac("sha256",$string_to_sign, $private_key, True));
这产生以下签名:
LM5S6MrycUETu1p94QDnLurKIpwiqKnCxm3B73a0QiE=
亚马逊的签名是:
M/y0+EAFFGaUAp4bWv/WEuXYah99pVsxvqtAuC8YN7I=
我跟随了一些我通过谷歌发现的例子,他们似乎都以同样的方式做到这一点 . 但是,我无法达到亚马逊获得的相同签名,我无法弄清楚原因 .
任何帮助表示赞赏 .
2 回答
您真的在实际代码中拥有所有这些换行符吗?因为
I\ntemLookup
与ItemLookup
不同 . 那个GET URI应该是一个长字符串,而不是一个多行字符串 .请注意它在SAME系列上的全部内容
我刚刚烧掉了几个小时的生活,试图弄清楚为什么我的签名不是OP所提到的.1111847_s example . 我开始在第6步和第7步遇到麻烦 . 亚马逊说要在你的字符串前面添加以下三行(包括换行符):
在我的Windows 7平台上,这是我为这些步骤所做的事情:
然后,第8步也把我扔了,因为我使用的是样本的密钥:
而不是正确的键:
希望这些小错误不会烧掉任何其他人 .