Вопросы
bss@qiwi.com
NAV Navbar
Примеры

Протокол взаимодействия с провайдерами QIWI

API предназначен для приёма платежей через интерфейсы QIWI Кошелька. Подробности см. в разделе «Руководства по интеграции» → «Приём платежей» → «Приём платежей наличными».

Используемые в тексте термины описаны в разделе «Руководства по интеграции» → «Термины и бизнес-сущности».

Взаимодействие информационных систем QIWI и провайдера строится в режиме "запрос-ответ", где инициатором запроса всегда является QIWI, а отвечающей стороной — провайдер.

Требования к интерфейсу провайдера

  1. Интерфейс должен принимать запросы по протоколу HTTPS на один из следующих TCP-портов: 80, 81, 443, 8008, 8080, 8081, 8090, 8443, 4433. Использование иных портов не допускается.
  2. Интерфейс должен обрабатывать запросы, передаваемые методами HTTP GET, HTTP POST. Методом GET параметры передаются в пути запроса, методом POST — в теле запроса в виде URLencoded-строки.
  3. Интерфейс должен формировать ответ на запрос в формате XML в кодировке UTF-8.
  4. Скорость ответа не должна превышать 60 секунд, в ином случае сервер QIWI разрывает соединение по таймауту.
  5. Если количество платежей за услуги провайдера ожидается интенсивным (до 10 платежей в минуту и более), интерфейс должен поддерживать многопоточную коммуникацию до 10-15 соединений одновременно.
  6. Используйте сертификаты для безопасной работы с сервисами QIWI.

    SSL-сертификат (SSL – Secure Socket Layer) *.qiwi.com предназначен для шифрования трафика между партнером и сервисами QIWI, чтобы не передавать персональные и платёжные данные по сети в открытом виде.

    У SSL-сертификата есть срок действия, поэтому процедура его замены должна быть регулярной. QIWI обновляет сертификат ежегодно.

    Скачайте по ссылке https://static.qiwi.com/ru/files/ssl_certificate_QIWI.zip актуальный публичный сертификат для использования клиентским программным обеспечением.

  7. Интерфейс должен принимать запросы только с IP-адресов подсетей QIWI:

Авторизация запросов

Для авторизации провайдер предоставил пару Login:Password.

Пара кодируется в Base64:

BASE64("Login:Password") = "***"

В HTTP-запросе от QIWI передаётся заголовок

Authorization: Basic ***

По умолчанию запросы от QIWI поступают без авторизационных данных. Чтобы добавить авторизационные данные в запросы, предоставьте при подключении идентификатор (логин) и секретный пароль.

Сервер QIWI будет передавать логин и пароль по стандартным правилам basic-аутентификации:

Также поддерживается авторизация запросов по клиентскому SSL-сертификату. Для использования такой авторизации предоставьте клиентский сертификат в формате PKCS12 при подключении.

Проверка статуса абонента в информационной системе провайдера

При получении запроса провайдер:

Параметры запроса

Запрос проверки статуса абонента

POST /payment_app.cgi HTTP/1.1
Accept: application/xml
Content-type: application/x-www-form-urlencoded; charset=utf-8
Host: example.com:8443

command=check&txn_id=1234567&account=4950001111&sum=10.45

Запрос проверки статуса абонента с дополнительными параметрами

POST /payment_app.cgi HTTP/1.1
Accept: application/xml
Content-type: application/x-www-form-urlencoded; charset=utf-8
Host: example.com:8443

command=check&txn_id=1234567&account=4950001111&sum=10.45&pay_type=1&account1=test1&data1=osmp
Параметр Описание
command Обязательный параметр. Идентификатор типа запроса: проверить счет абонента. Всегда равен check
txn_id Обязательный параметр. Идентификатор платежа в информационной системе QIWI. В информационной системе провайдера не должно содержаться двух успешно проведенных платежей с одним и тем же идентификатором платежа. При получении запроса с txn_id, уже существующим в информационной системе провайдера, провайдер должен вернуть результат обработки предыдущего запроса.
account Обязательный параметр. Идентификатор абонента в информационной системе провайдера
sum Обязательный параметр. Сумма операции
pay_type Идентификатор услуги, предоставляемой провайдером (Используется, если провайдер предоставляет более 1 услуги)
prv_id Внутренний идентификатор провайдера в информационной системе QIWI (используется для консолидаторов)
data1,data2,…,dataN Дополнительные параметры, передаваемые провайдеру
account1, account2,…,accountN Номера дополнительных счетов абонента в информационной системе провайдера

Параметры ответа

Ответ на запрос проверки статуса абонента

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <osmp_txn_id>1234567</osmp_txn_id>
    <result>0</result>
    <comment>Some comment</comment>
</response>

Ответ на запрос проверки статуса абонента с дополнительными параметрами

<?xml version=”1.0” encoding="UTF-8"?>
<response>
         <osmp_txn_id>1234567</osmp_txn_id>
         <result>0</result>
         <fields>
               <field1 name="name1" type="disp">value1</field1>
               <field2 name="name2" type="disp">value2</field2>
               <field3 name="name3" type="prt-data">value3</field3>
         </fields>
</response>

В ответе интерфейс провайдера должен вернуть XML-документ, содержащий блок <response> со следующими тегами:

Тег Описание
osmp_txn_id Обязательный параметр. Идентификатор транзакции в информационной системе QIWI (txn_id из запроса)
result Обязательный параметр. Код ошибки. В случае, если платеж разрешен, возвращается 0.
comment Комментарий к операции
fields Тег с информацией об абоненте или об операции
fields.field1, …, fields.fieldN Параметры, содержащие информацию
fields.field1.type, …, fields.fieldN.type Тип параметра. Возможно использование следующих типов параметров:
disp – информация для отображения клиенту при совершении платежа (по умолчанию, если тип не указан);
info – информация для сохранения в информационной системе QIWI;
prt-data — текст для печати на чеке при совершении платежа (используется только для платежей с QIWI Терминалов)
fields.field1.name, …, fields.fieldN.name Имя параметра. Если не указано, присваивается имя disp1,..,dispN (в соответствии с порядковым номером тега fieldN)
pay_id Информация о шлюзе провайдера, в котором будет зафиксирован платеж. Информация о том, какие шлюзы доступны для выбора, уточняется при тестировании взаимодействия с информационной системой QIWI.

Регистрация платежа

При получении запроса провайдер пополняет баланс абонента на указанную сумму.

Параметры запроса

Запрос регистрации платежа

POST /payment_app.cgi HTTP/1.1
Accept: application/xml
Content-type: application/x-www-form-urlencoded; charset=utf-8
Host: example.com:8443

command=pay&txn_id=1234567&txn_date=20220815120133&account=4950001111&sum=10.45

Запрос регистрации платежа с дополнительными параметрами

POST /payment_app.cgi HTTP/1.1
Accept: application/xml
Content-type: application/x-www-form-urlencoded; charset=utf-8
Host: example.com:8443

command=pay&txn_id=1234567&txn_date=20220815120133&account=4950001111&sum=10.45&pay_type=1&account1=test1&data1=osmp
Параметр Описание
command Обязательный параметр. Идентификатор типа запроса: пополнить баланс абонента. Всегда равен pay
txn_id Обязательный параметр. Идентификатор платежа в информационной системе QIWI. В информационной системе провайдера не должно содержаться двух успешно проведенных платежей с одним и тем же идентификатором платежа. При получении запроса с txn_id, уже существующим в информационной системе провайдера, провайдер должен вернуть результат обработки предыдущего запроса.
txn_date Обязательный параметр. Дата операции в формате YYYYMMDDHHMMSS
account Обязательный параметр. Идентификатор абонента в информационной системе провайдера
sum Обязательный параметр. Сумма операции
pay_type Идентификатор услуги, предоставляемой провайдером (Используется, если провайдер предоставляет более 1 услуги)
prv_id Внутренний идентификатор провайдера в информационной системе QIWI (используется для консолидаторов)
data1, data2,…, dataN Дополнительные параметры, передаваемые провайдеру
account1, account2,…, accountN Номера дополнительных счетов абонента в информационной системе провайдера

Параметры ответа

Ответ на запрос регистрации платежа

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <osmp_txn_id>1234567</osmp_txn_id>
    <prv_txn>123</prv_txn>
    <sum>10.00</sum>
    <result>0</result>
</response>

Ответ на запрос регистрации платежа с дополнительными параметрами

<?xml version=”1.0” encoding="UTF-8"?>
<response>
         <osmp_txn_id>1234567</osmp_txn_id>
         <prv_txn>2016</prv_txn>
         <sum>1.00</sum>
         <result>0</result>
         <fields>
               <field1 name="name1" type="disp">value1</field1>
               <field2 name="name2" type="disp">value2</field2>
               <field3 name="name3" type="prt-data">value3</field3>
         </fields>
</response>

В ответе интерфейс провайдера должен вернуть XML-документ, содержащий блок <response> со следующими тегами:

Тег Описание
osmp_txn_id Обязательный параметр. Идентификатор транзакции в информационной системе QIWI (txn_id из запроса)
prv_txn Обязательный параметр. Уникальный номер операции пополнения баланса абонента (в информационной системе провайдера)
sum Обязательный параметр. Сумма платежа, переданная провайдеру
result Обязательный параметр. Код ошибки (result=0 в случае успешной регистрации платежа)
comment Комментарий к операции
fields Тег с информацией об абоненте или об операции
fields.field1, …, fields.fieldN Параметры, содержащие информацию
fields.field1.type, …, fields.fieldN.type Тип параметра. Возможно использование следующих типов параметров:
disp – информация для отображения клиенту при совершении платежа (по умолчанию, если тип не указан);
info – информация для сохранения в информационной системе QIWI;
prt-data – текст для печати на чеке при совершении платежа (используется только для платежей с QIWI Терминалов)
fields.field1.name, …, fields.fieldN.name Имя параметра. Если не указано, присваивается имя disp1,..,dispN (в соответствии с порядковым номером тега fieldN)
pay_id Информация о шлюзе провайдера, в котором будет зафиксирован платеж. Информация о том, какие шлюзы доступны для выбора, уточняется при тестировании взаимодействия с информационной системой QIWI.

Формат стандартного реестра платежей

Информационная система QIWI включает в реестр только успешно проведенные платежи.

Реестр — это текстовый файл следующего формата:

Поля разделены знаком табуляции, дробная часть суммы отделена точкой, дата/время Московские, перевод строки может состоять из символов x0D x0A, или только из x0D. Например:

test@osmp.ru

12345678 20.08.2021 12:13:14 0957000059 123.45

12345678 20.08.2021 13:22:34 8002000059 0.01

12345678 20.08.2021 14:55:11 9161234567 123.01

12345689 20.08.2021 14:55:12 0732123456 1000.00

Total: 4 1246.47

Коды ошибок

Коды ошибок могут быть фатальные и нефатальные:

Код Описание Фатальность
0 ОК Нет
1 Временная ошибка. Повторите запрос позже Нет
4 Неверный формат идентификатора абонента Да
5 Идентификатор абонента не найден (Ошиблись номером) Да
7 Прием платежа запрещен провайдером Да
8 Прием платежа запрещен по техническим причинам Да
79 Счет абонента не активен Да
90 Проведение платежа не окончено Нет
241 Сумма слишком мала Да
242 Сумма слишком велика Да
243 Невозможно проверить состояние счета Да
300 Другая ошибка провайдера Нет