Серверные уведомления
Уведомление от 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.