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

Общая информация

Протокол онлайн платежей позволяет начать быстро и безопасно принимать платежи с банковских карт.

Протокол представляет собой полнофункциональное API для платежных операций. API использует REST-архитектуру. Параметры передаются методом PUT в теле запроса в формате JSON.

Способы взаимодействия

Протокол онлайн платежей позволяет использовать несколько вариантов взаимодействия:

Доступные методы

Метод API Checkout
Одношаговая авторизация средств + +
Двухшаговая авторизация средств + +
Токенизация + +
Оплата токеном + -

Начало работы

Для того, чтобы начать работу с протоколом, необходимо выполнить 3 простых шага.

Шаг 1. Оставить заявку на подключение b2b.qiwi.com

После обработки заявки с вами свяжется менеджер, чтобы обсудить возможные варианты подключения, собрать необходимые документы и начать интеграцию.

Шаг 2. Получить доступ к личному кабинету

При подключении к Протоколу онлайн платежей вы получите ваш id и доступ в личный кабинет. Доступ отправляется по email на указанный вами адрес. Более подробно с функциональностью можно ознакомиться в Личном кабинете.

Шаг 3. Выпустить secret key для взаимодействия

Для использования API и отправки запросов используется параметр авторизации - SECRET_KEY. Параметр авторизации указывается в заголовке Authorization, значение которого формируется как Bearer SECRET_KEY.

Тестовый и боевой режим

Все запросы в Протоколе онлайн платежей необходимо отправлять на URL:

https://api.qiwi.com/partner/{API_REQUESTS}

При этом при подключении для вас создается id, которая находится в тестовом режиме. В тестовом режиме вы можете проводить операции без списания средств с банковской карты. Подробнее о тестовом режиме можно узнать в разделе Тестовые данные.

Когда интеграция на вашей стороне закончена, мы переведем id в боевой режим. В боевом режиме происходят реальные списания с карт.

Checkout

Быстрый старт

Выставите счет покупателю

Прежде всего, необходимо получить ссылку на платежную форму и перенаправить покупателя по этой ссылке.

Пример тела запроса

 {
   "amount": {  
     "currency": "RUB",  
     "value": 100.00
   },
   "expirationDateTime": "2018-04-13T14:30:00+03:00"
   }

Отправьте PUT-запрос на /bill/v1/bills/{billId}, передав параметры:

Параметр Описание Тип
billId Уникальный идентификатор счета в системе мерчанта string
amount.value Сумма, на которую выставляется счет, округленная в меньшую сторону до 2 десятичных знаков Number(6.2)
amount.currency Валюта счета (Alpha-3 ISO 4217 код)
expirationDateTime Дата, до которой счет будет доступен для оплаты. Если счет не будет оплачен до этой даты, ему присваивается финальный статус EXPIRED и последующая оплата станет невозможна.
URL-закодированная строка
ГГГГ-ММ-ДДTччмм+\-чч:мм

В ответ вы получите сообщение со следующими данными:

Пример тела ответа

 {
    "siteId": "23044",
    "billId": "893794793973",
    "amount": {
      "value": 100,
      "currency": "RUB"
    },
    "status": {
      "value": "WAITING",
      "changedDateTime": "2018-03-05T11:27:41+03:00"
    },
    "comment": "Text comment",
    "creationDateTime": "2018-03-05T11:27:41",
    "expirationDateTime": "2018-04-13T14:30:00+03:00",
    "payUrl": "https://oplata.qiwi.com/form/?invoice_uid=d875277b-6f0f-445d-8a83-f62c7c07be77"
  }
Параметр Тип Описание
billId String Уникальный идентификатор счета в системе мерчанта
siteId String Идентификатор сайта мерчанта в QIWI Кассе
amount Object Данные о сумме счета
amount.value Number Сумма счета, округленная до 2 знаков после запятой в меньшую сторону
amount.currency String Валюта счета (Alpha-3 ISO 4217 код)
status Object Данные о статусе счета
status.value String Текущий статус счета
status.changedDateTime String Дата обновления статуса. Формат даты:
YYYY-MM-DDThh:mm:ss±hh
customFields Object Дополнительные поля
customer Object Идентификаторы пользователя. Возможные опции: email, phone, account
comment String Комментарий к счету
creationDateTime String Системная дата создания счета. Формат даты:
YYYY-MM-DDThh:mm:ss
payUrl String Ссылка на созданную платежную форму
expirationDateTime String Срок действия созданной формы для оплаты. Формат даты:
YYYY-MM-DDThh:mm:ss+\-hh:mm

Подробнее

Перенаправьте клиента на полученную в ответе ссылку

Для того, чтобы оплатить заказ, клиенту необходимо перейти по ссылке, указанной в поле payUrl в ответе. Перенаправьте клиента по ссылке и ожидайте получения уведомления об оплате.

Дождитесь уведомления об оплате

После того, как клиент оплатит выставленный вами счет, вам будет отправлено серверные уведомления двух типов. Первое уведомление - уведомление об оплате выставленного счета. Второе уведомление - об успешно прошедшем платеже.

Уведомление о проведении платежа

Пример уведомления о проведении платежа

 {
  "payment":{
    "paymentId":"9999999",
    "type":"PAYMENT",
    "createdDateTime":"2019-06-03T08:19:16+03:00",
    "status":{
      "value":"SUCCESS",
      "changedDateTime":"2019-06-03T08:19:16+03:00"},
    "amount":{
      "value":111.11,
      "currency":"RUB"},
    "paymentMethod":{
      "type":"CARD",
      "maskedPan":"411111******0001"},
    "customer":{},
    "billId":"f1e1a1f11ae111a11a111111e1111111",
    "flags":["SALE"]
  },
  "type":"PAYMENT",
  "version":"1"
}
Параметр Тип Описание
paymentId String Уникальный идентификатор счета в системе мерчанта
type String Идентификатор сайта мерчанта в QIWI Кассе
amount Object Данные о сумме счета
amount.value Number Сумма счета, округленная до 2 знаков после запятой в меньшую сторону
amount.currency String Валюта счета (Alpha-3 ISO 4217 код)
status Object Данные о статусе счета
status.value String Текущий статус счета
status.changedDateTime String Дата обновления статуса. Формат даты:
YYYY-MM-DDThh:mm:ss±hh
customFields Object Дополнительные поля
customer Object Идентификаторы пользователя. Возможные опции: email, phone, account
comment String Комментарий к счету
creationDateTime String Системная дата создания счета. Формат даты:
YYYY-MM-DDThh:mm:ss
payUrl String Ссылка на созданную платежную форму
expirationDateTime String Срок действия созданной формы для оплаты. Формат даты:
YYYY-MM-DDThh:mm:ss+\-hh:mm

Пример уведомления об оплате счета


{ "bill":
  {  
     "siteId":"23044",
     "billId":"1519892138404fhr7i272a2",
     "amount":{  
        "value":"100",
        "currency":"RUB"
     },
     "status":{  
        "value":"PAID",
        "datetime":"2018-03-01T11:16:12"
     },
     "customer":{},
     "customFields":{},
     "creationDateTime":"2018-03-01T11:15:39",
     "expirationDateTime":"2018-04-01T11:15:39+03:00"
   },
  "version":"1"
}

Уведомление об оплате счета

Параметр Тип Описание
billId String Уникальный идентификатор счета в системе мерчанта
siteId String Идентификатор сайта мерчанта в QIWI Кассе
amount Object Данные о сумме счета
amount.value Number Сумма счета, округленная до 2 знаков после запятой в меньшую сторону
amount.currency String Валюта счета (Alpha-3 ISO 4217 код)
status Object Данные о статусе счета
status.value String Текущий статус счета
status.changedDateTime String Дата обновления статуса. Формат даты:
YYYY-MM-DDThh:mm:ss±hh
customFields Object Дополнительные поля
customer Object Идентификаторы пользователя. Возможные опции: email, phone, account
comment String Комментарий к счету
creationDateTime String Системная дата создания счета. Формат даты:
YYYY-MM-DDThh:mm:ss
payUrl String Ссылка на созданную платежную форму
expirationDateTime String Срок действия созданной формы для оплаты. Формат даты:
YYYY-MM-DDThh:mm:ss+\-hh:mm

Подробнее о настройке серверных уведомлений, а также о различных типах уведомлений можно узнать в разделе Серверные уведомления.

Сделать возврат покупателю

Для того, чтобы сделать возврат по операциям, необходимо отправить запрос на возврат.

Запрос отправляется на URL /bill/v1/bills/{billId}/refunds/{refundId}

Пример тела запроса на возврат.

{
    "amount": {
         "currency": "RUB",
         "value": 42.24
    }
}
Параметр Тип Описание
billId String Уникальный идентификатор счета
refundId String Уникальный идентификатор возврата в системе мерчанта
amount.value Number Сумма счета, округленная до 2 знаков после запятой в меньшую сторону
amount.currency String Идентификатор валюты счета (Alpha-3 ISO 4217 код)

Подробнее

Дополнительно

Двухшаговый сценарий

Как произвести холдирование средств

Пример запроса на холдирование:

{
   "amount": {  
     "currency": "RUB",  
     "value": 42.24
   },
   "comment": "Spasibo",
   "expirationDateTime": "2019-09-13T14:30:00+03:00",
   "customer": {},
   "customFields": {},
   "paymentFlags":["AUTH"]
   }

Для этого необходимо добавить в запрос выставления счета дополнительный параметр: "paymentFlags":["AUTH"].

Параметр Описание Тип
billId Уникальный идентификатор счета в системе мерчанта string
amount.value Сумма, на которую выставляется счет, округленная в меньшую сторону до 2 десятичных знаков Number(6.2)
amount.currency Валюта счета (Alpha-3 ISO 4217 код)
expirationDateTime Дата, до которой счет будет доступен для оплаты. Если счет не будет оплачен до этой даты, ему присваивается финальный статус EXPIRED и последующая оплата станет невозможна.
URL-закодированная строка
ГГГГ-ММ-ДДTччмм+\-чч:мм
paymentFlags Дополнительные платежные флаги Array of strings
Доступные значения: "AUTH" - выполнить двухшаговый сценарий авторизации средств

Пример ответа:


{
    "siteId": "test-01",
    "billId": "gg",
    "amount": {
        "currency": "RUB",
        "value": "42.24"
    },
    "status": {
        "value": "WAITING",
        "changedDateTime": "2019-08-28T16:26:36.835+03:00"
    },
    "customFields": {
        "AUTH": "true"
    },
    "comment": "Spasibo",
    "creationDateTime": "2019-08-28T16:26:36.835+03:00",
    "expirationDateTime": "2019-09-13T14:30:00+03:00",
    "payUrl": "https://oplata.qiwi.com/form/?invoice_uid=78d60ca9-7c99-481f-8e51-0100c9012087"}

В ответе вы получите ссылку на платежную форму:

Параметр Тип Описание
billId String Уникальный идентификатор счета в системе мерчанта
siteId String Идентификатор сайта мерчанта в QIWI Кассе
amount Object Данные о сумме счета
amount.value Number Сумма счета, округленная до 2 знаков после запятой в меньшую сторону
amount.currency String Валюта счета (Alpha-3 ISO 4217 код)
status Object Данные о статусе счета
status.value String Текущий статус счета
status.changedDateTime String Дата обновления статуса. Формат даты:
YYYY-MM-DDThh:mm:ss±hh
customFields Object Дополнительные поля, включает paymentFlags
customFields.AUTH String Идентификатор транзакции с двухшаговой авторизацией
customer Object Идентификаторы пользователя. Возможные опции: email, phone, account
comment String Комментарий к счету
creationDateTime String Системная дата создания счета. Формат даты:
YYYY-MM-DDThh:mm:ss
payUrl String Ссылка на созданную платежную форму
expirationDateTime String Срок действия созданной формы для оплаты. Формат даты:
YYYY-MM-DDThh:mm:ss+\-hh:mm

Узнать id транзакции для подтверждения

Пример уведомления

{
  "payment":
  {
    "paymentId":"804900",  <==paymentId, необходимый для capture
    "type":"PAYMENT",
    "createdDateTime":"2019-08-28T12:58:49+03:00",
    "status":{
        "value":"SUCCESS",
        "changedDateTime":"2019-08-28T12:58:53+03:00"
    },
    "amount":{
      "value":1.00,
      "currency":"RUB"
    },
    "paymentMethod":{
      "type":"CARD",
      "maskedPan":"444444\*\*\*\*\*\*4444",
      "rrn":null,
      "authCode":null,
      "type":"CARD"
    },
    "customer":{
      "phone":"75167693659"
    },
    "gatewayData":{
      "type":"ACQUIRING",
      "eci":"6",
      "authCode":"181218"
    },
    "billId":"autogenerated-a51d0d2c-6c50-405d-9305-bf1c13a5aecd",
    "flags":[]
  },
  "type":"PAYMENT",
  "version":"1"
}

После того, как платеж успешно совершен, вам придет серверное уведомление. Используйте параметр paymentId из уведомления для подтверждения операции - capture.

Параметр Тип Описание
paymentId String Уникальный идентификатор счета в системе мерчанта
type String Идентификатор сайта мерчанта в QIWI Кассе
amount Object Данные о сумме счета
amount.value Number Сумма счета, округленная до 2 знаков после запятой в меньшую сторону
amount.currency String Валюта счета (Alpha-3 ISO 4217 код)
status Object Данные о статусе счета
status.value String Текущий статус счета
status.changedDateTime String Дата обновления статуса. Формат даты:
YYYY-MM-DDThh:mm:ss±hh
customFields Object Дополнительные поля
customer Object Идентификаторы пользователя. Возможные опции: email, phone, account
comment String Комментарий к счету
creationDateTime String Системная дата создания счета. Формат даты:
YYYY-MM-DDThh:mm:ss
payUrl String Ссылка на созданную платежную форму
expirationDateTime String Срок действия созданной формы для оплаты. Формат даты:
YYYY-MM-DDThh:mm:ss+\-hh:mm

Подтвердить операцию

Используя номер операции (paymentId), можно выполнить capture - подтверждение операции.

Структура запроса:

PUT-запрос c пустым телом на

https://api.qiwi.com/partner/payin/v1/sites/{siteId}/payments/{paymentId}/captures/{captureId}

где:

Подробнее

Запросы, Статусы и Ошибки

Создание счета

 {
   "amount": {  
     "currency": "RUB",  
     "value": 100.00
   },
   "comment": "Text comment",
   "expirationDateTime": "2018-04-13T14:30:00+03:00",
   "customer": {},
   "customFields": {}  
   }
}
 {
    "siteId": "23044",
    "billId": "893794793973",
    "amount": {
      "value": 100,
      "currency": "RUB"
    },
    "status": {
      "value": "WAITING",
      "changedDateTime": "2018-03-05T11:27:41+03:00"
    },
    "comment": "Text comment",
    "creationDateTime": "2018-03-05T11:27:41",
    "expirationDateTime": "2018-04-13T14:30:00+03:00",
    "payUrl": "https://oplata.qiwi.com/form/?invoice_uid=d875277b-6f0f-445d-8a83-f62c7c07be77"
  }
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

Операция возврата

{
  "amount": {
    "value": 2.34,
    "currency": "RUB"
  }
}
{
    "amount": {
      "value": 50.50,
      "currency": "RUB"
    },
    "datetime": "2018-03-01T16:06:57+03",
    "refundId": "1",
    "status": "PARTIAL"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

API

Быстрый старт

Пример тела запроса

{
  "amount": {
    "currency": "RUB",
    "value": 1.00
  },
  "paymentMethod" : {
    "type" : "CARD",
    "pan" : "4444443616621049",
    "expiryDate" : "12/19",
    "cvv2" : "123",
    "holderName" : "unknown cardholder"
  }
}

Для того, чтобы позволить вашему клиенту произвести оплату, необходимо создать платеж. Выполните следующие действия:

1. Авторизируйте платеж

Отправьте PUT-запрос на payin/v1/sites/{siteUid}/payments/{paymentId} с параметрами:

Подробнее

В ответ вы получите следующие данные:

Пример тела ответа

{
    "paymentId": "1811",
    "billId": "autogenerated-a29ea8c9-f9d9-4a60-87c2-c0c4be9affbc",
    "createdDateTime": "2019-08-15T13:28:26+03:00",
    "amount": {
        "currency": "RUB",
        "value": "1.00"
    },
    "capturedAmount": {
        "currency": "RUB",
        "value": "0.00"
    },
    "refundedAmount": {
        "currency": "RUB",
        "value": "0.00"
    },
    "paymentMethod": {
        "type": "CARD",
        "maskedPan": "444444******1049",
        "rrn": "123",
        "authCode": "181218",
        "type": "CARD"
    },
    "status": {
        "value": "WAITING",
        "changedDateTime": "2019-08-15T13:28:26+03:00"
    }
}
Параметр Тип Описание
paymentId String Уникальный идентификатор счета в системе мерчанта
type String Идентификатор сайта мерчанта в QIWI Кассе
amount Object Данные о сумме счета
amount.value Number Сумма счета, округленная до 2 знаков после запятой в меньшую сторону
amount.currency String Валюта счета (Alpha-3 ISO 4217 код)
status Object Данные о статусе счета
status.value String Текущий статус счета
status.changedDateTime String Дата обновления статуса. Формат даты:
YYYY-MM-DDThh:mm:ss±hh
customFields Object Дополнительные поля
customer Object Идентификаторы пользователя. Возможные опции: email, phone, account
comment String Комментарий к счету
creationDateTime String Системная дата создания счета. Формат даты:
YYYY-MM-DDThh:mm:ss
payUrl String Ссылка на созданную платежную форму
expirationDateTime String Срок действия созданной формы для оплаты. Формат даты:
YYYY-MM-DDThh:mm:ss+\-hh:mm

Чаще всего для создания платежа вам понадобится пройти дополнительную аутентификацию. Такое может произойти, если:

Если есть необходимость в дополнительной аутентификации, в ответе вы получите дополнительное поле requirements c полями:

"requirements" : {
    "threeDS" : {
      "pareq" : "eJyrrgUAAXUA+Q==",
      "acsUrl" : "https://test.paymentgate.ru/acs/auth/start.do"
    }
}

2. (опционально) Завершите аутентификацию клиента

Отправьте PUT-запрос на payin/v1/sites/{siteUid}/payments/{paymentId}/complete, указав параметры:

{
  "threeDS": {
    "pares": "eJzVWFevo9iyfu9fMZrzaM0QjWHk3tIiGptgooE3cgabYMKvv3jvTurTc3XOfbkaJMuL...."
  },
  "cvv2": {
    "cvv2": "string"
  }
}

Подробнее

3. Подтвердите платеж

Используя номер операции (paymentId), можно произвести capture - подтверждение операции.

Структура запроса:

PUT-запрос c пустым телом на

https://api.qiwi.com/partner/payin/v1/sites/{siteId}/payments/{paymentId}/captures/{captureId}

где:

Подробнее

Пример подтверждения

curl https://api.qiwi.com/partner/payin/v1/sites/test-01/payments/2820220333/captures/43234
-X PUT
-H 'Accept: application/json'
-H 'Content-Type: application/json'
-H 'Authorization: Bearer NDQzNGHJK43JFJDK595FJFJMjlCRkFFRDM5OE
-d ‘{}'

Запросы, Cтатусы и Ошибки

[PAYMENT]: Платеж

{
  "callbackUrl": "https://example.com/callbacks",
  "comment": "Example payment",
  "paymentId": "string",
  "billId": "string",
  "amount": {
    "currency": "RUB",
    "value": 200
  },
  "paymentMethod" : {
    "type" : "CARD",
    "pan" : "4444443616621049",
    "expiryDate" : "12/19",
    "cvv2" : "123",
    "holderName" : "CARDHOLDER NAME"
  },
  "customer": {
    "account": "string",
    "address": {
      "city": "Moscow",
      "country": "Russian Federation",
      "details": "Severnoe chertanovo microdistrict 1a 1",
      "region": "Moscow city"
    },
    "email": "customer@example.com",
    "phone": "+79991234567"
  },
  "deviceData": {
    "datetime": "2017-09-03T14:30:00+03:00",
    "fingerprint": "TW96aWxsYS81LjAgKHBsYXRmb3JtOyBydjpnZWNrb3ZlcnNpb24p",
    "ip": "127.0.0.1",
    "screenResolution": "1280x1024",
    "timeOnPage": 1440,
    "userAgent": "Mozilla/5.0 (platform; rv:geckoversion) Gecko/geckotrail Firefox/firefoxversion"
  },
  "extras": {},
  "flags": [
    "SAVE_CARD"
  ]
}
{
  "paymentId" : "223E",
  "createdDatetime" : "2018-11-01T17:10:31.284+03:00",
  "amount" : {
    "currency" : "RUB",
    "value" : "200.00"
  },
  "capturedAmount" : {
    "currency" : "RUB",
    "value" : "0.00"
  },
  "refundedAmount" : {
    "currency" : "RUB",
    "value" : "0.00"
  },
  "paymentMethod" : {
    "type" : "CARD",
    "maskedPan" : "444444******1049"
  },
  "customer" : { },
  "deviceData" : { },
  "requirements" : {
    "threeDS" : {
      "pareq" : "eJyrrgUAAXUA+Q==",
      "acsUrl" : "https://test.paymentgate.ru/acs/auth/start.do"
    }
  },
  "status" : {
    "value" : "WAITING",
    "changedDateTime" : "2018-11-01T17:10:32.607+03:00"
  },
  "extras" : { },
  "flags" : [ ]
}
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

Статус платежа

{
  "paymentId" : "223E",
  "createdDatetime" : "2018-11-01T17:10:31.284+03:00",
  "amount" : {
    "currency" : "RUB",
    "value" : "200.00"
  },
  "capturedAmount" : {
    "currency" : "RUB",
    "value" : "0.00"
  },
  "refundedAmount" : {
    "currency" : "RUB",
    "value" : "0.00"
  },
  "paymentMethod" : {
    "type" : "CARD",
    "maskedPan" : "444444******1049"
  },
  "customer" : { },
  "deviceData" : { },
  "requirements" : {
    "threeDS" : {
      "pareq" : "eJyrrgUAAXUA+Q==",
      "acsUrl" : "https://test.paymentgate.ru/acs/auth/start.do"
    }
  },
  "status" : {
    "value" : "WAITING",
    "changedDateTime" : "2018-11-01T17:10:32.607+03:00"
  },
  "extras" : { },
  "flags" : [ ]
}
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

[COMPLETE]: Завершение аутентификации

{
  "threeDS": {
    "pares": "eJzVWFevo9iyfu9fMZrzaM0QjWHk3tIiGptgooE3cgabYMKvv3jvTurTc3XOfbkaJMuL...."
  },
  "cvv2": {
    "cvv2": "string"
  }
}
{
  "paymentId" : "223E",
  "createdDatetime" : "2018-11-01T17:10:31.284+03:00",
  "amount" : {
    "currency" : "RUB",
    "value" : "200.00"
  },
  "capturedAmount" : {
    "currency" : "RUB",
    "value" : "0.00"
  },
  "refundedAmount" : {
    "currency" : "RUB",
    "value" : "0.00"
  },
  "paymentMethod" : {
    "type" : "CARD",
    "maskedPan" : "444444******1049"
  },
  "customer" : { },
  "deviceData" : { },
  "requirements" : {
    "threeDS" : {
      "pareq" : "eJyrrgUAAXUA+Q==",
      "acsUrl" : "https://test.paymentgate.ru/acs/auth/start.do"
    }
  },
  "status" : {
    "value" : "COMPLETED",
    "changedDateTime" : "2018-11-01T17:10:32.607+03:00"
  },
  "extras" : { },
  "flags" : [ ]
}
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

[CAPTURE]: Подтверждение покупки

{
  "captureId": "bxwd8096",
  "createdDatetime": "2018-11-20T16:29:58.96+03:00",
  "amount": {
    "currency": "RUB",
    "value": "6.77"
  },
  "status": {
    "value": "COMPLETED",
    "changedDateTime": "2018-11-20T16:29:58.963+03:00"
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

Статус подтверждения

{
  "captureId": "bxwd8096",
  "createdDatetime": "2018-11-20T16:29:58.96+03:00",
  "amount": {
    "currency": "RUB",
    "value": "6.77"
  },
  "status": {
    "value": "COMPLETED",
    "changedDateTime": "2018-11-20T16:29:58.963+03:00"
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

[REFUND]: Создание возврата

{
  "refundId": "tcwv3132",
  "amount": {
    "value": 2.34,
    "currency": "RUB"
  }
}
{
  "refundId": "tcwv3132",
  "createdDatetime": "2018-11-20T16:32:55.547+03:00",
  "amount": {
    "currency": "RUB",
    "value": "2.34"
  },
  "status": {
    "value": "COMPLETED",
    "changedDateTime": "2018-11-20T16:32:55.55+03:00"
  },
  "flags": [
    "REVERSAL"
  ]
}
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

Статус возврата

{
  "refundId": "tcwv3132",
  "createdDatetime": "2018-11-20T16:32:55.547+03:00",
  "amount": {
    "currency": "RUB",
    "value": "2.34"
  },
  "status": {
    "value": "COMPLETED",
    "changedDateTime": "2018-11-20T16:32:55.55+03:00"
  },
  "flags": [
    "REVERSAL"
  ]
}
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

Статус возвратов

{
  "refundId": "tcwv3132",
  "createdDatetime": "2018-11-20T16:32:55.547+03:00",
  "amount": {
    "currency": "RUB",
    "value": "2.34"
  },
  "status": {
    "value": "COMPLETED",
    "changedDateTime": "2018-11-20T16:32:55.55+03:00"
  },
  "flags": [
    "REVERSAL"
  ]
}
{
  "serviceName" : "payin-core",
  "errorCode" : "validation.error",
  "description" : "Validation error",
  "userMessage" : "Validation error",
  "dateTime" : "2018-11-13T16:49:59.166+03:00",
  "traceId" : "fd0e2a08c63ace83",
  "cause" : {
    "amount" : [ "Invalid format. Amount value must be greater then zero" ]
  }
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}
{
  "serviceName" : "payin-core",
  "errorCode" : "payin.resource.not.found",
  "userMessage" : "Resource not found",
  "description" : "Resource not found",
  "traceId" : "c3564ba25e221fe3",
  "dateTime" : "2018-11-13T16:30:52.464+03:00"
}

Причины отклонения

Причины отклонения передаются в поле reasonCode.

Причина отклонения Описание
INVALID_STATE Некорректный статус транзакции
INVALID_AMOUNT Некорректная сумма
DECLINED_BY_MPI Отклонено MPI
DECLINED_BY_FRAUD Отклонено фрод-мониторингом
GATEWAY_INTEGRATION_ERROR Ошибка взаимодействия с банком
GATEWAY_TECHNICAL_ERROR Техническая ошибка на стороне банка
ACQUIRING_MPI_TECH_ERROR Техническая ошибка при проведение 3DS аутентификации
ACQUIRING_GATEWAY_TECH_ERROR Техническая ошибка
ACQUIRING_ACQUIRER_ERROR Техническая ошибка
ACQUIRING_AUTH_TECHNICAL_ERROR Ошибка при проведении авторизации средств
ACQUIRING_ISSUER_NOT_AVAILABLE Ошибка эмитента Банк-эмитент не доступен
ACQUIRING_SUSPECTED_FRAUD Ошибка эмитента. Подозрение на фрод
ACQUIRING_LIMIT_EXCEEDED Ошибка эмитента. Превышен один из лимитов
ACQUIRING_NOT_PERMITTED Ошибка эмитента. Операция не разрешена
ACQUIRING_INCORRECT_CVV Ошибка эмитента. Некорректный CVV
ACQUIRING_EXPIRED_CARD Ошибка эмитента. Неверный срок действия карты
ACQUIRING_INVALID_CARD Ошибка эмитента. Проверьте корректность введенных данных
ACQUIRING_INSUFFICIENT_FUNDS Ошибка эмитента. Недостаточно средств
ACQUIRING_UNKNOWN Неизвестная ошибка
BILL_ALREADY_PAID Счет уже оплачен
PAYIN_PROCESSING_ERROR Ошибка при проведении платежа

Дополнительно

Серверные уведомления

Протокол поддерживает 4 типа уведомлений: payment, capture, refund и bill.

Уведомление представляет собой входящий POST-запрос. Тело запроса содержит JSON-сериализованные данные счета (кодировка UTF-8).

В параметрах уведомления присутствует подпись запроса (sign), который ТСП необходимо проверять на своей стороне для исключения возможности подделки уведомления.

Для дополнительной уверенности следует принимать уведомления о платежах только с указанных ниже IP-адресов компании QIWI.

Уведомление считается успешно доставленным, если сервер ТСП ответил HTTP с кодом состояния 200 OK. Таким образом, до тех пор пока не будет ответа сервера с кодом состояния 200 OK, система будет осуществлять попытки доставки уведомления через увеличивающиеся интервалы времени в течение суток с момента операции.

Адрес сервера для уведомлений указывается в Личном Кабинете при выпуске токена на сайте kassa.qiwi.com в разделе "Настройки".

Авторизация уведомлений

После получения входящего уведомления необходимо проверить подлинность данного уведомления. Для этого используется механизм цифровой подписи. Подпись уведомления отправляется в заголовке X-Api-Signature-SHA256. Для формирования подписи используется механизм проверки целостности HMAC с хэш-функцией SHA256.

Алгоритм проверки подписи:

  1. Объединить значения определенных параметров в одну строку с разделителем "|":

    parameters = {amount.currency}|{amount.value}|{billId}|{siteId}|{status}

    где {*} – значение параметра уведомления. Все значения при проверке подписи должны трактоваться как строки.

  2. Вычислить HMAC-хэш c алгоритмом хэширования SHA256:

    hash = HMAС(SHA256, secret_key, parameters) Где:

    • secret_key – ключ функции ;
    • parameters – строка из п.1;
  3. Сравнить значение заголовка X-Api-Signature-SHA256 с результатом из п.2.

Уведомления PAYMENT, CAPTURE, REFUND

{
   "payment/refund/capture":{
      "paymentId/refundId/captureId":"4504751",
      "tokenData":{
         "paymentToken":"4cc975be-483f-8d29-2b7de3e60c2f",
         "expiredDate":"2021-12-31T00:00:00+03:00"
      },
      "type":"PAYMENT",
      "createdDateTime":"2019-10-08T11:31:37+03:00",
      "status":{
         "value":"SUCCESS",
         "changedDateTime":"2019-10-08T11:31:37+03:00"
      },
      "amount":{
         "value":2211.24,
         "currency":"RUB"
      },
      "paymentMethod":{
         "type":"CARD",
         "maskedPan":"220024/*/*/*/*/*/*5036",
         "rrn":null,
         "authCode":null,
         "type":"CARD"
      },
      "customer":{
         "ip":"79.142.20.248",
         "account":"token32",
         "phone":"0"
      },
      "billId":"testing122",
      "flags":[
         "SALE"
      ]
   },
   "type":"PAYMENT",
   "version":"1"
}
Параметр Описание Тип
paymentId/refundId/captureId Уникальный идентификатор платежа/возврата/подтверждения в системе ТСП String(200)
type Тип операциии String(200)
amount.value Сумма счета, округленная до двух десятичных знаков в меньшую сторону Number(6.2)
amount.currency Идентификатор валюты счета (Alpha-3 ISO 4217 код) String(3)
billId ID счета String(200)
status Данные о статусе счета Object
status.value Строковое значение статуса String
status.сhangeDatetime Дата обновления статуса URL-закодированная строка
ГГГГ-ММ-ДДTЧЧ:ММ:ССZ
status.reasonCode Код причины отклонения String(200)
status.reasonMessage Описание причины отклонения String(200)
ststus.errorCode Код ошибка Number
paymentMethod Данный о средстве платежа Object
paymentMethod.type Тип метода оплаты String
paymentMethod.maskedPan Маскированый PAN карты String
paymentMethod.rrn RRN платежа Number
paymentMethod.authCode Auth-code платежа Number
customer Данные о пользователе, на которого был выставлен счет Object
customer.phone Номер телефона, на который был выставлен счет (если был указан при выставлении счета) String
customer.email E-mail пользователя (если был указан при выставлении счета) String
customer.account Идентификатор пользователя в системе ТСП (если был указан при выставлении счета) String
customer.ip IP адрес пользователя String
customer.country страна адрес пользователя String
creationDatetime Дата создания счета URL-закодированная строка
ГГГГ-ММ-ДДTЧЧ:ММ:ССZ
expirationDateTime Срок оплаты счета URL-закодированная строка
ГГГГ-ММ-ДДTЧЧ:ММ:ССZ
comment Комментарий к счету String(255)
customFields Дополнительные данные счета (если были указаны при выставлении счета). Object
flags Дополнительные команды для API Массив. Доступные значения - SALE/REVERSL
version Версия уведомлений String

Подпись считается для этих полей по умолчанию:

PAYMENT: payment.paymentId|payment.createdDateTime|payment.amount.value

REFUND: refund.refundId|refund.createdDateTime|refund.amount.value

CAPTURE: capture.captureId|capture.createdDateTime|capture.amount.value

Сервис нотификаций перекладывает неуспешные коллбэки по очередям:

Время повторной отправки может немного сдвигаться в бОльшую сторону.

Уведомления BILL

Данный тип уведомления отправляется только при использовании PayIn Checkout. Нотификация будет отправлена, как только выставленный счет будет оплачен.

Пример уведомления

{
   "bill":{
      "siteId":"Obuc-00",
      "billId":"testing122",
      "amount":{
         "value":"2211.24",
         "currency":"RUB"
      },
      "status":{
         "value":"PAID",
         "changedDateTime":"2019-10-08T11:31:39+03"
      },
      "customer":{
         "account":"account42"
      },
      "customFields":{},
      "comment":"Spasibo",
      "creationDateTime":"2019-10-08T11:30:16+03",
      "expirationDateTime":"2019-10-13T14:30:00+03"
   },
   "version":"1"
}

Строка и ключ подписи кодируются в UTF-8.

Параметр Описание Тип
billId Уникальный идентификатор платежа в системе ТСП String(200)
siteId Идентификатор сайта ТСП в QIWI Кассе Number
amount.value Сумма счета, округленная до двух десятичных знаков в меньшую сторону Number(6.2)
amount.currency Идентификатор валюты счета (Alpha-3 ISO 4217 код) String(3)
status Данные о статусе счета Object
status.value Строковое значение статуса String
status.changeDateTime Дата обновления статуса URL-закодированная строка
ГГГГ-ММ-ДДTЧЧ:ММ:ССZ
customer Данные о пользователе, на которого был выставлен счет Object
customer.phone Номер телефона, на который был выставлен счет (если был указан при выставлении счета) String
customer.email E-mail пользователя (если был указан при выставлении счета) String
customer.account Идентификатор пользователя в системе ТСП (если был указан при выставлении счета) String
creationDatetime Дата создания счета URL-закодированная строка
ГГГГ-ММ-ДДTЧЧ:ММ:ССZ
expirationDateTime Срок оплаты счета URL-закодированная строка
ГГГГ-ММ-ДДTЧЧ:ММ:ССZ
comment Комментарий к счету String(255)
customFields Дополнительные данные счета (если были указаны при выставлении счета). Object
version Версия уведомлений String
Ответ → POST

После того, как был получен входящий запрос-уведомление, необходимо проверить подлинность цифровой подписи и отправить ответ в формате JSON. Подпись считается для этих полей по умолчанию:

BILL: amount.currency|amount.value|billId|siteId|status

HTTP/1.1 200 OK
Content-Type: application/json

{
 "error":"0"
}

В ответе должен вернуться код результата обработки уведомления. Код результата должен находиться в параметре error.

Передача чека (54-ФЗ)

Чек передается в параметре cheque в операциях bill и payment при работе через PayIn Checkout и PayIn API, соответственно.

Описание чека

"cheque" : {
	"sellerId" : 3123011520,
	"customerContact" : "Test customer contact",
  "chequeType" : "COLLECT",
	"taxSystem" : "OSN",
	"positions" : [ {
		"quantity" : 1,
		"price" : {
			    "value" : 7.82,
			    "currency" : "RUB"
			    },
		"tax" : "NDS_0",
		"paymentSubject" : "PAYMENT",
		"paymentMethod" : "FULL_PAYMENT",
		"description" : "Test description"
			}
			]
	    }
Параметр Условие Тип данных Описание
sellerId Обязательно decimal ИНН организации, для которой пробивается чек
chequeType Обязательно decimal Признак расчета (тэг 1054):
COLLECT – Приход
COLLECT_RETURN - Возврат прихода
CONSUME - Расход
CONSUME_RETURN -Возврат расхода
customerContact Обязательно string(64) Телефон или электронный адрес покупателя (тэг 1008)
taxSystem Обязательно decimal Система налогообложения (тэг 1055):
OSN - Общая, ОСН
USN – Упрощенная доход, УСН доход
USN_MINUS_CONSUM – Упрощенная доход минус расход, УСН доход - расход
ENVD – Единый налог на вмененный доход, ЕНВД
ESN - Единый сельскохозяйственный налог, ЕСН
PATENT(5) – Патентная система налогообложения, Патент
positions Обязательно array Массив товаров
quantity Обязательно decimal Количество предмета расчета (тэг 1023)
price Обязательно decimal Цена за единицу предмета расчета с учетом скидок и наценок (тэг 1079)
tax Обязательно decimal Ставка НДС (тэг 1199):
NDS_CALC_18_118 - с учетом НДС 18% (18/118)
NDS_CALC_10_110 – с учетом НДС 10% (10/110)
NDS_0(5) – ставка НДС 0%
NO_NDS(6) – НДС не облагается
NDS_CALC_20_120(7) – с учетом НДС 20% (20/120) (20/120)
description Обязательно string(128) Наименование предмета расчета
paymentMethod Обязательно decimal Признак способа расчёта (тэг 1214):
ADVANCED_FULL_PAYMENT – предоплата 100%. Полная предварительная оплата до момента передачи предмета расчета.
PARTIAL_ADVANCE_PAYMENT – предоплата. Частичная предварительная оплата до момента передачи предмета расчета.
ADVANCE – аванс.
FULL_PAYMENT – полный расчет. Полная оплата, в том числе с учетом аванса (предварительной оплаты) в момент передачи предмета расчета.
PARTIAL_PAYMENT – частичный расчет и кредит. Частичная оплата предмета расчета в момент его передачи с последующей оплатой в кредит.
CREDIT – передача в кредит. Передача предмета расчета без его оплаты в момент его передачи с последующей оплатой в кредит.
CREDIT_PAYMENT – оплата кредита. Оплата предмета расчета после его передачи с оплатой в кредит (оплата кредита).
paymentSubject Обязательно decimal Признак предмета расчёта (тэг 1212):
COMMODITY – товар. О реализуемом товаре, за исключением подакцизного товара (наименование и иные сведения, описывающие товар).
EXCISE_COMMODITY – подакцизный товар. О реализуемом подакцизном товаре (наименование и иные сведения, описывающие товар).
WORK – работа. О выполняемой работе (наименование и иные сведения, описывающие работу).
SERVICE – услуга. Об оказываемой услуге (наименование и иные сведения, описывающие услугу).
GAMBLING_RATE – ставка азартной игры. О приеме ставок при осуществлении деятельности по проведению азартных игр.
GAMBLING_PRIZE – выигрыш азартной игры. О выплате денежных средств в виде выигрыша при осуществлении деятельности по проведению азартных игр.
LOTTERY_TICKET – лотерейный билет. О приеме денежных средств при реализации лотерейных билетов, электронных лотерейных билетов, приеме лотерейных ставок при осуществлении деятельности по проведению лотерей.
LOTTERY_PRIZE – выигрыш лотереи. О выплате денежных средств в виде выигрыша при осуществлении деятельности по проведению лотерей.
GRANTING_RESULTS_OF_INTELLECTUAL_ACTIVITY(9) – предоставление результатов интеллектуальной деятельности. О предоставлении прав на использование результатов интеллектуальной деятельности или средств индивидуализации.
PAYMENT – платеж. Об авансе, задатке, предоплате, кредите, взносе в счет оплаты, пени, штрафе, вознаграждении, бонусе и ином аналогичном предмете расчета.
AGENCY_FEE – агентское вознаграждение. О вознаграждении пользователя, являющегося платежным агентом (субагентом), банковским платежным агентом (субагентом), комиссионером, поверенным или иным агентом.
COMPAUND_PAYMENT_SUBJECT – составной предмет расчета. О предмете расчета, состоящем из предметов, каждому из которых может быть присвоено значение выше перечисленных признаков.
OTHER_PAYMENT_SUBJECT – иной предмет расчета. О предмете расчета, не относящемуся к выше перечисленным предметам расчета.

Выплаты

По умолчанию, выплаты по проведенным операциям производятся раз в 2 дня и минимальным порогом 10.000 рублей. Если вам необходимо кастомное расписание, обратитесь к вашему курирующему менеджеру.

КИВИ взимает комиссию за каждую подтвержденную операцию. Если отмена операции была произведена до подтверждения, комиссия не взимается. Если была произведена частичная отмена до подтверждения операции, комиссия будет пересчитана.

Тестовые данные

Для тестирования операций оплаты используются боевые url сервисов оплаты. Для каждого нового ТСП в системе создаются site_id и по умолчанию включаются в режим тестирования. Также можно запросить переключение в режим тестирования любого своего site_id, либо добавление нового site_id в тестовом режиме через своего менеджера.

В тестовом режиме можно использовать любой номер карты удовлетворяющий алгоритму Luhn.

В режиме тестирования из валют (currency) разрешен только рубль РФ (643).

CVV в режиме тестирования может быть любым (3 цифры).

Для тестирования различных вариантов оплаты и ответов необходимо использовать различные сроки действия карты:

Для проведения операции с 3DS необходимо использовать фразу unknown name в имени держателя карты. 3DS в тестовом режиме можно проверить только при вводе номера реальной карты.