Skip to main content

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

Публичный API

Публичный API SDK находится в модуле core (Kotlin Multiplatform: Android/iOS/Linux/JVM).

Тестовое приложение с интегрированным SDK

Скачать тестовое приложение

Основные сущности

  • IDriver и реализация DriverImpl — внешний фасад для инициализации SDK и управления устройствами.
  • ICore и реализация CoreImpl — ядро платежной логики и операций.
  • SdkContext, SdkInitializer — параметры окружения и инициализации.
  • Модели операций: PaymentOperationData, ManualPaymentOperationData, RefundOperationData, CancelOperationData, PreAuthOperationData, CompletionOperationData.
  • Фильтр истории: TxFilter, результат истории: TxData.
  • Результат операции: Transaction.

Поддерживаемые платформы и типы устройств

  • Платформы: Android, iOS, Linux (POS), JVM (Desktop).
  • Устройства:
    • Встроенные Android: Sunmi P2 Pro, Aisino A90/A99 Lite, Tianyu P30, Feitian F20, Centerm K9, Kozen, Unitody, Trendit S10.
    • Проводные: Feitian T50.
    • Bluetooth: Feitian EPay POS 600, Dspread QPOS (для Android; iOS — Feitian EPay POS 600).
    • SoftPOS: программный POS-терминал (оплата по СБП без физического терминала).
  • Устройство выбирается через DeviceTypes и обнаруживается драйвером.

Установка

Android (Gradle)

  1. Добавьте в модуль приложения каталог libs

  2. Скопируйте файлы библиотеки в libs:

    paymentsdk-terminal-unitody-release.aar
paymentsdk-terminal-kozen-release.aar
paymentsdk-terminal-sunmi-release.aar
paymentsdk-terminal-feitian-t50-release.aar
paymentsdk-terminal-feitian-release.aar
paymentsdk-terminal-feitian-epp600-release.aar
paymentsdk-terminal-dspread-release.aar
paymentsdk-terminal-centerm-release.aar
paymentsdk-terminal-aisino-release.aar
paymentsdk-terminal-trendit-s10-release.aar
paymentsdk-terminal-softpos-release.aar
database-release.aar
core-release.aar
common-terminal-release.aar
  1. В build.gradle.kts в блок dependencies добавьте строчки:
    implementation(fileTree("libs") { include("*.aar") })

//region LIFE PAY Acquiring Driver
implementation(libs.androidx.material)
implementation(libs.androidx.work.runtime.ktx)
implementation(libs.threeten)
implementation(libs.kotlinx.serialization)
implementation(libs.google.zxing)
implementation(libs.kotlin.coroutines.android)
implementation(libs.okhttp.tls)
implementation(libs.ktor.okhttp)
implementation(libs.ktor.client.content.negotiation.jvm)
implementation(libs.ktor.client.logging)
implementation(libs.sql.android.driver)
//endregion
  1. В gradle/libs.versions.toml:
    [versions]
# region LIFE PAY Acquiring SDK
workRuntimeKtx = "2.7.1"
threeten = "1.2.4"
ktor = "3.1.0"
kotlinx-serialization = "1.8.0"
androidx-material = "1.12.0"
kotlin-coroutines = "1.10.1"
okhttp = "4.10.0"
zxing = "3.5.2"
sqldelight = "2.0.1"
# endregion LIFE PAY Acquiring SDK

[libraries]
# region LIFE PAY Acquiring Driver
androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "workRuntimeKtx" }
threeten = { group = "com.jakewharton.threetenabp", name = "threetenabp", version.ref = "threeten" }
kotlinx-serialization = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinx-serialization"}
androidx-material = { group = "com.google.android.material", name = "material", version.ref = "androidx-material" }
kotlin-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlin-coroutines" }
sql-android-driver = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" }
ktor-client-content-negotiation-jvm = { module = "io.ktor:ktor-client-content-negotiation-jvm", version.ref = "ktor" }
ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" }
ktor-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" }
okhttp-tls = { module = "com.squareup.okhttp3:okhttp-tls", version.ref = "okhttp"}
google-zxing = { group = "com.google.zxing", name = "core", version.ref = "zxing" }
# endregion

Примечания:

  • Публикации содержат необходимые терминальные модули как транзитивные зависимости.
  • Требуются разрешения приложений: интернет, bluetooth (и/или bt connect/scan для Android 12+), foreground service — ориентируйтесь на манифесты терминальных модулей.

iOS

Варианты поставки:

  • CocoaPods: бинарный pod core (XCFramework). Подключение через Podspec, предоставляемый LIFE PAY.
  • Swift Package: бинарная lpSDK.xcframework. Подключение из приватного источника сборки, предоставляемого LIFE PAY.

Обратитесь к вашему менеджеру за ссылками на артефакты и инструкцией.

Инициализация окружения

Android: один раз инициализируйте AppContext в Application.onCreate():

    class App : Application() {
override fun onCreate() {
super.onCreate()
AppContext.set(applicationContext)
}
}

Сформируйте SdkContext. Варианты:

  • Только локальная конфигурация: передайте jsonConfig.
  • С TMS: передайте tmsParams (TMS IP/порт/CA), jsonConfig можно не задавать — SDK загрузит и обновит конфигурацию в фоне.
  • Дополнительно: externalGuid — внешний GUID клиента (для трекинга и телеметрии).
    val sdkContext = SdkContext(
appContext = AppContext, // мультиплатформенный контейнер контекста
jsonConfig = /* String? JSON-конфиг банка и терминалов */ null,
tmsParams = TmsParams(
tms_ip = "1.2.3.4",
tms_port = 443,
tms_ca1 = "...PEM...",
tms_ca2 = "...PEM..."
),
externalGuid = "your-guid"
)

Сконфигурируйте SdkInitializer:

    val initializer = SdkInitializer.Builder(sdkContext)
.setDemoMode(false) // true — автономный режим без бэкенда
.setTrackers(setOf(/* ваши AnalyticsTracker, optional */))
// .setDeviceType(DeviceTypes.BuiltInDeviceTypes.SunmiP2Pro()) // опционально
// .setComponents(setOf(/* NetworkProxyComponent / BiometryComponent */))
.build()

PreInit (обязательна для iOS, для ранних задач: BGTasks и пр.):

    DriverImpl.preInit(trackers = setOf(/* PublicAnalyticsTracker */))

Полная инициализация:

    // suspend
DriverImpl.init(initializer)

SDK:

  • сохранит externalGuid во внутреннее хранилище;
  • поднимет DI-контейнер;
  • подготовит терминал;
  • в фоне загрузит конфигурацию (если задан tmsParams) и телеметрию/remote-status.

Обнаружение и выбор устройства

// suspend
val devices = DriverImpl.findDevices() // встроенные, BT (сохранённые), проводные
val current = DriverImpl.getDefaultDevice()

// Установить текущее устройство
// suspend
DriverImpl.setDefaultDevice(devices.firstOrNull())

Добавить Bluetooth-устройство:

// suspend
val bt = DriverImpl.addBluetoothDevice(
bluetoothMacAddress = "AA:BB:CC:DD:EE:FF",
bluetoothName = "FT_600_..."
)
// При необходимости сделайте его устройством по умолчанию
DriverImpl.setDefaultDevice(bt)

Проверить поддержку имени Bluetooth:

val supported = DriverImpl.isSupportedBluetoothDevice("FT_600_...")

Удалить устройство:

// suspend
DriverImpl.removeDevice(bt) // или DriverImpl.removeDevice(serialNumber)