xero api — Настройка Webhook Receiver с проверкой подписи

Мне нужно настроить страницу 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

4

Решение

Чтобы сопоставить отправленные данные с проверочным хешем в заголовке, вам нужно сделать следующее:

  1. Получить полезную нагрузку:
    $payload = file_get_contents("php://input");
  2. Сгенерируйте хеш, используя полезную нагрузку и ваш ключ webhook:
    $yourHash = base64_encode(hash_hmac('sha256', $payload, $yourWebhookKey));
  3. Проверьте ваш хэш по сравнению с указанным в заголовке:
    if ($yourHash === $_SERVER['x-xero-signature']) {}

Вам придется проверить $_SERVER массив для правильного ключа, если это не работает напрямую; это, вероятно, все в верхнем регистре для начала.

Редактировать: Как отмечено в OP, правильная переменная $_SERVER['HTTP_X_XERO_SIGNATURE']

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]