QR & Transfers Payment Api (2.0)

Download OpenAPI specification:

Введение

Документ описывает порядок взаимодействия платформы Клиента и платформы Carusell (система "КПА") в рамках осуществления платежей и переводов в пользу различных получателей (мерчантов, банков) с инициацией транзакции через сканирование QR кода (scan-to-pay, MPM) или перевод из приложения Клиента по реквизитам.

Подключение

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

Авторизация

Взаимодействие с API происходит по защищенному протоколу HTTPS с использованием взаимной TLS-аутентификации (mTLS).

Чтобы получить сертификат со стороны Carusell для доступа к продовому контуру, необходимо:

  1. Сгенерировать запрос на сертификат (CSR - Certificate Signing Request). Клиент создает файл с расширением .csr, который содержит публичный ключ и информацию об организации Клиента.
  2. Отправить файл .csr. Сгенерированный файл необходимо предоставить по e-mail helpdesk@cyberpro.kg команде поддержки платформы Carusell для выпуска сертификата.
  3. Получить подписанный сертификат (CRT). После обработки запроса Клиенту вернется файл сертификата с расширением .crt, который нужно будет установить на стороне Клиента. Этот сертификат необходим для аутентификации серверов Клиента при обращении к API платформы Carusell.

Для работы с тестовым контуром платформы сертификат не требуется.

Доступы

Тестовый контур

Используйте следующие настройки:

  1. Базовый URL: https://test.cyberasia.kg
  2. Идентификатор сервиса (serviceId): смотри в таблице "Соответствие валюты списания с идентификатором сервиса" в разделе "Классификация методов"
  3. API ключ (Api key): a78ddad5-1447-4998-9817-1b8f20755b81

Продовый контур

Для получения настроек доступа к продовому контуру Клиент направляет запрос по e-mail helpdesk@cyberpro.kg команде поддержки платформы Carusell.

Сценарий Scan2pay (QR)

Порядок работы с сервисом платежей с инициацией через сканирование QR (scan-to-pay):

  1. Плательщик сканирует QR код, выпущенный оператором QR платежей в одной из стран (Вьетнам, Филиппины, Таиланд, Мексика и т.д.).
  2. Клиент по строке внутри QR кода идентифицирует принадлежность QR к платежной системе определенной страны. Руководство по идентификации для каждой системы описано в разделе "Классификация методов".

    Допускается вариант, при котором Клиент может не выполнять этот шаг, поскольку запрос на декодирование QR кода позволяет определить принадлежность QR определенной платежной системе.

  3. Содержимое внутри QR кода Клиенту нужно отправить в метод "Декодировать QR код". В ответ получить информацию о получателе (мерчанте) и информацию для расчета суммы списания (курс обмена местной валюты к валюте, в которой работает Клиент).
  4. Если плательщик согласен на проведение платежа, Клиент вызывает метод "Совершить платёж". Если плательщик не согласен на проведение платежа, Клиент вызывает метод "Отменить платёж". Шаг опционален.
  5. Если в результате совершения платежа получен статус PROCESSING, Клиенту необходимо запросить статус с использованием метода "Получить статус платежа".

Сценарий переводов по реквизитам

Порядок работы с сервисом переводов по реквизитам:

  1. Плательщик выбирает наименоваение получателя (банк, кошелек) из списка, который Клиент может получить, вызвав метод "Получить список банков", вводит реквизит (номер телефона / номер счета / номер IBAN / номер карты и т.д.) и ФИ получателя.
  2. Клиент вызывает соответствующий метод "Инициировать перевод по []" в зависимости от реквизита. Получает ответ с подтверждением возможности совершить перевод и информацию для расчета суммы списания (курс обмена местной валюты к валюте, в которой работает Клиент).
  3. Плательщик вводит сумму перевода в валюте зачисления, Клиент рассчитывает сумму в валюте списания и ожидает действий от плательщика.
  4. Если плательщик согласен на совершение перевода, то Клиент вызывает метод "Совершить платёж". Если плательщик не согласен на проведение перевода, то Клиента вызывает метод "Отменить платёж".
  5. Если в результате совершения перевода пришёл статус PROCESSING, Клиенту необходимо запросить статус с использованием метода "Получить статус платежа".

Классификация методов

VietQR

Общее

VietQR — это универсальный стандарт генерации QR-кодов для переводов, развиваемый Национальным банком Вьетнама совместно с платежной системой NAPAS, что обеспечивает высокий уровень адаптации метода, т.е. поддерживается подавляющим большинством мерчантов Вьетнама. Подключая этот метод, Клиент получает возможность предложить своим пользователям мгновенные и удобные платежи через сканирование QR-кода в любых торговых точках страны без необходимости интеграции с каждым мерчантом отдельно.

Идентификация QR

Формат: TLV (Tag--Length--Value), стандарт EMVCo
Чтение: слева направо (Tag[2] + Length[2] + Value)

Пример:

00020101021138560010A0000007270126000697040701128888123456780208QRIBFTTA53037045802VN63042249

Разбивка:

00 02 01 01 02 11 38 56 0010A000000727... 53 03 704 58 02 VN 63 04 2249

Ключевые теги:

  • 58 → страна 58 02 VN
  • 38 → платёжная система (контейнер)\внутри: 00 10 A000000727

Правило:

Payload = VietQR, если:

  • 58 = VN
  • в 38 есть A000000727 (NAPAS)

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

Сценарий Описание Payload
Сценарий №1. Синхронный успех, код с суммой Успешное декодирование QR ("Декодировать QR код") и получение синхронного ответа "Успех" на запрос "Совершить платёж" 00020101021238540010A00000072701240006970436011010603632710208QRIBFTTA53037045802VN5407156629263043BAA
Сценарий №2. Синхронный успех, код без суммы Тоже самое, как в Сценарии №1, но сумму для зачисления после декодирования вводит пользователь 00020101021138560010A0000007270126000697040301120501290717340208QRIBFTTA53037045802VN6304C81E
Сценарий №3. Асинхронный успех Успешное декодирование QR ("Декодировать QR код"), получение "PORCESSING" на запрос "Совершить платёж", получение финального статуса "Успех" через запрос "Получить статус платежа" 00020101021238540010A00000072701240006970436011010498770500208QRIBFTTA53037045802VN540711971966304CACD
Сценарий №4. Асинхронный неуспех Тоже самое, как в Сценарии №3, но финализация транзакции в "Неуспех" через запрос "Получить статус платежа" 00020101021238420010A0000007270124000697043601101063765656540625000053037045802VN62080804taxi630472D8
Сценарий №5. Заблокированный получатель Получение ошибки 400 на запрос "Декодировать QR код" c текстом "ACCOUNT_DISABLED" 00020101021238420010A0000007270124000697043601101063765656540625000053037045802VN62080804taxi630472D8

Лимиты на сумму транзакции: От 1 000 VND до 1 000 000 VND.

Таблица соответствия валюты списания (bankCurrency) и идентификатора сервиса (serviceId)

Код валюты Идентификатор сервиса
RUB 37
USD 39
USDT 41

Прочее

Валюта зачисления

Вьетнамский донг, код ISO 4217: VND (числовой 704)

Данные плательщика

Передавать не требуется (поле payerInfo)

Лимиты в продовой среде

  • Минимальная сумма транзакции: 5 000 VND
  • Максимальня сумма транзакции: 250 000 000 VND

ThaiQR

Общее

ThaiQR (PromptPay) — национальный стандарт QR-платежей в Таиланде на базе EMVCo Merchant Presented Mode. QR-коды используются для оплаты у мерчантов (Bill Payment / Merchant Presented QR), переводов на мобильный номер, национальный ID, e-wallet и банковский счёт.

Идентификация QR

Формат: TLV (Tag--Length--Value), стандарт EMVCo
Чтение: слева направо (Tag[2] + Length[2] + Value)

Пример (Merchant / Bill Payment, фиксированная сумма):

00020101021230820016A0000006770101120115010753600037405021500000220066077703204611316260181X00000053037645406178.225802TH5918LIM TREND EMPORIUM6212070846113162630427E5

Разбивка (ключевые теги):

00 02 01 — формат нагрузки EMV QR
01 02 12 — динамический QR
30 82 ... — информация о счёте получателя (Bill Payment)
30.00 16 A000000677010112 — AID PromptPay Bill Payment
30.01 15 010753600037405 — идентификатор биллера (receiverProxyValue)
30.02 15 000002200660777 — billReference1
30.03 20 4611316260181X000000 — billReference2
53 03 764 — валюта THB
54 06 178.22 — сумма
58 02 TH — страна Таиланд
59 18 LIM TREND EMPORIUM — наименование получателя
63 04 27E5 — CRC-16

Ключевые теги:

  • 58 → страна 58 02 TH
  • 53 → валюта 53 03 764 (THB)
  • 29 / 30 → информация о счёте получателя (контейнер)
  • 54 → сумма (если отсутствует, сумму вводит плательщик)

Правило:

Payload = ThaiQR, если:

  • 58 = TH
  • 53 = 764 (THB)
  • есть контейнер 29 - P2P платёж, есть контейнер 30 - платёж мерчанту

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

Сценарий Описание Payload
Сценарий №1. Синхронный успех, код с суммой Успешное декодирование QR ("Декодировать QR код") и получение синхронного ответа "Успех" на запрос "Совершить платёж" 00020101021130700016A0000006770101120115010556001059500021300011100011120310081909761453037645406104.005802TH5921SMART WASH 24 COMPANY6304108C
Сценарий №2. Синхронный успех, код без суммы Тоже самое, как в Сценарии №1, но сумму для зачисления после декодирования вводит пользователь 00020101021230810016A00000067701011201150107536000315010214EXT010014085350320APIC1777454631729WUO31690016A00000067701011301030040214EXT010014085350420APIC1777454631729WUO5303764540535.005802TH630458D5
Сценарий №3. Асинхронный успех Успешное декодирование QR ("Декодировать QR код"), получение "PORCESSING" на запрос "Совершить платёж", получение финального статуса "Успех" через запрос "Получить статус платежа" 00020101021230820016A000000677010112011501055360926419902150000022000755960320461131666018170000005303764540580.855802TH5918TESCO LOTUS CO LTD62120708461131666304BC28
Сценарий №4. Асинхронный неуспех Тоже самое, как в Сценарии №3, но финализация транзакции в "Неуспех" через запрос "Получить статус платежа" 00020101021230820016A0000006770101120115010753600037401021500000220100001503204611316460181300000053037645406201.785802TH5907S HOTEL621207084611316463043CCF
Сценарий №5. Заблокированный получатель Получение ошибки 400 на запрос "Декодировать QR код" c текстом "ACCOUNT_DISABLED" 00020101021130670016A0000006770101120115010556103866388021012345678900310112233445553037645406103.005802TH5925CPF RESTAURANT AND FOOD C6304AB1D

Лимиты на сумму транзакции: От 1 000 THB до 1 000 000 THB.

Таблица соответствия валюты списания (bankCurrency) и идентификатора сервиса (serviceId)

Код валюты Идентификатор сервиса
USDT 43

Прочее

Валюта зачисления

Тайский бат, код ISO 4217: THB (числовой 764)

Данные плательщика

Поле Описание
id Уникальный идентификатор плательщика в системе Клиента
firstName Имя (латиница)
lastName Фамилия (латиница)
dateOfBirth Дата рождения, формат
phone Контактный телефон
citizenship Гражданство, код ISO 3166-1 alpha-2 (например, TH)
address Адрес
documents Массив документов; обязателен хотя бы один документ поддерживаемого типа

Обязательные поля в элементе documents (для выбранного документа):

Поле Описание
type Тип документа (см. ниже)
documentNumber Номер документа
expiryDate Срок действия документа, формат YYYY-MM-DD

Пример payerInfo:

{
  "id": "user-id-1",
  "firstName": "Ivan",
  "lastName": "Ivanov",
  "phone": "0891234567",
  "dateOfBirth": "1990-01-01",
  "citizenship": "TH",
  "address": "Bangkok",
  "documents": [
    {
      "type": "FOREIGN_PASSPORT",
      "documentNumber": "FP-123",
      "expiryDate": "2030-01-01"
    }
  ]
}

Лимиты в продовой среде

  • Минимальная сумма транзакции: 1 THB
  • Минимальная сумма транзакции: 30 000 THB

QRPH

Общее

QRPh — это национальный стандарт генерации QR-кодов для платежей, разработанный Центральным банком Филиппин (Bangko Sentral ng Pilipinas) и работающий на базе системы мгновенных переводов InstaPay. Данное решение обеспечивает полную совместимость (интероперабельность) между всеми участниками рынка: клиенты любых банков и электронных кошельков могут проводить платежи через единый QR-код, объединяя более 2 миллионов мерчантов по всей стране. Подключая этот метод, Клиент получает возможность предложить своим пользователям мгновенные (благодаря рельсам InstaPay), безопасные и удобные платежи через сканирование QR-кода, совершая платежи в адрес мерчантов, которым не обязательно устанавливать отдельные POS-терминалы.

Идентификация QR

Формат: TLV (Tag--Length--Value), стандарт EMVCo
Чтение: слева направо (Tag[2] + Length[2] + Value)

Пример:

00020101021128600011ph.ppmi.p2m0111DCPHPHM1XXX0319206753426176814387205030105204593253036085802PH5906BNNALU6002PH62380011ph.ppmi.p2m051921849279383389809686304495E

Разбивка:

00 02 01 01 02 11 28 60 0011ph.ppmi.p2m... 53 03 608 58 02 PH 59 06 BNNALU 60 02 PH 63 04 495E

Ключевые теги:

58 → страна: 58 02 PH

Внутри тега 28 (контейнер для платёжной системы / идентификатора мобильного кошелька) содержится ph.ppmi.p2m — это тоже указывает на использование стандарта QR Ph (P2M — Person-to-Merchant).

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

Сценарий Описание Payload
Сценарий №1. Синхронный успех, код с суммой Успешное декодирование QR ("Декодировать QR код") и получение синхронного ответа "Успех" на запрос "Совершить платёж" 00020101021128600011ph.ppmi.p2m0111DCPHPHM1XXX0319206753426176814387205030105204593253036085802PH5906BNNALU6002PH62380011ph.ppmi.p2m051921849279383389809686304495E
Сценарий №2. Синхронный успех, код без суммы Тоже самое, как в Сценарии №1, но сумму для зачисления после декодирования вводит пользователь 00020101021127600012com.p2pqrpay0111DCPHPHM1XXX020899964403041386132124309995204601653036085802PH590712123126002as62510012com.p2pqrpay0519196610394270367411207081234567863048ACF
Сценарий №3. Асинхронный успех Успешное декодирование QR ("Декодировать QR код"), получение "PORCESSING" на запрос "Совершить платёж", получение финального статуса "Успех" через запрос "Получить статус платежа" 00020101021128600011ph.ppmi.p2m0111DCPHPHM1XXX0319210823416750568398505030105204601653036085802PH5912sissi9001all6015Current Address62380011ph.ppmi.p2m05192047785410353007360630480E4
Сценарий №4. Асинхронный неуспех Тоже самое, как в Сценарии №3, но финализация транзакции в "Неуспех" через запрос "Получить статус платежа" 00020101021128600011ph.ppmi.p2m0111DCPHPHM1XXX0319211374533229394778405030105204893153036085802PH5923COINS TEST ACCT QR NAME6009Singapore62380011ph.ppmi.p2m051919748934463259281926304890C
Сценарий №5. Заблокированный получатель Получение ошибки 400 на запрос "Декодировать QR код" c текстом "ACCOUNT_DISABLED" 00020101021128600011ph.ppmi.p2m0111DCPHPHM1XXX0319211328787762566659305030105204076353036085802PH5909aaabbbccc6001162380011ph.ppmi.p2m0519196537252751202252863042EC4

Лимиты на сумму транзакции: От 1 000 PHP до 1 000 000 PHP.

Таблица соответствия валюты списания (bankCurrency) и идентификатора сервиса (serviceId)

Код валюты Идентификатор сервиса
RUB 38
USDT 42

Прочее

Валюта зачисления

Филиппинский песо, код ISO 4217: PHP (числовой 608)

Данные плательщика

Передавать не требуется (поле payerInfo)

Лимиты в продовой среде

  • Минимальная сумма транзакции: 1 PHP
  • Максимальня сумма транзакции: 50 000 PHP

QR Code

Описание запроса на декодирование QR кода и получения реквизитов получателя

Декодировать QR код

Authorizations:
bearerAuth
Request Body schema: application/json
text
required
string [ 0 .. 8000 ] characters

Отсканированный QR код

bankCurrency
string (Currency)
Enum: "RUB" "VND" "PHP" "UZS" "AZN" "AMD" "TJS" "LKR" "KRW" "THB" "TWD" "JPY" "SGD" "MNT" "KHR" "TRY" "ARS" "MXN" "KZT" "USD" "USDT"

Трёхбуквенный код валюты, либо код криптовалюты

serviceId
integer <int64> (ServiceId)

Идентификатор сервиса. Выдаётся командой технической поддержки системы КПА.

object (UserInfo)

Responses

Request samples

Content type
application/json
{
  • "text": "string",
  • "bankCurrency": "RUB",
  • "serviceId": 0,
  • "payerInfo": {
    }
}

Response samples

Content type
application/json
{
  • "stId": 42,
  • "amount": 200.25,
  • "currency": "RUB",
  • "rate": 85.2445,
  • "merchantInfo": {
    },
  • "minimumAmount": 200.25,
  • "serviceId": 0,
  • "description": "Оплата на кассе"
}

Transfers

Описание запросов, связанных с инициализацией переводов по реквизитам

Получить список банков

Authorizations:
bearerAuth
path Parameters
serviceId
required
integer <int64> (ServiceId)

Уникальный числовой идентификатор сервиса перевода

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Инициировать перевод по номеру телефона

Authorizations:
bearerAuth
Request Body schema: application/json
serviceId
required
integer <int64> (ServiceId)

Идентификатор сервиса. Выдаётся командой технической поддержки системы КПА.

bankCode
required
string

code из запроса getBanks

accountNumber
required
string

Номер счёта получателя

recipientName
required
string

Имя получателя

description
string

Описание перевода

object (UserInfo)
object (UserInfo)

Responses

Request samples

Content type
application/json
{
  • "serviceId": 0,
  • "bankCode": "aub",
  • "accountNumber": 123456789,
  • "recipientName": "Ivan Ivanov",
  • "description": "string",
  • "recipientInfo": {
    },
  • "payerInfo": {
    }
}

Response samples

Content type
application/json
{
  • "stId": 42,
  • "currency": "RUB",
  • "rate": 85.2445
}

Инициировать перевод на банковскую карту

Authorizations:
bearerAuth
Request Body schema: application/json
serviceId
required
integer <int64> (ServiceId)

Идентификатор сервиса. Выдаётся командой технической поддержки системы КПА.

cardNumber
required
string^\d{13,19}$

Номер карты получателя

recipientName
string

Имя получателя

description
string

Описание перевода

Responses

Request samples

Content type
application/json
{
  • "serviceId": 0,
  • "cardNumber": 123456789123456,
  • "recipientName": "Ivan Ivanov",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "stId": 42,
  • "currency": "RUB",
  • "rate": 85.2445
}

Payment

Описание запросов, относящихся к фазе совершения платежа

Совершить платёж/перевод

Authorizations:
bearerAuth
Request Body schema: application/json
stId
required
integer <int64> (StId) >= 0

ID платежа в системе КПА

bankId
required
string

ID платежа в системе банка

amount
required
number <decimal> (Amount) > 0

Сумма зачисления в единицах валюты, например VND. Точность 2 десятичных знака

currency
required
string (Currency)
Enum: "RUB" "VND" "PHP" "UZS" "AZN" "AMD" "TJS" "LKR" "KRW" "THB" "TWD" "JPY" "SGD" "MNT" "KHR" "TRY" "ARS" "MXN" "KZT" "USD" "USDT"

Трёхбуквенный код валюты, либо код криптовалюты

bankAmount
required
number <decimal> (BankAmount) > 0

Сумма зачисления в единицах валюты, например USD. Точность 2 десятичных знака. Должна рассчитываться по формуле amount / rate = bankAmount

object (UserInfo)

Responses

Request samples

Content type
application/json
{
  • "stId": 42,
  • "bankId": "test-id",
  • "amount": 200.25,
  • "currency": "RUB",
  • "bankAmount": 200.25,
  • "payerInfo": {
    }
}

Response samples

Content type
application/json
{
  • "status": "SUCCESS"
}

Отменить платёж/перевод

Eсли плательщик отказался от совершения платежа/перевода. Можно вызвать только до вызова запроса pay

Authorizations:
bearerAuth
path Parameters
stId
required
string

ID транзакции в системе КПА

Responses

Получить статус платежа/перевода

Authorizations:
bearerAuth
path Parameters
stId
required
string

ID платежа в системе КПА

Responses

Response samples

Content type
application/json
{
  • "status": "SUCCESS"
}