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_methodReceipt.Refund. После успешной регистрации чека Payment.Get вернёт refund.status = 6.