Почему я получаю неправильную подпись для API рекламы продуктов Amazon? - PullRequest
2 голосов
/ 25 февраля 2012

Я точно следую указаниям в документации API, и после некоторого разочарования я наконец собрал что-то непосредственно из их примеров на http://docs.amazonwebservices.com/AWSECommerceService/2011-08-01/DG/rest-signature.html

Я пробовал этот скрипт на нескольких машинах иполучили одинаковый результат на всех них.

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 символов; я уже пробовал это. Это не дает решения и не указано в инструкциях по созданию подписи.)


РЕДАКТИРОВАТЬ: Я нашел ответ, см. Ниже.

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Хорошо, посмотрите на это ... Документы были неверны.

Я наткнулся на старый (почти) дубликат этого вопроса: Вычисление хэша SHA со строкой + секретным ключом в 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())
1 голос
/ 25 февраля 2012

Вы можете проверить библиотеку Bottlenose, https://github.com/dlo/bottlenose, Я обнаружил, что она делает работу с API-интерфейсом продуктов AWS гораздо более удобной.

...