Skip to main content

Быстрый старт

Приведённый ниже пример демонстрирует минимальный сценарий: выполнение операции оплаты с получением промежуточных статусов и финального результата.

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

/* callback */
void my_callback(const char* status) {
printf("Status update: %s\n", status);
}

int main(void) {
/* 1. Регистрация callback() */
lpdrive_register_callback(my_callback);

/* 2. Оплата: 100.00 RUB (10000 копеек) */
lpdrive_transaction_t* transaction = lpdrive_sale("10000", "643", NULL);

/* 3. Ожидание завершения - polling */
while (1) {
lpdrive_status_t status = lpdrive_get_status(transaction);
if (status == LPDRIVE_STATUS_FINAL) break; /* Завершено */
// lp_cancel(transaction); /* Отмена */
}

/* 4. Обработка результата */
bool succeed = lp_is_succeed(transaction);
if (succeed) {
printf("Responce code: %s\n", lp_get_response_code(transaction));
printf("Responce description: %s\n", lp_get_response_description(transaction));
printf("Rrn: %s\n", lp_get_rrn(transaction));
} else {
printf("Responce code: %s\n", lp_get_response_code(transaction));
}

lpdrive_destroy(transaction); /* Освобождение памяти */
return 0;
}