Skip to main content

Публичный API

Все публичные функции LP Drive объявлены в заголовочном файле lpdrive.h. Строковые параметры передаются как const char* в кодировке UTF-8.

Служебные методы

МетодНазначение
lpdrive_register_callback(cb)Регистрирует функцию обратного вызова для получения промежуточных статусов операции. Вызывается один раз при инициализации.
lpdrive_get_status(buffer, size)Возвращает текущий статус транзакции. Используется в polling-модели. При завершении возвращает LPDRIVE_STATUS_FINAL.
lpdrive_send_choice(params)Передаёт выбор кассира при интерактивном запросе (action_request). Индекс выбранного пункта — с 0.
lpdrive_cancel(transaction_id)Отправляет запрос на отмену активной операции. Терминал может не принять отмену, если операция уже авторизована.

lpdrive_register_callback

int lpdrive_register_callback(
void (*cb)(const char* status)
);

Регистрирует функцию обратного вызова. Callback вызывается из внутреннего рабочего потока LP Drive при появлении каждого промежуточного статуса. Финальный результат операции через callback не передаётся — он доступен через lpdrive_get_status() после завершения транзакции.

Важно

Реализация callback должна выполняться быстро и не блокировать вызывающий поток. Длительные операции следует выполнять асинхронно.

Возвращает: 0 — успех, отрицательное значение — ошибка регистрации.

lpdrive_get_status

lpdrive_status_t lpdrive_get_status(const lp_transaction_t* transaction);

Возвращает текущий статус активной транзакции.

Работает в синхронном и асинхронном режиме. Если актуальных статусов нет — возвращается BUSY.

При совместном использовании callback и polling доставка статуса через callback не удаляет его из очереди polling.

lpdrive_send_choice

int lpdrive_send_choice(
const char* const params
);

Используется при получении сообщения action_request: передаёт выбор кассира (selected_index) в активную транзакцию. Формат params: строки key=value, разделённые LF.

lpdrive_cancel

bool lpdrive_cancel(const lp_transaction_t* transaction);

Инициирует запрос отмены транзакции.

Кассовые операции

Каждая кассовая операция вызывается отдельным методом с явным набором типизированных параметров. Одновременно допускается только одна активная кассовая транзакция — повторный вызов при наличии незавершённой операции будет отклонён с кодом занятости.

Все методы возвращают lpdrive_transaction_t* — указатель на объект транзакции, через который доступны текущее состояние и итоговый результат операции.

lpdrive_sale — Оплата

lpdrive_transaction_t* lpdrive_sale(
const char* const amount,
const char* const currency_code,
const char* const transaction_id_opt
);
ПараметрОписание
amountСумма в минимальных единицах валюты (копейки для RUB).
currency_codeЦифровой код валюты ISO 4217. Для RUB: "643".
transaction_idID транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_refund — Возврат

lpdrive_transaction_t* lpdrive_refund(
const char* const amount,
const char* const currency_code,
const char* const original_rrn,
const char* const transaction_id_opt
);
ПараметрОписание
amountСумма возврата в минимальных единицах.
currency_codeКод валюты ISO 4217.
original_rrnRRN исходной операции оплаты.
sbp_transaction_idИдентификатор транзакции НСПК (передать если присутствует в оплате).
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_sbp_sale — Оплата СБП

lpdrive_transaction_t* lpdrive_sbp_sale(
const char* const amount,
const char* const currency_code,
const char* const transaction_id_opt
);
ПараметрОписание
amountСумма в минимальных единицах.
currency_codeКод валюты ISO 4217.
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_sbp_refund — Возврат СБП

lpdrive_transaction_t* lpdrive_sbp_refund(
const char* const amount,
const char* const currency_code,
const char* const sbp_transaction_id,
const char* const transaction_id_opt
);
ПараметрОписание
amountСумма возврата.
currency_codeКод валюты ISO 4217.
sbp_transaction_idИдентификатор транзакции НСПК (передать если присутствует в оплате).
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_reversal — Отмена (reversal)

lpdrive_transaction_t* lpdrive_reversal(
const char* const amount,
const char* const currency_code,
const char* const original_rrn,
const char* const transaction_id_opt
);
ПараметрОписание
amountСумма операции.
currency_codeКод валюты ISO 4217.
original_rrnRRN отменяемой операции.
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_shift_close — Сверка итогов

lpdrive_transaction_t* lpdrive_shift_close(
const char* const transaction_id_opt
);
ПараметрОписание
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_control_request — Меню администратора

lpdrive_transaction_t* lpdrive_control_request(
const char* const transaction_id_opt
);
ПараметрОписание
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_statement_short / lpdrive_statement_full — Отчёты

lpdrive_transaction_t* lpdrive_statement_short(
const char* const transaction_id_opt
);

lpdrive_transaction_t* lpdrive_statement_full(
const char* const transaction_id_opt
);
ПараметрОписание
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_host_test — Тест хоста

lpdrive_transaction_t* lpdrive_host_test(
const char* const transaction_id_opt
);
ПараметрОписание
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_key_load — Загрузка ключей

lpdrive_transaction_t* lpdrive_key_load(
const char* const transaction_id_opt
);
ПараметрОписание
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

lpdrive_echo — Эхо-тест

lpdrive_transaction_t* lpdrive_echo(
const char* const transaction_id_opt
);
ПараметрОписание
transaction_idНомер транзакции ККМ. NULL или "" — LP Drive генерирует UUID.

Константы lp_get_status

Метод lp_get_status() возвращает целочисленный код состояния. Возможные значения:

КонстантаОписание
LP_STATUS_FINALОперация завершена. Финальный ответ записан в буфер и готов к обработке.
LP_STATUS_EMPTYВ очереди нет новых статусов. Транзакция продолжается. Следует повторить вызов позднее.
LP_STATUS_ERRORВнутренняя ошибка LP Drive при получении статуса (например, некорректный буфер).
LPDRIVE_STATUS_PENDINGОперация выполняется, новых статусов пока нет.
LPDRIVE_STATUS_STATUSДоступен новый промежуточный статус. Прочитать через lpdrive_get_status().
LPDRIVE_STATUS_ACTION_REQUESTТерминал ожидает выбора кассира. Необходимо вызвать lpdrive_send_choice().
LPDRIVE_STATUS_BUSYУже выполняется другая транзакция. Повторный вызов отклонён.