Я пишу приложение для iOS, которое использует Amazon API для отображения списка продуктов в категории.
Проблема, с которой я столкнулся, заключается в подписании API. Я использую рекламный API в Индии и использую блокнот для проверки вызова API.
Для беззнакового URL-адреса, созданного Amazon Scratch, у меня есть:
http://webservices.amazon.in/onca/xml?Service=AWSECommerceService&Operation=BrowseNodeLookup&SubscriptionId=IAMHIDINGTHISINFO&AssociateTag=HIDINGTHIS-XX&BrowseNodeId=1350388031&ResponseGroup=BrowseNodeInfo
Для подписанного у меня есть:
http://webservices.amazon.in/onca/xml?AWSAccessKeyId= IAMHIDINGTHISINFO&AssociateTag=HIDINGTHIS-XX&BrowseNodeId=1350388031&Operation=BrowseNodeLookup&ResponseGroup=BrowseNodeInfo&Service=AWSECommerceService&Timestamp=2016-11-21T16%3A06%3A05.000Z&Signature=LETSSAYITGENERATEDTHIS
Следуя инструкциям в документации Amazon по подписанию, я получаю окончательную каноническую форму как:
GET webservices.amazon.co.in/onca/xml AWSAccessKeyId= IAMHIDINGTHISINFO&AssociateTag=HIDINGTHIS-XX&BrowseNodeId=1350388031&Operation=BrowseNodeLookup&ResponseGroup=BrowseNodeInfo&Service=AWSECommerceService&Timestamp=2016-11-20T22%3A55%3A41.000Z
Которая ТОЧНО следует их шагам. Я добавляю GET\nwebservices.amazon.co.in\n/onca/xml\n
к порядку байтов остальных ключей, а затем использую HMAC SHA-256 для получения подписи. Несмотря на это, я получаю неправильную подпись. Я знаю, что алгоритм хеширования, который я использую, правильный, поскольку, когда я хеширую пример, который они приводят в документации, он генерирует точный хеш (я использую AWSSignatureSignerUtility из их iOS SDK).
Может кто-нибудь сказать мне, не следует ли мне добавлять GET\nwebservices.amazon.co.in\n/onca/xml\n
или должно быть что-то еще?