Мне нужно настроить страницу PHP для получения Webhooks — я делал много из них в прошлом, так что это не проблема, но API, с которым я работаю для этого проекта, требует, чтобы мой webhook проверял подпись, указанную в заголовке ,
Как часть запроса на проверку он отправит следующее:
HEADER:
"x-xero-signature" : HASH_VALUE
PAYLOAD:
{
"events": [],
"lastEventSequence": 0,
"firstEventSequence": 0,
"entropy": "S0m3r4N0m3t3xt"}
Я создал ключ Webhook (например, «ABC123»), и как часть запроса на проверку этого Webhook я должен убедиться, что полезная нагрузка, которая хэшируется с использованием HMACSHA256 с вашим ключом webhook и в кодировке base64, должна соответствовать подписи в заголовке. Это правильно подписанная полезная нагрузка. Если подпись не соответствует хэшированной полезной нагрузке, это неправильно подписанная полезная нагрузка.
Чтобы получить подтверждение намерения получения, URL-адрес получателя должен ответить со статусом: 200 Ok для всех правильно подписанных полезных нагрузок и ответить со статусом: 401 Не авторизован для всех неправильно подписанных полезных нагрузок.
На данный момент я немного растерялся относительно того, как это сделать — подробности этой настройки можно найти здесь:
https://developer.xero.com/documentation/getting-started/webhooks
Чтобы сопоставить отправленные данные с проверочным хешем в заголовке, вам нужно сделать следующее:
$payload = file_get_contents("php://input");
$yourHash = base64_encode(hash_hmac('sha256', $payload, $yourWebhookKey));
if ($yourHash === $_SERVER['x-xero-signature']) {}
Вам придется проверить $_SERVER
массив для правильного ключа, если это не работает напрямую; это, вероятно, все в верхнем регистре для начала.
Редактировать: Как отмечено в OP, правильная переменная $_SERVER['HTTP_X_XERO_SIGNATURE']
Других решений пока нет …