Быстрый старт
Публичный 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)
-
Добавьте в модуль приложения каталог
libs -
Скопируйте файлы библиотеки в
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
- В
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
- В
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)