Форматы сообщений
Все строковые сообщения между 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_id | ans..36 | Номер транзакции ПО ККМ. |
amount | n..12 | Сумма в минимальных единицах (копейки для RUB). |
currency_code | n3 | Код валюты ISO 4217. RUB = 643. |
terminal_id | an..8 | Идентификатор терминала, присвоенный эквайером. |
merchant_id | an..16 | Идентификатор торговой точки. |
terminal_transaction_datetime | n14 | Дата/время на терминале. Формат: YYYYMMDDhhmmss. |
host_transaction_datetime | n14 | Дата/время на хосте. Формат: YYYYMMDDhhmmss. |
rrn | n12 | Reference Retrieval Number — уникальный ID транзакции на хосте эквайера. |
original_rrn | n12 | RRN исходной опера ции (для возврата/отмены). |
authorization_code | an6 | Код авторизации от хоста банка. |
response_code | text | Код ответа (000–999 — эквайер, NET-*** / DLL-*** — инфраструктура LP Drive). |
response_desc | text | Текстовое описание результата (для чека и информирования клиента). |
receipt | text | Текстовый блок чека. Строки разделены \n. |
pan | an..19 | Маскированный номер карты (например: ************1234). |
payment_system | an..4 | Платёжная система: MIR, VISA, MC, MAES, SBP, UPI. |
sbp_transaction_id | text | Идентификатор транзакции НСПК (для операций СБП). |
reversal_reason | text | Причина отмены: user_cancellation, hw_fault, not_completed. |
status_code | text | Код статуса: RUNNING, WAIT_CARD, WAIT_PIN, WAIT_CHOICE и др. |
status_text | text | Описание текущего состояния операции. |
status_items | text | Варианты выбора для action_request. Разделитель: ';'. |
selected_index | n..2 | Индекс выбранного пункта (с 1, слева направо). |