Уведомления¶
Общие сведения¶
Чтобы партнёр мог отслеживать состояние операций, BaaS использует уведомления — HTTPS POST-запросы, отправляемые на URL-адрес партнёра. Каждый запрос состоит из заголовков и тела.
Заголовок запроса QIWI-Signature
содержит цифровую подпись. Каждый раз при получении уведомления сервер партнёра должен:
- вычислить подпись (алгоритм вычисления см. в статье «Общие принципы и правила» → «Вычисление цифровой подписи»);
- сравнить полученный результат со значением из
QIWI-Signature
.
В случае расхождения уведомление следует игнорировать.
Тело запроса содержит строковое представление JSON-объекта с данными уведомления (data
). Набор данных зависит от типа уведомления.
При получении и обработке уведомления сервер партнёра должен вернуть HTTP-код в диапазоне от 200 до 299. Если сервер вернет код, не входящий в этот диапазон, BaaS будет повторять попытку отправить уведомление в течение определённого времени.
Уведомления могут приходить о состоянии как финансовой, так и нефинансовой операции. Пример успешного сценария получения уведомления изображён на диаграмме ниже. Запрос описан в документации History&Notifications API.
%%{init: {
"sequence" : {
"wrap":true,
"messageFontSize":14,
"noteFontSize":14,
"actorMargin":90 }}}%%
sequenceDiagram
participant B as BaaS
participant P as Партнёр
Note left of B: Клиент совершил перевод на банковскую карту / QIWI заблокировал карту клиента
B->>P: Уведомление о событии (QIWI-Signature, data)
P->>P: Вычисление подписи
P->>P: Сравнение с QIWI-Signature
Note over P: Результат вычисления равен значению из QIWI-Signature
P->>B: HTTP Status: 2xx
B->>B: Результат получения — успешный
Любая операция, о состоянии которой поступило уведомление, может быть совершена:
Набор параметров в уведомлении о состоянии операции из авторизованной зоны отличается от набора параметров в уведомлении о состоянии операции из неавторизованной зоны. Отличие можно увидеть на примере ниже.
{
"type": "PAYMENT",
"txnId": "46829337545338664347",
"txnType": "payment",
"fromClientId": "jloungozcz2298040076",
"toProviderId": "uid30",
"toProviderData": {
"fields": {
"account": "3788673608"
}
},
"transactionAmount": {
"value": 2.9,
"currency": "RUB"
},
"clientCommission": {
"value": 100.0,
"currency": "RUB"
},
"status": "SUCCESS",
"statusDetails": {},
"creationDateTime": "2020-09-24T10:42:18+03:00"
}
{
"type": "AUTHORIZATION",
"eventDateTime": "2020-08-12T13:14:23.706284+03:00",
"txnId": "1436d6fb-17ac-6836-3252-779b702cca11",
"txnType": "PURCHASE_E_POS",
"actionId": "879e12ca-476a-4726-a5fb-e3c4546e47f1",
"actionType": "HOLD",
"actionStatus": "SUCCESS",
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100074268301",
"clientId": "1",
"transactionAmount": {
"currency": "RUB",
"value": "7.28"
},
"clientCommission": {
"currency": "RUB",
"value": "0.00"
},
"originTransactionAmount": {
"currency": "RUB",
"value": "3.08"
},
"retrievalReferenceNumber": "008141362354",
"merchantId": "498750000011107",
"merchantType": "5499",
"terminalId": "99999999",
"acquirerId": "498750",
"correlationId": "879e12ca-476a-4726-a5fb-e3c4546e47f1",
"authorizationDateTime": "2020-08-12T13:14:16+03:00",
"cardAcceptorNameAndLocation": "MIKROMARKET>MOSCOW"
}
}
URL-адрес получения уведомлений задаётся для определённого productId
. Использование нескольких адресов в рамках одного productId
недоступно.
Для настройки уведомлений обратитесь к вашему курирующему менеджеру.
Финансовые операции¶
Финансовыми являются операции, которые приводят к движению денежных средств. Примеры финансовых операций — пополнение с банковской карты, перевод на банковскую карту.
Операции из авторизованной зоны¶
Описание авторизованной зоны см. в статье «Термины и бизнес-сущности». Финансовая операция из такой зоны является операцией домена PAYMENTS
.
Тело уведомления о состоянии финансовой операции из авторизованной зоны содержит:
- обязательные параметры — присутствуют для любого типа уведомления;
- опциональные параметры — присутствуют для конкретного типа уведомления.
{
//Обязательные параметры
"type": "XXX",
"txnId": "46829337545338664347",
"txnType": "xxx",
"transactionAmount": {
"value": 2.9,
"currency": "RUB"
},
"clientCommission": {
"value": 100.0,
"currency": "RUB"
},
"status": "SUCCESS",
"statusDetails": {},
"creationDateTime": "2020-09-24T10:42:18+03:00",
//Опциональные параметры
"fromClientId": "jloungozcz2298040076"
}
Набор опциональных параметров зависит от типа уведомления. Отличие можно увидеть ниже на примере двух разных типов уведомлений.
{
//Обязательные параметры любого уведомления о финансовой операции из авторизованной зоны
"type": "REPLENISHMENT_BY_WEBFORM",
"txnId": "56927813128178660527",
"txnType": "replenishment-by-webform",
"transactionAmount": {
"value": 2.9,
"currency": "RUB"
},
"clientCommission": {
"value": 100.0,
"currency": "RUB"
},
"status": "SUCCESS",
"statusDetails": {},
"creationDateTime": "2020-09-24T10:42:18+03:00",
//Опциональные параметры (параметры для уведомления типа "REPLENISHMENT_BY_WEBFORM")
"toClientId": "mismihtmdb6639011557"
}
{
//Обязательные параметры любого уведомления о финансовой операции из авторизованной зоны
"type": "WITHDRAWAL_TO_CARD",
"txnId": "46829337545338664347",
"txnType": "withdrawal-to-card",
"transactionAmount": {
"value": 2.9,
"currency": "RUB"
},
"clientCommission": {
"value": 100.0,
"currency": "RUB"
},
"status": "SUCCESS",
"statusDetails": {},
"creationDateTime": "2020-09-24T10:42:18+03:00",
//Опциональные параметры (параметры для уведомления типа "WITHDRAWAL_TO_CARD")
"fromClientId": "jloungozcz2298040076"
}
Уведомления формируются для определённого типа операции (пополнения с карты, перевода на карту и т.д.) и отправляются при присвоении операции одного из задокументированных статусов. Пример уведомления об успешно выполненном переводе суммой в 100
руб. на банковскую карту со счёта клиента client1
размещён ниже.
{
"type": "WITHDRAWAL_TO_CARD", // уведомление о переводе на банковскую карту
"txnId": "46829337545338664347",
"txnType": "withdrawal-to-card", // тип операции — перевод на банковскую карту
"transactionAmount": { // сумма, с которой совершена операция
"value": 100,
"currency": "RUB"
},
"clientCommission": {
"value": 2.9,
"currency": "RUB"
},
"status": "SUCCESS", // статус операции — финальный успешный
"statusDetails": {},
"creationDateTime": "2020-09-24T10:42:18+03:00",
"fromClientId": "client1" // клиент, со счётом которого совершена операция
}
Типы уведомлений, описание и примеры их содержимого см. в документации History&Notifications API.
Обратите внимание
Уведомления не приходят в случае синхронного варианта проведения платежа. Подробности см. в статье «Общие принципы и правила» → «Решение об успешности платежа».
Операции из неавторизованной зоны¶
Описание неавторизованной зоны см. в статье «Термины и бизнес-сущности». Финансовая операция из такой зоны является операцией домена CARDS
. Процесс проведения операций домена CARDS
описан в данной статье.
Уведомление о состоянии финансовой операции из неавторизованной зоны может относиться к одному из типов:
- AUTHORIZATION — онлайн-операция (авторизация);
- CLEARING — офлайн-операция.
Тело уведомления о состоянии финансовой операции из неавторизованной зоны содержит:
- обязательные параметры — присутствуют для любого типа уведомления;
- опциональные параметры — присутствуют для конкретного типа уведомления.
{
//Обязательные параметры
"type": "XXX",
"eventDateTime": "2021-06-08T18:06:38.84364+03:00",
"txnId": "edf9e5db-3fa1-4730-8259-4ac04ac2d2bd",
"txnType": "XXX",
"actionId": "ccc0859a-e714-4650-b55e-ac46aad8a904",
"actionType": "XXX",
"actionStatus": "SUCCESS",
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100078557896",
"clientId": "fauqjsjdof5724234527",
"transactionAmount": {
"currency": "RUB",
"value": "3.08"
},
"originTransactionAmount": {
"currency": "RUB",
"value": "3.08"
},
"merchantId": "SBOL",
"merchantType": "4829",
"terminalId": "99999999",
"acquirerId": "402333",
//Опциональные параметры
"correlationId": "ccc0859a-e714-4650-b55e-ac46aad8a904",
"retrievalReferenceNumber": "005613823345",
"authorizationDateTime": "2021-06-08T18:06:29+03:00",
"cardAcceptorNameAndLocation": "VISAMONEYTRANSFER>VisaDirectLU",
"clientCommission": {
"currency": "RUB",
"value": "0.00"
}
}
}
Набор опциональных параметров зависит от типа уведомления. Отличие можно увидеть ниже на примере двух разных типов уведомлений.
{
//Обязательные параметры любого уведомления о финансовой операции из неавторизованной зоны
"type": "AUTHORIZATION",
"eventDateTime": "2021-06-08T18:06:38.84364+03:00",
"txnId": "edf9e5db-3fa1-4730-8259-4ac04ac2d2bd",
"txnType": "FAST_FUNDS",
"actionId": "ccc0859a-e714-4650-b55e-ac46aad8a904",
"actionType": "FAST_FUNDS",
"actionStatus": "SUCCESS",
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100078557896",
"clientId": "fauqjsjdof5724234527",
"transactionAmount": {
"currency": "RUB",
"value": "3.08"
},
"originTransactionAmount": {
"currency": "RUB",
"value": "3.08"
},
"merchantId": "SBOL",
"merchantType": "4829",
"terminalId": "99999999",
"acquirerId": "402333",
//Опциональные параметры (параметры для уведомления типа "AUTHORIZATION")
"correlationId": "ccc0859a-e714-4650-b55e-ac46aad8a904",
"retrievalReferenceNumber": "005613823345",
"authorizationDateTime": "2021-06-08T18:06:29+03:00",
"cardAcceptorNameAndLocation": "VISAMONEYTRANSFER>VisaDirectLU",
"clientCommission": {
"currency": "RUB",
"value": "0.00"
},
}
}
{
//Обязательные параметры любого уведомления о финансовой операции из неавторизованной зоны
"type": "CLEARING",
"eventDateTime": "2021-06-08T18:53:00.765517+03:00",
"txnId": "6e652168-7bf5-4b0f-a3c8-9976e2a653d7",
"txnType": "FAST_FUNDS",
"actionId": "0a40efa1-9862-438b-9d56-c38222f182fe",
"actionType": "CAPTURE_FAST_FUNDS",
"actionStatus": "SUCCESS",
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100078560498",
"clientId": "egfbiaclzz1241737707",
"transactionAmount": {
"currency": "RUB",
"value": "3.29"
},
"originTransactionAmount": {
"currency": "RUB",
"value": "3.29"
},
"merchantId": "351771137636",
"merchantType": "1553",
"terminalId": "83872934",
"acquirerId": "295503",
//Опциональные параметры (параметры для уведомления типа "CLEARING")
"clearingDate": "2021-06-08",
"merchantName": "TEST_MERCHANT_NAME",
"wasNotAuthorizedBefore": true
}
}
Параметры уведомления типа AUTHORIZATION можно условно разделить на две группы:
- постоянные — всегда присутствуют в уведомлении типа AUTHORIZATION.
- дополнительные — могут присутствовать для конкретного типа операции (выдача займа, снятие наличных и др.).
Сходство и отличие уведомлений типа AUTHORIZATION можно увидеть ниже на примере двух разных типов операций.
{
//Постоянные параметры для типа AUTHORIZATION
"type": "AUTHORIZATION",
"eventDateTime": "2021-08-04T16: 30: 49.781279+03: 00",
"txnId": "9c9f3877-97b6-4265-b1f0-57c69036dc93",
"txnType": "CASH_WITHDRAWAL_ATM",
"actionId": "2f5062bd-bd2f-4988-9f85-dfa15bb891f6",
"actionType": "CASH_WITHDRAWAL_HOLD",
"actionStatus": "SUCCESS",
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100079222878",
"clientId": "gvmbgpkrxu7686940477",
"transactionAmount": {
"currency": "RUB",
"value": "8.56"
},
"clientCommission": {
"currency": "RUB",
"value": "0.00"
},
"originTransactionAmount": {
"currency": "RUB",
"value": "8.56"
},
"authorizationDateTime": "2021-08-04T16: 30: 39+03: 00",
"retrievalReferenceNumber": "009966696813",
"merchantId": "VB24",
"cardAcceptorNameAndLocation": "VB24>SANKT-PETERBURU",
"merchantType": "6011",
"terminalId": "99999999",
"acquirerId": "471461",
"correlationId": "2f5062bd-bd2f-4988-9f85-dfa15bb891f6",
//Дополнительные параметры (параметры для типа операции "CASH_WITHDRAWAL_ATM")
"accountBalance": {
"currency": "RUB",
"value": "3.52"
},
}
}
{
//Постоянные параметры для типа AUTHORIZATION
"type": "AUTHORIZATION",
"eventDateTime": "2021-06-08T18:06:38.84364+03:00",
"txnId": "edf9e5db-3fa1-4730-8259-4ac04ac2d2bd",
"txnType": "LOAN_ISSUE",
"actionId": "ccc0859a-e714-4650-b55e-ac46aad8a904",
"actionType": "LOAN_ISSUE",
"actionStatus": "SUCCESS",
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100078557896",
"clientId": "fauqjsjdof5724234527",
"transactionAmount": {
"currency": "RUB",
"value": "20000.00"
},
"clientCommission": {
"currency": "RUB",
"value": "0.00"
},
"originTransactionAmount": {
"currency": "RUB",
"value": "20000.00"
},
"merchantId": "SBOL",
"merchantType": "4829",
"terminalId": "99999999",
"acquirerId": "402333",
"correlationId": "ccc0859a-e714-4650-b55e-ac46aad8a904",
"retrievalReferenceNumber": "005613823345",
"authorizationDateTime": "2021-06-08T18:06:29+03:00",
"cardAcceptorNameAndLocation": "VISAMONEYTRANSFER>VisaDirectLU",
//Дополнительные параметры (параметры для типа операции "LOAN_ISSUE")
"accountBalance": {
"currency": "RUB",
"value": "0.0"
},
"partnerTxnId":"7498c5e4-9b7b-4ccf-a345-240164acb1"
}
}
Для одного и того же типа операции (например, для пополнения с банковской карты) может быть сформировано как уведомление типа AUTHORIZATION, так уведомление типа CLEARING. Это связано с особенностями процесса проведения операции. Подробности см. в статье «Общие принципы и правила» → «Проведение операций домена CARDS».
Уведомление отправляется после совершения какого-либо действия, в результате которого произошло движение денежных средств: холдирования (резервирования), списания и т.д. Действие может быть успешно или неуспешно выполненным. Пример уведомления об успешном холдировании 2500
руб. на счёте клиента client1
в рамках авторизации покупки в интернете размещён ниже.
{
"type": "AUTHORIZATION", // уведомление об авторизации операции
"eventDateTime": "2020-08-12T13:14:23.706284+03:00",
"txnId": "1436d6fb-17ac-6836-3252-779b702cca11",
"txnType": "PURCHASE_E_POS", // тип операции — покупка в интернете
"actionId": "879e12ca-476a-4726-a5fb-e3c4546e47f1",
"actionType": "HOLD", // тип действия — холдирование средств
"actionStatus": "SUCCESS", // статус действия — финальный успешный
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100074268301",
"clientId": "1", // клиент, со счётом которого совершено действие
"transactionAmount": { // сумма, с которой совершено действие
"currency": "RUB",
"value": "2500"
},
"authorizationDateTime": "2020-08-12T13:14:16+03:00",
"retrievalReferenceNumber": "008141362354",
"merchantId": "498750000011107",
"cardAcceptorNameAndLocation": "MIKROMARKET>MOSCOW",
"merchantType": "5499",
"terminalId": "99999999",
"acquirerId": "498750",
"correlationId": "879e12ca-476a-4726-a5fb-e3c4546e47f1"
}
}
Описание уведомлений и примеры их содержимого см. в документации History&Notifications API.
Нефинансовые операции¶
Нефинансовыми являются операции, которые не приводят к движению денежных средств. Примеры нефинансовых операций — блокировка карты, запрос баланса в банкомате.
Операции из авторизованной зоны¶
Описание авторизованной зоны см. в статье «Термины и бизнес-сущности». Примерами нефинансовых операций, которые совершаются из авторизованной зоны, являются блокировка карты и изменение уровня идентификации клиента.
Набор параметров в уведомлении о состоянии нефинансовой операции из авторизованной зоны (1) отличается от набора параметров в уведомлении:
- о состоянии нефинансовой операции из неавторизованной зоны (2);
- о состоянии любой финансовой операции (3).
Отличие можно увидеть на примере ниже.
{
"type": "AUTHORIZATION",
"eventDateTime": "2021-09-20T14:33:13.088799+03:00",
"txnId": "4e2b3c60-0eac-4cf6-9619-20550e544616",
"txnType": "BALANCE_INQUIRY",
"actionId": "b026c332-ebcf-40dc-a2ae-97329f4e3624",
"actionType": "BALANCE_INQUIRY",
"actionStatus": "SUCCESS",
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100079219025",
"clientId": "vgkmnvzrac5063019183",
"transactionAmount": {
"currency": "RUB",
"value": "0.00"
},
"originTransactionAmount": {
"currency": "RUB",
"value": "0.00"
},
"authorizationDateTime": "2021-09-20T14:33:12+03:00",
"retrievalReferenceNumber": "003174424677",
"merchantId": "VB24 ",
"cardAcceptorNameAndLocation": "VB24 >SANKT-PETERBU RU",
"merchantType": "6011",
"terminalId": "99999999",
"acquirerId": "471461",
"correlationId": "d5e30bbb-4e70-4410-81e2-e093e2910287",
"accountBalance": {
"currency": "RUB",
"value": "1.42"
}
}
}
{
"type": "REPLENISHMENT_BY_WEBFORM",
"txnId": "56927813128178660527",
"txnType": "replenishment-by-webform",
"transactionAmount": {
"value": 2.9,
"currency": "RUB"
},
"clientCommission": {
"value": 100.0,
"currency": "RUB"
},
"status": "SUCCESS",
"statusDetails": {},
"creationDateTime": "2020-09-24T10:42:18+03:00",
"toClientId": "mismihtmdb6639011557"
}
Описание уведомлений и примеры их содержимого см. в документации History&Notifications API.
Операции из неавторизованной зоны¶
Описание неавторизованной зоны см. в статье «Термины и бизнес-сущности». Примером нефинансовой операции, совершаемой из неавторизованной зоны, является запрос баланса в банкомате (т.к. у QIWI нет собственных банкоматов).
Уведомление о состоянии нефинансовой операции из неавторизованной зоны может быть только одного типа — AUTHORIZATION (см. описание онлайн-операции). Параметры такого уведомления можно условно разделить на две группы:
- постоянные — присутствуют в уведомлении типа AUTHORIZATION независимо от вида операции (финансовая/нефинансовая);
- дополнительные — могут присутствовать для конкретного типа операции (запрос баланса в банкомате и др.).
Сходство и отличие уведомлений типа AUTHORIZATION можно увидеть на примере ниже.
{
//Обязательные для типа AUTHORIZATION параметры
"type": "AUTHORIZATION",
"eventDateTime": "2021-06-08T18:06:38.84364+03:00",
"txnId": "edf9e5db-3fa1-4730-8259-4ac04ac2d2bd",
"txnType": "FAST_FUNDS",
"actionId": "ccc0859a-e714-4650-b55e-ac46aad8a904",
"actionType": "FAST_FUNDS",
"actionStatus": "SUCCESS",
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100078557896",
"clientId": "fauqjsjdof5724234527",
"transactionAmount": {
"currency": "RUB",
"value": "3.08"
},
"originTransactionAmount": {
"currency": "RUB",
"value": "3.08"
},
"merchantId": "SBOL",
"merchantType": "4829",
"terminalId": "99999999",
"acquirerId": "402333",
"correlationId": "ccc0859a-e714-4650-b55e-ac46aad8a904",
"retrievalReferenceNumber": "005613823345",
"authorizationDateTime": "2021-06-08T18:06:29+03:00",
"cardAcceptorNameAndLocation": "VISAMONEYTRANSFER>VisaDirectLU"
}
}
{
//Обязательные параметры
"type": "AUTHORIZATION",
"eventDateTime": "2021-09-20T14:33:13.088799+03:00",
"txnId": "4e2b3c60-0eac-4cf6-9619-20550e544616",
"txnType": "BALANCE_INQUIRY",
"actionId": "b026c332-ebcf-40dc-a2ae-97329f4e3624",
"actionType": "BALANCE_INQUIRY",
"actionStatus": "SUCCESS",
"actionStatusDetails": {},
"actionData": {
"cardTokenId": "100079219025",
"clientId": "vgkmnvzrac5063019183",
"transactionAmount": {
"currency": "RUB",
"value": "0.00"
},
"originTransactionAmount": {
"currency": "RUB",
"value": "0.00"
},
"authorizationDateTime": "2021-09-20T14:33:12+03:00",
"retrievalReferenceNumber": "003174424677",
"merchantId": "VB24 ",
"cardAcceptorNameAndLocation": "VB24 >SANKT-PETERBU RU",
"merchantType": "6011",
"terminalId": "99999999",
"acquirerId": "471461",
"correlationId": "d5e30bbb-4e70-4410-81e2-e093e2910287",
//Опциональные параметры
"accountBalance": {
"currency": "RUB",
"value": "1.42"
}
}
}
Тестирование¶
Общие правила тестирования описаны в статье BaaS → «Тестирование». Здесь мы расскажем об особенностях тестирования сценариев получения уведомлений.
Особенности
Для проверки получения уведомлений в тестовом контуре предоставьте вашему курирующему менеджеру URL-адрес, на который они должны отправляться.
Операции из неавторизованной зоны, относящиеся к домену CARDS
, не могут быть совершены в тестовой среде. Чтобы протестировать получение уведомлений по операциям из неавторизованной зоны, направьте запрос представителям BaaS. Канал общения определяется для каждого партнёра индивидуально.