Публичный 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_id | ID транзакции ККМ. 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_rrn | RRN исходной операции оплаты. |
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. |