Я работаю с хуками gocardless, и я застрял на проверке подписи hmac с помощью среды песочницы.
Итак, я сгенерировал тест веб-перехватчика в песочнице, и он выдает мне тело запроса и заголовки в том виде, в каком он был отправлен.
Итак, насколько я понимаю, я должен получить тело запроса и сгенерировать хеш с секретным ключом и сравнить его с хешем заголовка подписи веб-перехватчика (звучит не очень сложно).
Итак, я использую почтальона, чтобы воспроизвести его в своей локальной среде, прикрепив одинаковые заголовки и одно и то же тело, но подпись никогда не совпадет.
Вот что я пробовал:
$signature = hash_hmac('sha256',$request->getContent(), 'secret');
Обратите внимание, что я использую фреймворк laravel, поэтому я сначала подумал, что, возможно, фреймворк управляет внутренним запросом, поэтому я попробовал это:
$request_data = file_get_contents('php://input');
$signature = hash_hmac('sha256',$request_data, 'secret');
Но все еще не совпадает, я заметил много новых строк, и, возможно, это могло изменить результаты, поэтому я очистил его ...
$request_data = str_replace(array('.', ' ', "\n", "\t", "\r"), '', $request_data);
Но все еще не совпадает, а также я попытался передать данные тела в utf8 и заставить hmac возвращать сырые и кодировать его в base64 ... но безуспешно.
Так что тут может быть не так? Может быть, подписи не работают в среде песочницы? Кто-нибудь имел дело с этим?
Заранее спасибо!