Payment.Systems.Get
Возвращает каталог платёжных систем VCR, их сценарии, состояние настройки и поддерживаемые операции. Метод не возвращает адреса, учётные данные и секретные ключи.
Входные параметры
Метод не принимает параметров. Передавайте пустой объект params.
{
"jsonrpc": "2.0",
"method": "Payment.Systems.Get",
"params": {},
"auth": "a2Fzc2E6a2FzMTIzNDU2",
"id": 1
}
Выходные параметры
| Название | Тип данных | Описание |
|---|---|---|
| schema_version | int32 | Версия структуры каталога |
| systems | array | Платёжные системы VCR |
Поля элемента systems:
| Название | Тип данных | Описание |
|---|---|---|
| payment_system_id | int32 | Значение для Payment.Create.params.payment_system_id |
| code | string | Уникальный стабильный машинный код системы |
| name | string | Фиксированное название платёжной системы |
| scenario | string | Сценарий POS: terminal, token, qr или biometric |
| supported | bool | Сценарий реализован в VCR |
| enabled | bool | Система включена в настройках VCR |
| configured | bool | Обязательные настройки заполнены, а необходимые локальные файлы доступны |
| available | bool | Система включена и настроена; доступность сети и провайдера проверяется при операции |
| sort_order | int32 | Рекомендуемый порядок отображения |
| field_options | object | Допустимые машинные значения полей, если применимо |
| operations | array | Поддерживаемые методы и их контракт |
Поля элемента operations:
| Название | Тип данных | Описание |
|---|---|---|
| method | string | Имя метода VCR |
| completion | string | synchronous или asynchronous |
| required_fields | array | Обязательные поля params |
| optional_fields | array | Необязательные поля params |
| result_fields | array | Поля результата операции |
| amount_mode | string | Для возврата значение full означает только полный возврат исходного платежа |
| customer_action | string | Машинный код необходимого действия покупателя |
| next_method | string | Метод, который необходимо вызвать при одном из статусов next_method_statuses |
| next_method_statuses | array | Статусы, требующие вызова next_method |
| polling | object | Правила опроса асинхронной операции |
Каталог не содержит локализованных текстов. Значения code, scenario, customer_action и коды вариантов полей являются машинными кодами.
Для сценария biometric каталог возвращает операции Biometric.Register, Biometric.Identify, Payment.Create и Payment.Get. Biometric.Register регистрирует выбранную руку по одноразовой QR-сессии клиента. После распознавания Payment.Create принимает последние четыре цифры телефона клиента в поле token и использует активную сессию текущего авторизованного кассира. Операция Payment.Cancel отсутствует, поскольку KaftPay не предоставляет отмену через POS API.
Значение обязательного поля device_id POS получает методом Biometric.Device.Get. Тип устройства, драйвер и формат биометрических данных в каталог не включаются.
code и payment_system_id стабильны. POS рекомендуется сохранять локальное сопоставление формы оплаты по code, а при вызове VCR использовать актуальный payment_system_id из каталога.
Правила совместимости
- Если POS не поддерживает
scenario, платёжная система не показывается кассиру. - Если операция содержит неизвестное обязательное поле, POS не разрешает эту операцию.
- Неизвестные необязательные поля, поля результата и другие поля JSON игнорируются.
- Неизвестный
customer_actionозначает, что операция недоступна в этой версии POS. - Если POS не поддерживает
next_method, операция недоступна в этой версии POS. - Неподдерживаемая POS операция не отключает остальные операции той же системы.
Для Payment.Get и Payment.Cancel поле params.payment_id всегда содержит внутренний UUID Payment.Create.result.id. Внешнее поле Payment.Create.result.payment_id для этих вызовов не используется.
После тайм-аута асинхронной операции POS не должен автоматически создавать платёж или возврат повторно. Проверка продолжается указанным в polling.method методом.
Сокращённый пример ответа
{
"jsonrpc": "2.0",
"result": {
"schema_version": 1,
"systems": [
{
"payment_system_id": -3,
"code": "posretail",
"name": "POSRetail",
"scenario": "terminal",
"supported": true,
"enabled": true,
"configured": true,
"available": true,
"sort_order": 10,
"field_options": {
"card_type": [
{ "value": 1, "code": "corporate" },
{ "value": 2, "code": "personal" },
{ "value": 3, "code": "social" }
]
},
"operations": [
{
"method": "Payment.Create",
"completion": "synchronous",
"required_fields": ["payment_system_id", "amount", "card_type"],
"optional_fields": ["description"],
"result_fields": ["id", "payment_system_id", "payment_id", "status", "amount"]
},
{
"method": "Payment.Cancel",
"completion": "synchronous",
"required_fields": ["payment_id"],
"optional_fields": [],
"result_fields": ["id", "payment_system_id", "payment_id", "status", "amount", "refund"],
"amount_mode": "full",
"next_method": "Receipt.Refund",
"next_method_statuses": [5]
}
]
}
]
},
"ok": true,
"id": 1
}
Для асинхронного создания UzQR каталог возвращает:
"polling": {
"method": "Payment.Get",
"id_source": "result.id",
"request_field": "payment_id",
"status_field": "status",
"interval_seconds": 2,
"timeout_seconds": 180,
"pending_statuses": [1, 2],
"success_statuses": [3],
"failure_statuses": [-1, 5]
}
Если Payment.Cancel запустил асинхронный возврат, POS продолжает использовать UUID исходного платежа, переданный в Payment.Cancel.params.payment_id:
"polling": {
"method": "Payment.Get",
"id_source": "request.payment_id",
"request_field": "payment_id",
"status_field": "refund.status",
"interval_seconds": 2,
"timeout_seconds": 180,
"pending_statuses": [1, 2, 4],
"success_statuses": [5, 6],
"failure_statuses": [8],
"unknown_statuses": [9]
}
Статус возврата 5 не является состоянием для дальнейшего ожидания: денежный возврат уже подтверждён, и POS должен вызвать указанный next_method — Receipt.Refund. После успешной регистрации чека Payment.Get вернёт refund.status = 6.