Начало работы
Минимальная версия Android-платформы для подключения SDK — 24.
Версии SDK которые работают с Android API >=24 - поддерживается всеми версиями Версии SDK которые работают с Android API <24 - до 2.0.x включительно
Демо-приложение
Демо-приложение с примером интеграции SDK находится по ссылке. Код приложения можно использовать как референс при интеграции.
Подключение SDK к проекту
- Maven
- aar
Для получения зависимости из maven репозитория необходимо добавить его в settings.gradle файл вашего приложения.
dependencyResolutionManagement {
...
repositories {
google()
mavenCentral()
...
maven {
name = "GitHubPackages"
url = uri("*URL из договора*")
credentials {
username = "*username для репозитория*"
password = "*password для репозитория*"
}
}
}
}
Далее нужно перейти в build.gradle Вашего модуля и добавить зависимости внутрь блока dependencies { ... }.
dependencies {
...
implementation '*название зависимости из договора*:x.y.z'
...
}
Пакет дистрибьюции состоит из двух файлов: SDK-VERSION.aar и bms-sdk-fingerprint_VERSION_release.aar, которые необходимо разместить в вашем проекте (например в директории libs в корне проекта).
Далее нужно перейти в build.gradle вашего модуля и добавить зависимости от .aar-файлов внутрь блока dependencies { ... }.
ВАЖНО!: Также здесь необходимо явно добавить транзитивные зависимости библиотек.
// SPaySdk
implementation(files("../libs/fingerprint-1.9.0.aar"))
// Bi.Zone sdk
implementation(files("../libs/spaysdk-2.0.4.aar"))
// Activity
implementation("androidx.activity:activity-ktx:1.6.1")
// SberIdSDK
implementation("io.github.sberid:SberIdSDK:2.4.3")
// Coroutines
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1")
// Dynatrace
implementation("com.dynatrace.agent:agent-android:8.257.1.1007")
// OkHttp
implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.10.0")
// Retrofit
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("com.squareup.retrofit2:converter-gson:2.3.0")
// Jsoup
implementation("org.jsoup:jsoup:1.13.1")
// Play services
implementation("com.google.android.gms:play-services-safetynet:18.0.1")
implementation("com.google.android.gms:play-services-ads-identifier:18.0.1")
implementation("com.google.android.gms:play-services-appset:16.0.2")
implementation("com.google.android.gms:play-services-auth-api-phone:18.0.1")
// Dagger2
implementation("com.google.dagger:dagger:2.44")
annotationProcessor("com.google.dagger:dagger-compiler:2.44")
// Timber
implementation("com.jakewharton.timber:timber:5.0.1")
// Three Ten BP
implementation("com.jakewharton.threetenabp:threetenabp:1.2.1")
testImplementation("org.threeten:threetenbp:1.2.1") {
exclude("com.jakewharton.threetenabp:threetenabp:1.2.0")
}
// Coil
implementation("io.coil-kt:coil-base:2.4.0")
implementation("io.coil-kt:coil-svg:2.4.0")
// Shimmer
implementation("com.facebook.shimmer:shimmer:0.5.0")
// Firebase Database
implementation("com.google.firebase:firebase-database-ktx:20.2.0")
// Biometric
implementation("androidx.biometric:biometric:1.1.0")
// Encrypted Shared Preferences
implementation("androidx.security:security-crypto:1.1.0-alpha06")
// Lottie
implementation("com.airbnb.android:lottie:6.2.0")
//Serialization Json
implementation(“org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1”)
В приведенном выше примере указан путь до aar-файлов, находящихся в директории libs проекта. Если вы разместили их в другом месте, то нужно будет указать ваш путь до файлов. Подробнее смотрите в Документации для Android. Подробнее смотрите в документации для Android.
Инициализация SDK
Для старта работы с SPaySDK необходимо его проинициализировать внутри вашего Application-класса, с помощью метода initialize(…)
класса SPaySdkApp
.
В метод initialize
необходимо передать структуру SPayInitSdkConfig
.
Параметры структуры SPayInitSdkConfig
Параметр | Тип | Обязательный | Описание |
---|---|---|---|
application | Application | Да | ApplicationContext |
enableBnpl | Bool | Нет | Если параметр не передан, дефолтное значение false. Параметр отвечает за функционал оплаты частями. Значение true не гарантирует, что оплата частями будет доступна, но значение false гарантирует, что оплата частями будет не доступна. |
helperConfig | SPayHelperConfig | Да | Функционал helpers. |
isHelperEnabled | Bool | Нет | Настройки функционала helpers. |
disabledHelpers | List<SPayHelpers> | Да | Список выключенных helpers. Если все helpers должны быть оставлены в Sdk, то передается emptyList(). |
stage | SPayStage | Да | Стенд на котором будет работать SDK. |
initializationResult | initializationResult | Да | Коллбек инициализации SDK. |
resultViewNeeded | Bool | true | Отображение экранов со статусом. |
enableLogging | Bool | true | Выведение логов в консоль в режиме песочницы. |
initializationResult | (InitializationResult) -> Unit | нет | Блок, отрабатыващий после инициализации SDK |
Если вы подключили сервис Плати частями
и пользователь выбрал этот способ для оплаты заказа, то выполняя через back расширенный запрос состояния заказа getOderStatusExtended.do, в ответе вы получите значение параметра paymentWay равное BNPL
.
Подключить параметр paymentWay в callback-уведомлениях возможно в личном кабинете партнера интернет-эквайринга. Это можно сделать в настройках->основные настройки->callback-уведомления. При заполнении доп. параметров выйдет список всех возможных. Для того, чтобы передавался способ оплаты заказа необходимо выбрать paymentWay.
Оплаченные частями заказы в личном кабинете партнера интернет-эквайринга будут отмечаться признаком BNPL
в поле «Платежное средство».
При этом денежные средства по заказам, оплаченным частями, поступят от ООО «ЦНФС» («Центр новых финансовых сервисов»), предоставляющей сервис.
Helpers - функционал, позволяющий клиенту с недостаточным количеством средств быстро пополнить счет или выпустить новые продукты для оплаты.
Настройки SBHelperConfig
Параметр | Тип | Дефолтное значение | Описание |
---|---|---|---|
sbp | Bool | true | Разрешить пополнение карты через СБП |
creditCard | Bool | true | Разрешить выпуск кредитной карты |
debitCard | Bool | true | Разрешить выпуск дебетовой карты |
import spay.sdk.SPaySdkApp
import spay.sdk.api.SPayStage
class YourApplication : Application() {
override fun onCreate() {
super.onCreate()
val config = SPayInitSdkConfig(
application = requireActivity().application,
enableBnpl = true,
stage = stage,
resultViewNeeded = true,
enableLogging = true,
helperConfig = SPayHelperConfig(isHelperEnabled = true, listOfHelpers) initializationResult = { initializationResult ->
}
SPaySdkApp.getInstance().initialize(config)
}
}
При вызове данного метода подгружается конфиг, который содержит строковые ресурсы и картинки. Если метод был вызван не при старте приложения, то есть шанс, что SDK не успеет получить конфиг, в результате чего кнопка SDK может быть отрисована некорректно или не отрисована вовсе.
Добавление кнопки
Для вызова метода оплаты можно использовать готовый класс кнопки spay.sdk.view.SPayButton или отрисовать кнопку самостоятельно в соответсвии с гайдланами.
Для добавления готовой кнопки используйте в своей вью разметке spay.sdk.view.SPayButton.
Инициализация кнопки оплаты в .xml
<spay.sdk.view.SPayButton
android:id="@+id/s_pay_button"
android:layout_width="match_parent"
android:layout_height="wrap_content">
Инициализация кнопки оплаты в Composable
@Composable
private fun SPButton() {
val context = LocalContext.current
val customView = SberPayButton(context = context, attributeSet = null)
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = { customView })
}
Проверка готовности к оплате
Для проверки готовности сервисов SberPay к оплате, и проверки наличия установленного мобильного приложения банка на устройстве необходимо вызывать метод isReadyForSPaySdk.
Кнопка должна быть отрисована только в том случае, если метод isReadyForSPaySdk
вернет true.
Проверка установлен ли СБОЛ на устройстве
/**
*
* @return true - СБОЛ есть на устройстве, false - СБОЛ на устройстве не установлен (кнопка не должна быть отрисована)
*
*/
SPaySdkApp.getInstance().isReadyForSPaySdk(context: Context)
Запрос разрешений
Для работы SDK также запрашивает определенные разрешения, которые не являются обязательными но повышают шанс успешной оплаты.
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Вызов диалогового окна на запрос разрешений от пользователя реализован по нажатию на кнопку SPayButton
, при условии, что как минимум одно разрешение не было выдано пользователем.
Независимо от результата запроса разрешений от пользователя сценарий оплаты будет продолжен.
Если необходимо получать разрешения раньше, например при старте приложения, то можно использовать статический метод SPayButton - requestPermissions ( SPayButton.requestPermissions)
, в который необходимо передать Context и который вернет в коллбэк константу:
PermissionsActivity.ACTION_PERMISSIONS_GRANTED
— если все разрешения были получены;PermissionsActivity.ACTION_PERMISSIONS_DENIED
— если как минимум одно из разрешений было отклонено.
Запрос на получение разрешений от пользователя
/**
*
* @return PermissionsActivity.ACTION_PERMISSIONS_DENIED или PermissionsActivity.ACTION_PERMISSIONS_GRANTED
*
*/
SPaySdkApp.getInstance().requestPermissions(context: Context) { permissionsResult ->
}