AWS Invalid Signature уже пытались несколько примеров ресурсов - PullRequest
0 голосов
/ 07 января 2020

Я построил следующую строку запроса для поиска продуктов 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)
...