【问题标题】:Why am I getting the wrong signature for the Amazon Product Advertising API?为什么我收到错误的亚马逊产品广告 API 签名?
【发布时间】:2012-03-15 12:54:08
【问题描述】:

我严格按照 API 文档上的说明进行操作,经过一番挫折后,我终于直接从他们在 http://docs.amazonwebservices.com/AWSECommerceService/2011-08-01/DG/rest-signature.html 上的示例中整理了一些内容

我已经在几台机器上尝试了这个 python 脚本,并且在所有机器上都得到了相同的结果。

import hmac
from base64 import b64encode
from hashlib import sha256

secret_key = '1234567890'

to_sign = """GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=AKIAI44QH8DHBEXAMPLE&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06"""

print b64encode(hmac.new(secret_key, to_sign, sha256).digest())

说明说使用此请求和此密钥的签名是Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=,但我得到O6UTkH+m4zAQUvB+WXUZJeA8bZcKAdkc4crKgHtbc6s=

(在任何人说什么之前:示例页面显示以 65 个字符包装的请求;我已经尝试过了。这没有提供解决方案,并且没有在签名创建说明中说明。)


编辑:我找到了答案,见下文。

【问题讨论】:

标签: python hmac amazon-product-api


【解决方案1】:

好吧,看看那个...文档错了。

我偶然发现了这个问题的旧(几乎)重复:Calculating a SHA hash with a string + secret key in python

在示例请求页面中,AWSAccessKeyId 的值似乎从 00000000000000000000 更改为 AKIAI44QH8DHBEXAMPLE

在脚本中更新它会打印出预期的密钥,Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=

import hmac
from base64 import b64encode
from hashlib import sha256

secret_key = '1234567890'

to_sign = """GET
webservices.amazon.com
/onca/xml
AWSAccessKeyId=00000000000000000000&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-01-01T12%3A00%3A00Z&Version=2009-01-06"""

print b64encode(hmac.new(secret_key, to_sign, sha256).digest())

【讨论】:

    【解决方案2】:

    您可以查看 Bottlenose 库,https://github.com/dlo/bottlenose,我发现它使处理 AWS 产品 API 更加友好。

    【讨论】:

    • 伙计,我今天到处寻找 API 的包装器 - 最后我只写了自己的,唯一的问题是签名。直到我在示例页面上发现神秘的不一致更改,我认为我的签名创建不正确。原来我真正的问题是我忘记了时间戳末尾的“Z”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多