Skip to main content

Форматы сообщений

Все строковые сообщения между LP Drive и ПО ККМ используют единый формат: пары key=value, разделённые LF (\n), кодировка UTF-8. Для списковых значений используется разделитель ";". Если значение содержит ";", "=" или LF — применяется percent-encoding.

Финальный ответ (LP Drive → ККМ)

После завершения операции результат доступен через lpdrive_get_status() после получения статуса LPDRIVE_STATUS_FINAL.

transaction_id=550e8400-e29b-41d4-a716-446655440000
response_code=000
response_desc=APPROVED
rrn=123456789012
authorization_code=123456
receipt=--SALE REPORT DATA--

Промежуточный статус (LP Drive → ККМ, тип: status)

message_type=status
transaction_id=550e8400-e29b-41d4-a716-446655440000
status_code=WAIT_CARD
status_text=Приложите карту

Интерактивный запрос (LP Drive → ККМ, тип: action_request)

message_type=action_request
transaction_id=123457
status_code=WAIT_CHOICE
status_text=Выберите тип операции.
status_items=Наличные;Карта;3 счёт.
default_index=1

Ответ (через lpdrive_send_choice()):

transaction_id=123457
selected_index=1

LP Drive запрашивает выбор кассира. Варианты выбора передаются в поле status_items через разделитель ";". Поле default_index указывает пункт по умолчанию.

Поля кассовых операций — справочник форматов

Допустимые для поля символы указываются при помощи комбинаций букв a, n, s:

  • a — буквы латинского алфавита в ASCII-кодировке;
  • n — цифры (0–9);
  • s — специальные символы (точка, запятая, дефис, пробел и т.п.);
  • text — текстовое поле произвольного содержания, допускающее любые символы.

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

Примеры:

  • поле с номером терминала (an..8) имеет длину от 1 до 8 символов и может содержать буквы латинского алфавита и цифры;
  • поле RRN (n12) может содержать только цифры и имеет фиксированную длину 12 символов;
  • поле описания результата (text) имеет произвольную длину и может содержать любые символы.
ПолеФорматОписание
transaction_idans..36Номер транзакции ПО ККМ.
amountn..12Сумма в минимальных единицах (копейки для RUB).
currency_coden3Код валюты ISO 4217. RUB = 643.
terminal_idan..8Идентификатор терминала, присвоенный эквайером.
merchant_idan..16Идентификатор торговой точки.
terminal_transaction_datetimen14Дата/время на терминале. Формат: YYYYMMDDhhmmss.
host_transaction_datetimen14Дата/время на хосте. Формат: YYYYMMDDhhmmss.
rrnn12Reference Retrieval Number — уникальный ID транзакции на хосте эквайера.
original_rrnn12RRN исходной операции (для возврата/отмены).
authorization_codean6Код авторизации от хоста банка.
response_codetextКод ответа (000–999 — эквайер, NET-*** / DLL-*** — инфраструктура LP Drive).
response_desctextТекстовое описание результата (для чека и информирования клиента).
receipttextТекстовый блок чека. Строки разделены \n.
panan..19Маскированный номер карты (например: ************1234).
payment_systeman..4Платёжная система: MIR, VISA, MC, MAES, SBP, UPI.
sbp_transaction_idtextИдентификатор транзакции НСПК (для операций СБП).
reversal_reasontextПричина отмены: user_cancellation, hw_fault, not_completed.
status_codetextКод статуса: RUNNING, WAIT_CARD, WAIT_PIN, WAIT_CHOICE и др.
status_texttextОписание текущего состояния операции.
status_itemstextВарианты выбора для action_request. Разделитель: ';'.
selected_indexn..2Индекс выбранного пункта (с 1, слева направо).