Унифицированный интерфейс обмена информацией
Интерфейс предназначен для обмена информацией с кредитной организацией (далее — Контрагент), подключенной как провайдер к QIWI.
Взаимодействие сервиса QIWI и Контрагента строится в режиме "запрос-ответ", где инициатором запроса всегда является QIWI, а отвечающей стороной — Контрагент.
Каждый платеж в сервисе QIWI имеет уникальный идентификатор, который передается Контрагенту в виде двух переменных:
sysid
— код платежной системы;sysno
— целое число длиной до 24 знаков.
По комбинации этих двух переменных производится дальнейшая сверка взаиморасчетов и решение спорных вопросов.
При обработке запроса от сервиса QIWI провайдер должен выполнить требуемую операцию, а затем вернуть в ответе данные (если это требуется) и результат выполнения операции. Подробнее см. в разделе Правила обработки запросов.
Ознакомьтесь также с рекомендациями по интеграции с интерфейсом QIWI:
Требования к интерфейсу провайдера
- Интерфейс должен принимать запросы по протоколу HTTP или HTTPS с IP-адресов подсетей:
- 79.142.16.0/20
- 195.189.100.0/22
- 91.232.230.0/23
- 91.213.51.0/24
- Интерфейс должен обрабатывать запросы
HTTP GET
,HTTP POST
. - Интерфейс должен формировать ответ на запрос в формате XML в кодировке UTF-8.
- Скорость ответа не должна превышать 60 секунд, в противном случае сервис QIWI разрывает соединение по таймауту.
- Если предполагаемое количество платежей за услуги подключаемого провайдера ожидается интенсивным (до 10 платежей в минуту и более), необходимо, чтобы интерфейс поддерживал многопоточную коммуникацию до 10-15 одновременных соединений.
Правила обработки запросов
При обработке запроса от информационного сервиса QIWI Контрагент должен выполнить запрашиваемую операцию и передать в ответе данные (если это требуется) в формате XML-документа. При этом провайдер должен сопоставить все возникающие в его приложении ошибки со списком стандартных кодов завершения и возвращать соответствующий код в элементе <result>
.
Коды ошибок могут быть фатальные и нефатальные:
- Фатальная ошибка означает, что повторная отправка запроса с теми же параметрами приведет к 100% повторению той же ошибки — следовательно, сервис прекращает обработку клиентского запроса и завершает его с ошибкой.
- Нефатальная ошибка означает, что повторение запроса с теми же параметрами через некоторый промежуток времени, возможно, приведет к успеху. Сервис QIWI будет повторять запросы, завершающиеся нефатальной ошибкой, постоянно увеличивая интервал, пока операция не завершится успехом или фатальной ошибкой, либо пока не истечет срок жизни запроса – 24 часа.
Отсутствие связи с сервером Контрагента является нефатальной ошибкой. Отсутствие в ответе элемента <result>
(а также некорректный XML-документ, ответ в виде страницы Service temporarily unavailable и т.д.) является фатальной ошибкой.
Признак того что ошибка фатальная (Фатальность) указан в списке кодов завершения.
Процесс платежа
Передача информации о платеже Контрагенту производится системой в два этапа:
Обработку запросов на каждом из этих этапов провайдеру необходимо реализовать на своей стороне. При этом необходимо соблюдать правила обработки запросов.
Протокол содержит дополнительные методы, не влияющие на процесс платежа:
Реализация этих методов опциональна.
Получение дополнительных параметров платежа
Запрос предназначен для проверки идентификатора Клиента и получения дополнительной информации о Клиенте. При получении запроса провайдер:
- проверяет наличие в своей информационной системе Клиента с указанным идентификатором;
- возвращает дополнительную информацию для показа плательщику при совершении платежа.
Параметры запроса
Пример запроса
<?xml version="1.0" encoding="UTF-8"?>
<request command="getinfo">
<verno>342</verno>
<auth>
<login>qiwi</login>
<psw>qiwi</psw>
</auth>
<doc>
<sysid>26090</sysid>
<sysno>999902885370117</sysno>
<doctime>20211031124845</doctime>
<mesid>4444</mesid>
<docno/>
<rem_key/>
</doc>
<crypt>
<cryp_prov></cryp_prov>
<sign></sign>
<keyid></keyid>
<encrypt>0</encrypt>
</crypt>
</request>
Параметр | Формат | Обяз. | Описание |
---|---|---|---|
command | getinfo |
✓ | Идентификация типа запроса: запрос на получение дополнительных данных платежа для абонента. Всегда равен getInfo |
verno | varchar2(30) | ✓ | Версия протокола |
auth | ✓ | Блок с информацией об авторизации | |
login | varchar2(30) | ✓ | Логин |
psw | varchar2(30) | ✓ | Пароль |
doc | ✓ | Блок с информацией о документе | |
sysid | varchar2(12) | ✓ | Код платежной системы |
sysno | varchar2(24) | ✓ | Номер транзакции в платежной системе |
doctime | date (yyyymmddhh(24)mmss ) |
✓ | Время регистрации транзакции в платежной системе |
mesid | varchar2(5) | ✓ | Тип платежа |
docno | varchar2(20) | Номер документа | |
rem_key | varchar2(30) | ✓ | Идентификатор плательщика в информационной системе Контрагента |
crypt | Блок с электронной подписью | ||
cryp_prov | varchar2(20) | Криптопровайдер | |
sign | varchar2(50) | Подпись платежа | |
keyid | varchar2(20) | Ключ | |
encrypt | number(1) | Флаг "зашифрован" (1 ) / "не зашифрован" (0 ) |
Параметры ответа
Пример ответа
<?xml version="1.0" encoding="UTF-8"?>
<response command="getinfo">
<verno>342</verno>
<doc>
<id>
<sysid>26090</sysid>
<sysno>999902885370117</sysno>
<doctime>20211031124845</doctime>
</id>
<mesid>4444</mesid>
<docno></docno>
<rem_name></rem_name>
<rem_name2></rem_name2>
<rem_name3></rem_name3>
<rem_address></rem_address>
<rem_key></rem_key>
<result></result>
<comment></comment>
<timeout></timeout>
<extra>
<field1></field1>
<field2></field2>
<fieldN></fieldN>
</extra>
</doc>
<crypt>
<cryp_prov></cryp_prov>
<sign></sign>
<keyid></keyid>
<encrypt></encrypt>
</crypt>
</response>
В ответе интерфейс Контрагента должен вернуть XML-документ с блоком <response>
и следующими тегами:
Параметр | Формат | Обяз. | Описание |
---|---|---|---|
command | getinfo |
✓ | Идентификация типа запроса: запрос на получение информации о плательщике. Всегда равен getinfo |
verno | varchar2(30) | ✓ | Версия протокола. Повтор значения тега из запроса. |
doc | ✓ | Блок с информацией о документе | |
sysid | varchar2(12) | ✓ | Код платежной системы. Повтор значения тега из запроса. |
sysno | varchar2(24) | ✓ | Номер транзакции в платежной системе. Повтор значения тега из запроса. |
doctime | date (yyyymmddhh(24)mmss ) |
✓ | Время регистрации транзакции в платежной системе |
mesid | varchar2(5) | ✓ | Тип платежа |
docno | varchar2(20) | Номер документа | |
rem_name | varchar2(254) | Название/фамилия плательщика | |
rem_name2 | varchar2(254) | Имя плательщика | |
rem_name3 | varchar2(254) | Отчество плательщика | |
rem_address | varchar2(254) | Адрес плательщика | |
rem_key | varchar2(30) | ✓ | Идентификатор плательщика в информационной системе Контрагента. Повтор значения тега из запроса. |
result | number(3) | ✓ | Код завершения |
comment | varchar2(254) | Расшифровка кода завершения | |
timeout | number | Задержка отправки повторного запроса в минутах | |
extra | Блок с дополнительной информацией | ||
field1, field2, fieldN | varchar2(254) | Дополнительная информация | |
crypt | Блок с электронной подписью | ||
cryp_prov | varchar2(20) | Криптопровайдер | |
sign | varchar2(50) | Подпись платежа | |
keyid | varchar2(20) | Ключ | |
encrypt | number(1) | Флаг "зашифрован" (1 ) / "не зашифрован" (0 ) |
Проверка возможности проведения платежа (авторизация)
При получении запроса Контрагент должен выполнить внутренние проверки на возможность проведения платежа.
Параметры запроса
Пример запроса
<?xml version="1.0" encoding="UTF-8"?>
<request command="check">
<verno>342</verno>
<auth>
<login>qiwi</login>
<psw>qiwi</psw>
</auth>
<doc>
<id>
<sysid>26090</sysid>
<sysno>999902885370117</sysno>
<doctime>20211031124845</doctime>
<prov_code>044525521</prov_code>
</id>
<docattr>
<mesid>4444</mesid>
<docno/>
<amount>100</amount>
<comission/>
<remarks/>
<cbc/>
<tax_no/>
<tax_type/>
<doc_type>3</doc_type>
</docattr>
<remitent>
<rem_name/>
<rem_nam2/>
<rem_nam3/>
<rem_tax/>
<rem_kpp/>
<rem_okato/>
<rem_phone/>
<rem_pob/>
<rem_dob/>
<rem_dcm_type/>
<rem_dcm_serial_no/>
<rem_dcm_no/>
<rem_dcm_date/>
<rem_dcm_issue_where/>
<rem_address></rem_address>
<rem_mfo>044585416</rem_mfo>
<rem_acc></rem_acc>
<rem_deb></rem_deb>
<rem_cardno></rem_cardno>
<rem_cardexp></rem_cardexp>
<rem_key></rem_key>
<rem_agrno></rem_agrno>
<rem_extrainfo></rem_extrainfo>
</remitent>
<recipient>
<rec_name></rec_name>
<rec_nam2></rec_nam2>
<rec_nam3></rec_nam3>
<rec_tax></rec_tax>
<rec_kpp></rec_kpp>
<rec_okato></rec_okato>
<rec_phone></rec_phone>
<rec_pob></rec_pob>
<rec_dob></rec_dob>
<rec_dcm_type></rec_dcm_type>
<rec_dcm_serial_no></rec_dcm_serial_no>
<rec_dcm_no></rec_dcm_no>
<rec_dcm_date></rec_dcm_date>
<rec_dcm_issue_where></rec_dcm_issue_where>
<rec_address></rec_address>
<rec_mfo>044525521</rec_mfo>
<rec_acc></rec_acc>
<rec_cre>40817810700470049428</rec_cre>
<rec_cardno></rec_cardno>
<rec_cardexp/>
<rec_key/>
<rec_agrno/>
<rec_extrainfo></rec_extrainfo>
</recipient>
<point>
<terpfp></terpfp>
<terid>9476886</terid>
<terkvi/>
<tercity>http://qiwi.ru</tercity>
<teraddr></teraddr>
<teragnt></teragnt>
</point>
</doc>
<crypt>
<cryp_prov/>
<sign/>
<keyid>qiwi</keyid>
<encrypt>0</encrypt>
</crypt>
</request>
Параметр | Формат | Обяз. | Описание |
---|---|---|---|
command | check |
✓ | Идентификация типа запроса: запрос проверки возможности проведения платежа. Всегда равен check |
verno | varchar2(30) | ✓ | Версия протокола |
auth | ✓ | Блок с информацией об авторизации | |
login | varchar2(30) | ✓ | Логин |
psw | varchar2(30) | ✓ | Пароль |
doc | ✓ | Блок с информацией о документе | |
id | ✓ | Блок с информацией об идентификации документа | |
sysid | varchar2(12) | ✓ | Код платежной системы |
sysno | varchar2(24) | ✓ | Номер транзакции в платежной системе |
doctime | date (yyyymmddhh(24)mmss ) |
✓ | Время регистрации транзакции в платежной системе |
prov_code | varchar2(9) | ✓ | Код Контрагента |
docattr | ✓ | Блок информации об атрибутах документа | |
mesid | varchar2(5) | ✓ | Тип платежа |
docno | varchar2(20) | Номер документа | |
amount | number | ✓ | Сумма платежа в копейках |
comission | number | Комиссия платежа в копейках | |
remarks | varchar2(160) | Примечание | |
cbc | varchar2(20) | Код бюджетной классификации | |
tax_no | varchar2(20) | Номер налогового документа | |
doc_type | varchar2(4) | Тип документа: 1 — пополнение счета, 2 — погашение кредита, 3 -пополнение банковской карты |
|
tax_type | varchar2(2) | Тип налогового документа | |
remittent | Блок с информацией о плательщикe | ||
rem_name | varchar2(254) | Название плательщика/Фамилия | |
rem_nam2 | varchar2(254) | Имя плательщика | |
rem_nam3 | varchar2(254) | Отчество плательщика | |
rem_tax | varchar2(12) | ИНН плательщика | |
rem_kpp | varchar2(26) | КПП плательщика | |
rem_okato | varchar2(26) | ОКАТО плательщика | |
rem_phone | number | Телефон плательщика | |
rem_pob | varchar2(254) | Место рождения плательщика | |
rem_dob | date(yyyymmdd ) |
Дата рождения плательщика | |
rem_dcm_type | varchar2(30) | Тип документа плательщика | |
rem_dcm_serial_no | varchar2(40) | Серийный номер документа плательщика | |
rem_dcm_no | varchar2(40) | Номер документа плательщика | |
rem_dcm_date | date (yyyymmdd ) |
Дата получения документа плательщика | |
rem_dcm_issue_where | varchar2(254) | Кем выдан документ плательщика | |
rem_address | varchar2(254) | Адрес плательщика | |
rem_mfo | varchar2(9) | ✓ | БИК банка плательщика |
rem_acc | varchar2(25) | Корсчет банка плательщика | |
rem_deb | varchar2(25) | Счет плательщика в банке плательщика | |
rem_cardno | varchar2(20) | Номер/маска карты плательщика | |
rem_cardexp | varchar2(4) | Срок действия карты плательщика | |
rem_key | varchar2(30) | Идентификатор плательщика в банке плательщика | |
rem_agrno | varchar2(50) | Идентификатор договора плательщика | |
rem_extrainfo | varchar2(512) | Доп. информация плательщика | |
recipient | Блок с информацией о получателе | ||
reс_name | varchar2(254) | ✓ | Название получателя/Фамилия |
reс_nam2 | varchar2(254) | Имя получателя | |
reс_nam3 | varchar2(254) | Отчество получателя | |
reс_tax | varchar2(12) | ИНН получателя | |
reс_kpp | varchar2(26) | КПП получателя | |
reс_okato | varchar2(26) | ОКАТО получателя | |
reс_phone | number | Телефон получателя | |
reс_pob | varchar2(254) | Место рождения получателя | |
reс_dob | date (yyyymmdd ) |
Дата рождения получателя | |
reс_dcm_type | varchar2(30) | Тип документа получателя | |
reс_dcm_serial_no | varchar2(40) | Серийный номер документа получателя | |
reс_dcm_no | varchar2(40) | Номер документа получателя | |
reс_dcm_date | date (yyyymmdd ) |
Дата получения документа получателя | |
reс_dcm_issue_where | varchar2(254) | Кем выдан документ получателя | |
reс_address | varchar2(254) | Адрес получателя | |
reс_mfo | varchar2(9) | ✓ | БИК банка получателя |
reс_acc | varchar2(25) | Корсчет банка получателя | |
reс_cre | varchar2(25) | Счет получателя в банке получателя | |
reс_cardno | varchar2(20) | Номер/маска карты получателя | |
reс_cardexp | varchar2(4) | Срок действия карты получателя | |
reс_key | varchar2(30) | Идентификатор получателя в банке получателя | |
reс_agrno | varchar2(50) | Идентификатор договора получателя | |
reс_extrainfo | varchar2(512) | Доп. информация получателя | |
point | Блок информации о платежном терминале | ||
terpfp | varchar2(50) | Номер ПФП | |
terid | varchar2(20) | ✓ | Идентификатор АСО |
terkvi | number | Номер платежной квитанции | |
tercity | varchar2(150) | Город расположения АСО | |
teraddr | varchar2(254) | Место расположения АСО | |
teragnt | varchar2(254) | Название владельца АСО | |
crypt | Блок с электронной подписью | ||
cryp_prov | varchar2(20) | Криптопровайдер | |
sign | varchar2(50) | Подпись платежа | |
keyid | varchar2(20) | Ключ | |
encrypt | number(1) | Флаг "зашифрован" (1 ) / "не зашифрован" (0 ) |
Параметры ответа
Пример ответа
<?xml version="1.0" encoding="UTF-8"?>
<response command="check">
<verno>342</verno>
<doc>
<sysid>26090</sysid>
<sysno>999902885370117</sysno>
<prv_id>11137584</prv_id>
<doctime>20211031124845</doctime>
<amount>100</amount>
<comission></comission>
<rec_name></rec_name>
<rec_name2></rec_name2>
<rec_name3></rec_name3>
<rec_cardno></rec_cardno>
<rec_cre></rec_cre>
<rec_agrno></rec_agrno>
<rec_key></rec_key>
<result>0</result>
<comment>OK</comment>
<timeout></timeout>
<extra>
<field1></field1>
<field2></field2>
</extra>
</doc>
<crypt>
<cryp_prov></cryp_prov>
<sign></sign>
<keyid>qiwi</keyid>
<encrypt>0</encrypt>
</crypt>
</response>
В ответе интерфейс Контрагента должен вернуть XML-документ с блоком <response>
и следующими тегами:
Параметр | Формат | Обяз. | Описание |
---|---|---|---|
command | check |
✓ | Идентификация типа запроса: запрос проверки возможности проведения платежа. Всегда равен check |
verno | varchar2(30) | ✓ | Версия протокола |
doc | ✓ | Блок с информацией о документе | |
sysid | varchar2(12) | ✓ | Код платежной системы |
sysno | varchar2(24) | ✓ | Номер транзакции в платежной системе |
doctime | date (yyyymmddhh(24)mmss ) |
✓ | Время регистрации транзакции в платежной системе |
prv_id | varchar2(20) | ✓ | Номер транзакции в информационной системе Контрагента. Уникальный номер операции пополнения баланса получателя (в базе Контрагента), целое число длиной до 20 знаков |
amount | number | ✓ | Сумма платежа в копейках |
comission | number | Комиссия платежа в копейках | |
reс_name | varchar2(254) | ✓ | Название получателя/Фамилия |
reс_nam2 | varchar2(254) | Имя получателя | |
reс_nam3 | varchar2(254) | Отчество получателя | |
reс_cre | varchar2(25) | Счет получателя в банке получателя | |
reс_cardno | varchar2(20) | Номер/маска карты получателя | |
reс_key | varchar2(30) | Идентификатор получателя в банке получателя | |
reс_agrno | varchar2(50) | Идентификатор договора получателя | |
result | number(3) | ✓ | Код завершения |
comment | varchar2(254) | ✓ | Расшифровка кода завершения |
timeout | number | Задержка отправки повторного запроса в минутах. Время, через которое Контрагент рекомендует повторить запрос, если в результате выполнения его ранее получен нефатальный код завершения, отличный от 0 . |
|
extra | Блок с дополнительной информацией | ||
field1, field2, fieldN | varchar2(254) | Дополнительная информация, которую можно передать информационной системе Контрагента. Эта информация может быть показана пользователю при совершении платежа. | |
crypt | Блок с электронной подписью | ||
cryp_prov | varchar2(20) | Криптопровайдер | |
sign | varchar2(50) | Подпись платежа | |
keyid | varchar2(20) | Ключ | |
encrypt | number(1) | Флаг "зашифрован" (1 ) / "не зашифрован" (0 ) |
Возвращение <result>0</result>
на запрос check
свидетельствует о том, что платеж с соответствующей ему уникальной парой sysid
и sysno
может быть зарегистрирован на сумму, указанную в запросе. После успешной проверки возможности проведения платежа система переходит к формированию и отправке запроса на регистрацию платежа.
Регистрация платежа
При получении запроса Контрагент должен произвести регистрацию платежа.
Параметры запроса
Пример запроса
<?xml version="1.0" encoding="UTF-8"?>
<request command="pay">
<verno>342</verno>
<auth>
<login>qiwi</login>
<psw>qiwi</psw>
</auth>
<doc>
<id>
<sysid>26090</sysid>
<sysno>999902885370117</sysno>
<doctime>20211031124845</doctime>
<prov_code>044525521</prov_code>
</id>
<docattr>
<mesid>4444</mesid>
<docno></docno>
<amount>100</amount>
<comission></comission >
<remarks></remarks>
<cbc></cbc>
<tax_no></tax_no>
<tax_type></tax_type>
<doc_type>3<doc_type>
</docattr>
<remitent>
<rem_name></rem_name>
<rem_nam2></rem_nam2>
<rem_nam3></rem_nam3>
<rem_tax></rem_tax>
<rem_kpp></rem_kpp>
<rem_okato></rem_okato>
<rem_phone></rem_phone>
<rem_pob></rem_pob>
<rem_dob></rem_dob>
<rem_dcm_type></rem_dcm_type>
<rem_dcm_serial_no></rem_dcm_serial_no>
<rem_dcm_no></rem_dcm_no>
<rem_dcm_date></rem_dcm_date>
<rem_dcm_issue_where></rem_dcm_issue_where>
<rem_address></rem_address>
<rem_mfo>044585416</rem_mfo>
<rem_acc></rem_acc>
<rem_deb></rem_deb>
<rem_cardno></rem_cardno>
<rem_cardexp></rem_cardexp>
<rem_key></rem_key>
<rem_agrno></rem_agrno>
<rem_extrainfo></rem_extrainfo>
</remitent>
<recipient>
<rec_name></rec_name>
<rec_nam2></rec_nam2>
<rec_nam3></rec_nam3>
<rec_tax></rec_tax>
<rec_kpp></rec_kpp>
<rec_okato></rec_okato>
<rec_phone></rec_phone>
<rec_pob></rec_pob>
<rec_dob></rec_dob>
<rec_dcm_type></rec_dcm_type>
<rec_dcm_serial_no></rec_dcm_serial_no>
<rec_dcm_no></rec_dcm_no>
<rec_dcm_date></rec_dcm_date>
<rec_dcm_issue_where></rec_dcm_issue_where>
<rec_address></rec_address>
<rec_mfo>044525521</rec_mfo>
<rec_acc></rec_acc>
<rec_cre>40817810700470049428</rec_cre>
<rec_cardno></rec_cardno>
<rec_cardexp></rec_cardexp>
<rec_key></rec_key>
<rec_agrno></rec_agrno>
<rec_extrainfo></rec_extrainfo>
</recipient>
<point>
<terpfp></terpfp>
<terid>9476886</terid>
<terkvi></terkvi>
<tercity>http://qiwi.ru</tercity>
<teraddr></teraddr>
<teragnt></teragnt>
</point>
</doc>
<crypt>
<cryp_prov></cryp_prov>
<sign></sign>
<keyid>qiwi</keyid>
<encrypt>0</encrypt>
</crypt>
</request>
Параметр | Формат | Условие | Описание |
---|---|---|---|
command | pay |
✓ | Идентификация типа запроса: запрос регистрации платежа. Всегда равен pay |
verno | varchar2(30) | ✓ | Версия протокола |
auth | ✓ | Блок с информацией об авторизации | |
login | varchar2(30) | ✓ | Логин |
psw | varchar2(30) | ✓ | Пароль |
doc | ✓ | Блок с информацией о документе | |
id | ✓ | Блок с информацией об идентификации документа | |
sysid | varchar2(12) | ✓ | Код платежной системы |
sysno | varchar2(24) | ✓ | Номер транзакции в платежной системе |
doctime | date (yyyymmddhh(24)mmss ) |
✓ | Время регистрации транзакции в платежной системе |
prov_code | varchar2(9) | ✓ | Код Контрагента |
docattr | Блок информации об атрибутах документа | ||
mesid | varchar2(5) | ✓ | Тип платежа |
docno | varchar2(20) | Номер документа | |
amount | number | ✓ | Сумма платежа в копейках |
comission | number | ✓ | Комиссия платежа в копейках |
remarks | varchar2(160) | Примечание | |
cbc | varchar2(20) | Код бюджетной классификации | |
tax_no | varchar2(20) | Номер налогового документа | |
doc_type | varchar2(4) | Тип документа: 1 — пополнение счета, 2 — погашение кредита, 3 -пополнение банковской карты |
|
tax_type | varchar2(2) | Тип налогового документа | |
remittent | Блок с информацией о плательщикe | ||
rem_name | varchar2(254) | Название плательщика/Фамилия | |
rem_nam2 | varchar2(254) | Имя плательщика | |
rem_nam3 | varchar2(254) | Отчество плательщика | |
rem_tax | varchar2(12) | ИНН плательщика | |
rem_kpp | varchar2(26) | КПП плательщика | |
rem_okato | varchar2(26) | ОКАТО плательщика | |
rem_phone | number | Телефон плательщика | |
rem_pob | varchar2(254) | Место рождения плательщика | |
rem_dob | date(yyyymmdd ) |
Дата рождения плательщика | |
rem_dcm_type | varchar2(30) | Тип документа плательщика | |
rem_dcm_serial_no | varchar2(40) | Серийный номер документа плательщика | |
rem_dcm_no | varchar2(40) | Номер документа плательщика | |
rem_dcm_date | date (yyyymmdd ) |
Дата получения документа плательщика | |
rem_dcm_issue_where | varchar2(254) | Кем выдан документ плательщика | |
rem_address | varchar2(254) | Адрес плательщика | |
rem_mfo | varchar2(9) | ✓ | БИК банка плательщика |
rem_acc | varchar2(25) | Корсчет банка плательщика | |
rem_deb | varchar2(25) | Счет плательщика в банке плательщика | |
rem_cardno | varchar2(20) | Номер/маска карты плательщика | |
rem_cardexp | varchar2(4) | Срок действия карты плательщика | |
rem_key | varchar2(30) | Идентификатор плательщика в банке плательщика | |
rem_agrno | varchar2(50) | Идентификатор договора плательщика | |
rem_extrainfo | varchar2(512) | Доп. информация плательщика | |
recipient | Блок с информацией о получателе | ||
reс_name | varchar2(254) | ✓ | Название получателя/Фамилия |
reс_nam2 | varchar2(254) | Имя получателя | |
reс_nam3 | varchar2(254) | Отчество получателя | |
reс_tax | varchar2(12) | ИНН получателя | |
reс_kpp | varchar2(26) | КПП получателя | |
reс_okato | varchar2(26) | ОКАТО получателя | |
reс_phone | number | Телефон получателя | |
reс_pob | varchar2(254) | Место рождения получателя | |
reс_dob | date (yyyymmdd ) |
Дата рождения получателя | |
reс_dcm_type | varchar2(30) | Тип документа получателя | |
reс_dcm_serial_no | varchar2(40) | Серийный номер документа получателя | |
reс_dcm_no | varchar2(40) | Номер документа получателя | |
reс_dcm_date | date (yyyymmdd ) |
Дата получения документа получателя | |
reс_dcm_issue_where | varchar2(254) | Кем выдан документ получателя | |
reс_address | varchar2(254) | Адрес получателя | |
reс_mfo | varchar2(9) | ✓ | БИК банка получателя |
reс_acc | varchar2(25) | Корсчет банка получателя | |
reс_cre | varchar2(25) | Счет получателя в банке получателя | |
reс_cardno | varchar2(20) | Номер/маска карты получателя | |
reс_cardexp | varchar2(4) | Срок действия карты получателя | |
reс_key | varchar2(30) | Идентификатор получателя в банке получателя | |
reс_agrno | varchar2(50) | Идентификатор договора получателя | |
reс_extrainfo | varchar2(512) | Доп. информация получателя | |
point | Блок информации о платежном терминале | ||
terpfp | varchar2(50) | Номер ПФП | |
terid | varchar2(20) | ✓ | Идентификатор АСО |
terkvi | number | Номер платежной квитанции | |
tercity | varchar2(150) | Город расположения АСО | |
teraddr | varchar2(254) | Место расположения АСО | |
teragnt | varchar2(254) | Название владельца АСО | |
crypt | Блок с электронной подписью | ||
cryp_prov | varchar2(20) | Криптопровайдер | |
sign | varchar2(50) | Подпись платежа | |
keyid | varchar2(20) | Ключ | |
encrypt | number(1) | Флаг "зашифрован" (1 ) / "не зашифрован" (0 ) |
Параметры ответа
Пример ответа
<?xml version="1.0" encoding="UTF-8"?>
<response command="pay">
<verno>342</verno>
<doc>
<sysid>26090</sysid>
<sysno>999902885370117</sysno>
<prv_id>11132331</prv_id>
<doctime>20211031124845</doctime>
<amount></amount>
<comission></comission>
<rec_name></rec_name>
<rec_name2></rec_name2>
<rec_name3></rec_name3>
<rec_cardno></rec_cardno>
<rec_cre></rec_cre>
<rec_agrno></rec_agrno>
<rec_key></rec_key>
<result>0</result>
<comment>OK</comment>
<timeout></timeout>
<extra>
<field1></field1>
<field2></field2>
</extra>
</doc>
<crypt>
<cryp_prov></cryp_prov>
<sign></sign>
<keyid>qiwi</keyid>
<encrypt>0</encrypt>
</crypt>
</response>
В ответе интерфейс Контрагента должен вернуть XML-документ с блоком <response>
и следующими тегами:
Параметр | Формат | Обяз. | Описание |
---|---|---|---|
command | pay |
✓ | Идентификация типа запроса: запрос проверки возможности проведения платежа. Всегда равен pay |
verno | varchar2(30) | ✓ | Версия протокола |
doc | ✓ | Блок с информацией о документе | |
sysid | varchar2(12) | ✓ | Код платежной системы |
sysno | varchar2(24) | ✓ | Номер транзакции в платежной системе |
doctime | date (yyyymmddhh(24)mmss ) |
✓ | Время регистрации транзакции в платежной системе |
prv_id | varchar2(20) | ✓ | Номер транзакции в информационной системе Контрагента. Уникальный номер операции пополнения баланса получателя (в базе Контрагента), целое число длиной до 20 знаков |
amount | number | ✓ | Сумма платежа в копейках |
comission | number | ✓ | Комиссия платежа в копейках |
reс_name | varchar2(254) | ✓ | Название получателя/Фамилия |
reс_nam2 | varchar2(254) | Имя получателя | |
reс_nam3 | varchar2(254) | Отчество получателя | |
reс_cre | varchar2(25) | Счет получателя в банке получателя | |
reс_cardno | varchar2(20) | Номер/маска карты получателя | |
reс_key | varchar2(30) | Идентификатор получателя в банке получателя | |
reс_agrno | varchar2(50) | Идентификатор договора получателя | |
result | number(3) | ✓ | Код завершения |
comment | varchar2(254) | ✓ | Расшифровка кода завершения |
timeout | number | Задержка отправки повторного запроса в минутах. Время, через которое Контрагент рекомендует повторить запрос, если в результате выполнения его ранее получен нефатальный код завершения, отличный от 0 . |
|
extra | Блок с дополнительной информацией | ||
field1, field2, fieldN | varchar2(254) | Дополнительная информация, которую можно передать информационной системе Контрагента. Эта информация может быть показана пользователю при совершении платежа. | |
crypt | Блок с электронной подписью | ||
cryp_prov | varchar2(20) | Криптопровайдер | |
sign | varchar2(50) | Подпись платежа | |
keyid | varchar2(20) | Ключ | |
encrypt | number(1) | Флаг "зашифрован" (1 ) / "не зашифрован" (0 ) |
Возвращение <result>0</result>
на запрос pay
свидетельствует о том, что Контрагент успешно завершил операцию регистрации платежа. В этом случае QIWI полностью завершает обработку данной транзакции.
Отмена регистрации платежа
При получении запроса Контрагент должен произвести отмену регистрации платежа.
Параметры запроса
Пример запроса
<?xml version="1.0" encoding="UTF-8"?>
<request command="cancel">
<verno>342</verno>
<auth>
<login>qiwi</login>
<psw>qiwi</psw>
</auth>
<doc>
<sysid>22454</sysid>
<sysno>09343439921</sysno>
<doctime>20211031124845</doctime>
<prov_code>044525521</prov_code>
<prv_id>113242434</prv_id>
<reason></reason>
<amount>95</amount>
</doc>
<crypt>
<cryp_prov></cryp_prov>
<sign></sign>
<keyid>qiwi</keyid>
<encrypt>0</encrypt>
</crypt>
</request>
Параметр | Формат | Условие | Описание |
---|---|---|---|
command | cancel |
✓ | Идентификация типа запроса: запрос отмены регистрации платежа. Всегда равен cancel |
verno | varchar2(30) | ✓ | Версия протокола |
auth | ✓ | Блок с информацией об авторизации | |
login | varchar2(30) | ✓ | Логин |
psw | varchar2(30) | ✓ | Пароль |
doc | ✓ | Блок с информацией о документе | |
sysid | varchar2(12) | ✓ | Код платежной системы |
sysno | varchar2(24) | ✓ | Номер транзакции в платежной системе |
doctime | date (yyyymmddhh(24)mmss ) |
✓ | Время регистрации транзакции в платежной системе |
prov_code | varchar2(9) | ✓ | Код Контрагента |
prv_id | varchar2(20) | Уникальный номер операции пополнения баланса получателя (в базе Контрагента) | |
reason | varchar2(160) | ✓ | Причины отмены |
docno | varchar2(20) | ✓ | Номер документа |
amount | number | ✓ | Сумма платежа в копейках |
crypt | Блок с электронной подписью | ||
cryp_prov | varchar2(20) | Криптопровайдер | |
sign | varchar2(50) | Подпись платежа | |
keyid | varchar2(20) | Ключ | |
encrypt | number(1) | Флаг "зашифрован" (1 ) / "не зашифрован" (0 ) |
Параметры ответа
Пример ответа
<?xml version="1.0" encoding="UTF-8"?>
<response command="cancel">
<verno>342</verno>
<doc>
<sysid>22454</sysid>
<sysno>09343439921</sysno>
<doctime>20211031124845</doctime>
<prv_id>113242434</prv_id>
<docno></docno>
<amount>95</amount>
<result></result>
<comment></comment>
<extra>
<field1></field1>
<field2></field2>
</extra>
</doc>
<crypt>
<cryp_prov></cryp_prov>
<sign></sign>
<keyid>qiwi</keyid>
<encrypt>0</encrypt>
</crypt>
</response>
В ответе интерфейс Контрагента должен вернуть XML-документ с блоком <response>
и следующими тегами:
Параметр | Формат | Обяз. | Описание |
---|---|---|---|
command | cancel |
✓ | Идентификация типа запроса: запрос проверки возможности проведения платежа. Всегда равен cancel |
verno | varchar2(30) | ✓ | Версия протокола |
doc | ✓ | Блок с информацией о документе | |
sysid | varchar2(12) | ✓ | Код платежной системы |
sysno | varchar2(24) | ✓ | Номер транзакции в платежной системе |
docno | varchar2(20) | Номер документа | |
doctime | date (yyyymmddhh(24)mmss ) |
✓ | Время регистрации транзакции в платежной системе |
prv_id | varchar2(20) | Уникальный номер операции пополнения баланса получателя (в базе Контрагента), целое число длиной до 20 знаков | |
amount | number | ✓ | Сумма платежа в копейках |
result | number(3) | ✓ | Код завершения |
comment | varchar2(254) | Расшифровка кода завершения | |
timeout | number | Задержка отправки повторного запроса в минутах. Время, через которое Контрагент рекомендует повторить запрос, если в результате выполнения его ранее получен нефатальный код завершения, отличный от 0 . |
|
extra | Блок с дополнительной информацией | ||
field1, field2, fieldN | varchar2(254) | Дополнительная информация, которую можно передать информационной системе Контрагента. Эта информация может быть показана пользователю при совершении платежа. | |
crypt | Блок с электронной подписью | ||
cryp_prov | varchar2(20) | Криптопровайдер | |
sign | varchar2(50) | Подпись платежа | |
keyid | varchar2(20) | Ключ | |
encrypt | number(1) | Флаг "зашифрован" (1 ) / "не зашифрован" (0 ) |
Возвращение <result>0</result>
на запрос cancel
свидетельствует о том, что Контрагент успешно отменил операцию. В этом случае QIWI отменяет платеж.
Список кодов завершения
Код | Комментарий | Фатальность |
---|---|---|
0 | ОК | Нет |
100 | ЭП отправителя неверна | Да |
101 | Истек срок действия ключа отправителя | Да |
102 | Ключ отправителя не зарегистрирован | Да |
103 | Ключ отправителя блокирован | Да |
104 | ЭП/АСП плательщика неверна | Да |
105 | Ключ плательщика блокирован | Да |
106 | Неверный логин/пароль при подключении к серверу | Да |
109 | Подозрение в терроризме | Да |
110 | Необрабатываемый тип сообщения | Да |
111 | Неверный тип документа | Да |
112 | Неверный тип платежа | Да |
119 | Пополнение валютных счетов и карт запрещено | Да |
120 | Неверный БИК плательщика | Да |
121 | Неверный счет или БИК плательщика | Да |
122 | Неверный номер или срок действия карты плательщика | Да |
123 | Неверный ИНН плательщика | Да |
124 | Неверный идентификатор плательщика | Да |
125 | Счет плательщика блокирован | Да |
126 | Карта плательщика блокирована | Да |
127 | Ошибка в сроке действия карты плательщика | Да |
128 | Истек срок действия карты плательщика | Да |
129 | Неверный номер договора плательщика | Да |
130 | Отсутствует ФИО, место и/или дата рождения плательщика | Да |
131 | Отсутствует или неверный номер терминала | Да |
132 | Отсутствует адрес терминала | Да |
133 | Отсутствует или неверный номер агента терминала | Да |
134 | Отсутствует наименование агента терминала | Да |
135 | Отсутствует код платежной системы | Да |
136 | Отсутствует внутренний номер платежа | Да |
137 | Неверный формат поля "дата рождения" | Да |
138 | Неверный формат поля "дата учета платежа" | Да |
139 | Не заполнено поле oper_type |
Да |
140 | Неверный БИК получателя | Да |
141 | Неверный счет или БИК получателя | Да |
142 | Неверный номер карты получателя | Да |
143 | Неверный ИНН получателя | Да |
144 | Неверный Идентификатор получателя | Да |
145 | Счет получателя блокирован | Да |
146 | Карта получателя блокирована | Да |
147 | Ошибка в сроке действия карты получателя | Да |
148 | Истек срок действия карты получателя | Да |
149 | Неверный номер договора получателя | Да |
150 | Неверное имя/ФИО получателя | Да |
151 | Сумма слишком мала | Да |
152 | Сумма слишком велика/Превышен лимит платежей в день | Да |
153 | Неверный формат поля "сумма платежа" | Да |
154 | Неверный формат поля "комиссия" | Да |
155 | Сумма комиссии больше суммы платежа | Да |
156 | Превышен суточный лимит суммы платежей на один номер счета/карты/договора | Да |
157 | Сумма платежа = 0 | Да |
159 | Невозможно идентифицировать получателя платежа | Да |
160 | Отвергнут оператором банка отправителя | Да |
161 | Отвергнут оператором банка получателя | Да |
162 | Не заполнен номер телефона | Да |
171 | Запрос check не найден или выполнен с ошибкой |
Да |
172 | Неверный тип платежа | Да |
181 | Платеж невозможно отменить | Да |
189 | Платеж принят на исполнение. Ожидается подтверждение | Да |
190 | Платеж принят на обработку | Да |
191 | Платеж невозможно отменить | Да |
192 | Истек срок действия подарочного сертификата | Да |
201 | Помещен в архив | Да |
299 | Блокировка банка-кредитора | Да |
300 | По техническим причинам данная операция не может быть выполнена. Для осуществления платежа обратитесь, пожалуйста, в свой обслуживающий банк | Да |
301 | Прочие ошибки системы | Да |
Реестры платежей
Передача реестров платежей выполняется по электронной почте с использованием одного из следующих средств шифрования:
- Криптопровайдер CryptoPro GOST 34.10-2001 CSP
- Средство ЭП КриптоАРМ
- Удостоверяющий центр ООО "КРИПТО-ПРО"
Схема взаимодействия по реестрам:
Рекомендации по реализации протокола
Предпочтительны следующие варианты реализации Электронной цифровой подписи:
- Без использования ЭЦП
- RSA УЦ Киви Банк
- Крипто-Про ГОСТ
Возможны следующие варианты реализации канала связи:
- VPN (IPSec), при этом внутри канала VPN возможно взаимодействие как по HTTP, так и по HTTPS.
- Без VPN:
- HTTPS односторонняя аутентификация (серверная), ключ RSA
- HTTPS двусторонняя аутентификация(с клиентским сертификатом), ключ RSA
- HTTPS по ГОСТ
Рекомендации по тестированию
При подключении обязательно проводится тестирование взаимодействия систем. Вам необходимо предоставить тестовые данные:
- Если идентификатором является счет, то необходим открытый и закрытый счет.
- Если идентификатором является карта, то необходимы номера открытой карты, закрытой карты, заблокированной карты.
- В отношении других идентификаторов также необходимо обеспечить наибольшее количество состояний идентификатора, чтобы проверить реакцию сервиса.
Обычно проводится следующий набор тестов:
- С корректным идентификатором:
- Отправка
check
, сумма 50 рублей - Отправка
check
, сумма 0 рублей - Отправка
check
, сумма -1 рубль - Отправка
check
+pay
, сумма произвольная - Отправка двух пар запросов
check
+pay
с одинаковыми значениямиsysid
иsysno
и произвольной суммой, для проверки того, что платеж не будет проведен дважды. - Отправка запросов
check
+pay
с корректным идентификатором и произвольной суммой. После этого отправляетсяcheck
+pay
с такими же значениямиsysid
иsysno
, что и первая пара запросов, но с неверным идентификатором, для проверки, что система провайдера возвращает статус завершения первого пополнения. Разумеется, в действительности, такой ситуации не может возникнуть, когда поступают два запроса на пополнение с одинаковымиsysid
иsysno
, но разными идентификаторами.
- Отправка
- С некорректным идентификатором:
- Отправка
check
, сумма 50 рублей - Отправка
check
+pay
и произвольной суммой.
- Отправка
Если для совершения операции используется несколько идентификаторов, например, номер счета и ФИО, то количество тестов увеличивается из-за комбинирования вариантов. Например, выполняются тесты с корректным номером счета и неправильным ФИО.
Часто задаваемые вопросы
Вопрос: Если мы получили запрос check
со значениями sysno
и sysid
, которые уже приходили ранее в запросе check
, мы должны выдать ошибку или выдать результат "прошлого check"?
Ответ: Ожидается результат "прошлого check".
Вопрос: Если мы получили запрос pay
, для которого не было запроса check
с теми же значениями sysno
и sysid
, мы должны выдать ошибку?
Ответ: Да, необходимо возвращать ошибку 171
(Check не найден или прошел с ошибкой).
Вопрос: Если мы получили запрос pay
, должны ли мы проверять идентичность всех параметров этого запроса и ранее полученного запроса check
с теми же значениями sysno
и sysid
?
Ответ: Нет, не должны. Опционально, можно проверить сумму.
Вопрос: Поле sysid
— код платежной системы. Какая платежная система имеется в виду, и что это за код?
Ответ: Параметр sysid
— это id процессинга внутри QIWI, из которого выполнен платеж. На стороне Контрагента sysid
используется для проверки уникальности пары sysid
+ sysno
.
Вопрос: В каких полях будут передаваться пользовательские идентификаторы?
Ответ: Номер договора — rec_agrno
, Номер счета — rec_cre
, Номер карты — rec_cardno
Вопрос: В чем смысл параметра mesid
?
Ответ: При стандартной реализации значение будет всегда будет 3005
— финансовая транзакция для запросов check
и pay
. При согласовании нестандартной логики (например, возврат клиенту в интерфейс его ФИО или задолженности) могут использоваться другие значения.
Вопрос: Можете ли вы обрабатывать значение rec_name
из нашего ответа на запрос check
, в котором мы будет передавать ФИО владельца указанной карты/счёта, для проверки на вашей стороне и последующей передачи этого значения в соответствующем поле запроса pay
?
Ответ: Да, можем. В этом случае будет использоваться следующая последовательность:
- Мы посылаем вам запрос
check
с параметром<mesid>4444</mesid>
. - В ответе вы подтверждаете возможность пополнения и возвращаете ФИО.
- ФИО отображается в интерфейсе.
- Клиент проводит платеж.
- Вы получаете запросы
check
иpay
с<mesid>3005</mesid>
.
Вопрос: Какие поля обязательны для заполнения в наших ответных сообщениях на запросы check
и pay
?
Ответ: Следующие поля обязательны:
sysid
sysno
doctime
– дата фиксации операции в системе банкаresult
comment
- при возникновении ошибки желательно точное указание причины ошибкиprv_id