Итак, я пытаюсь обратиться к API-интерфейсу Amazon, но не могу понять, как заставить подпись работать. Я следовал за другим переполнением стека, который можно найти здесь: How can I create a signature for AWS in Javascript?, но по-прежнему не может выполнить мой запрос. Вот запрос, который я отправляю (в настоящее время тестируется через почтальон).Выполнение запросов к веб-сервисам Amazon API REST, не может получить запрос Подпись к работе
http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=[MY_ACCESSKEY]&Operation=ItemSearch&Keywords=the%20hunger%20games&SearchIndex=Books &Timestamp=2016-09-09T12:00:00Z&Signature=9RTSas234dfRTs3R%ErA8%
Я сделал фальшивый подпись, подобную той, что я получаю от этой функции:
let service = "AWSECommerceService";
let timestamp = "2016-09-09T12:00:00Z";
let operation = "ItemSearch";
let secret = "MY_AMAZONSECRET";
let signature = CryptoJS.HmacSHA1(service + operation + timestamp, secret).toString(CryptoJS.enc.Base64);
console.log(signature);
Результат, который входит в консоль выглядит следующим образом: 9RTSas234dfRTs3R+ErA8=
От что я читал здесь http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html, я думал, что вам нужно заменить знаки «+» и «=» на «%». Когда я оставляю знаки + и = как есть, я получаю следующий ответ от AWS:
<?xml version="1.0"?>
<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2005-10-05/">
<Error>
<Code>SignatureDoesNotMatch</Code>
<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>
</Error>
<RequestId>{MY_REQUESTID}</RequestId>
</ItemSearchErrorResponse>
Но когда я их меняю в% 's, я получаю такой ответ:
<?xml version="1.0"?>
<ItemSearchErrorResponse xmlns="http://ecs.amazonaws.com/doc/2005-10-05/">
<Error>
<Code>MissingParameter</Code>
<Message>The request must contain the parameter Signature.</Message>
</Error>
<RequestId>{MY_REQUESTID}</RequestId>
</ItemSearchErrorResponse>
Несмотря на то, параметр Signature существует в запросе. Любые мысли о том, как я могу это исправить. Я использую крипто-JS для создания подписи, который можно найти здесь: https://www.npmjs.com/package/crypto-js
Не считайте ответ MTurk, который вы нашли - это, по-видимому, совершенно другой алгоритм подписи, который здесь не имеет отношения. Прочтите [страницу, с которой вы связались] (http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html) снова. Выполните эти шаги точно. Ваш код не выполняет то, что описано здесь. –