Серверные уведомления
Уведомление от QIWI — входящий POST-запрос с информацией о событии. Тело запроса содержит JSON-сериализованные данные платежа/счета (кодировка UTF-8).
Уведомления отправляются с IP адреса 185.22.67.220
Протокол поддерживает следующие типы уведомлений о событиях API:
PAYMENT
— отправляются при совершении операций платежа;CAPTURE
— отправляются при подтверждении платежа;REFUND
— отправляются при возврате платежа;
Не установлено единого порядка отправки уведомлений разного типа в ходе выполнения одной и той же операции. Порядок может отличаться для разных операций.
Адрес вашего сервера для обработки уведомлений указывается при настройке по заявке на подключения. При необходимости изменения, обратитесь в Службу поддержки.
URL для уведомлений должен начинаться с https, так как уведомления отправляются по протоколу HTTPS на порт 443. URL должен быть доступен из Интернета.
Сертификат сайта должен быть выпущен доверенным центром сертификации (например Comodo, Verisign, Thawte и т.п.).
Если уведомление об операции не поступило вам в течение 10 минут после совершения операции, необходимо запросить статус операции запросом статуса счета.
Уведомление считается успешно доставленным, если ваш сервер ответил HTTP кодом состояния 200 OK
. До этого
момента система будет пытаться доставить уведомление через увеличивающиеся интервалы времени в течение суток с момента операции.
Если по какой-либо причине ваш сервер успешно обработал уведомление по транзакции, но не вернул 200 OK, то при повторной попытке доставки не нужно обрабатывать такую транзакцию как новую.
Авторизация уведомлений
В уведомлении присутствует цифровая подпись запроса, которую н еобходимо проверять на вашей стороне для исключения возможности подделки уведомления.
Вся ответственность за возможные финансовые потери, случившиеся вследствие отсутствия валидации подписи в нелегитимном уведомлении, лежит полностью на компании мерчанта.
Цифровая подпись уведомления помещается в HTTP-заголовок Signature
.
Для проверки подписи используется механизм проверки целостности HMAC с хэш-функцией SHA256 и ключом доступа к API.
Алгоритм проверки подписи:
- Объединить значения определенных параметров в одну строку с разделителем "|". Например:
parameters = {payment.paymentId}|{payment.createdDateTime}|{payment.amount.value}
Подпись считается для следующих полей уведомления:- тип
PAYMENT
:payment.paymentId|payment.createdDateTime|payment.amount.value
- тип
- Вычислить HMAC-хэш c алгоритмом хэширования SHA256:
hash = HMAС(SHA256, secret, parameters)
Где:secret
— ключ хеширования (UTF-8). Совпадает с ключом доступа к API.parameters
— строка из п.1.
- Сравнить значение подписи из HTTP-заголовка
Signature
уведомления с результатом п.2.