Я построил следующую строку запроса для поиска продуктов Amazon. Я просмотрел несколько ресурсов и определил все необходимое для вычисления подписи запроса.
Вот строка, которая вычисляет подпись ha sh:
$str="
GET\n
webservices.amazon.com\n
/onca/xml\n
AWSAccessKeyId=accesskey&AssociateTag=all&SearchIndex=All&ItemId=0679722769&Operation=ItemLookup&ResponseGroup=Large&Service=AWSECommerceService&Timestamp=2020-01-08T12%3A00%3A00Z&Version=2013-08-01";
$secret='secret';
$sig = hash_hmac('sha256',$str,$secret);
$sig=urlencode($sig);
Вот окончательный URL скомпилировано с использованием хешированной строки sha256
$url="http://webservices.amazon.com/onca/xml?Service=AWSECommerceService&Operation=ItemLookup&ResponseGroup=Large&SearchIndex=All&IdType=UPC&ItemId=635753490879&AWSAccessKeyId=accesskey&AssociateTag=all&Timestamp=2020-01-08T00%3A00%3A00Z&Signature=$sig";
И вот результат API:
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.
Как я уже говорил, я провел некоторые исследования и не уверен, что здесь не так
Мои разрешения группы IAM:
AmazonAPIGatewayInvokeFullAccess
и
AdministratorAccess
ОБНОВЛЕНИЕ
Он заявил, что мне нужно конвертировать в двоичный файл, поэтому я добавил этот вызов функции в $str
. Я думаю, что в этом заключается ошибка, потому что я получаю пример функционала без двоичного преобразования:
function strigToBinary($string)
{
$characters = str_split($string);
$binary = [];
foreach ($characters as $character) {
$data = unpack('H*', $character);
$binary[] = base_convert($data[1], 16, 2);
}
return implode(' ', $binary);
}
$str = strigToBinary($str)