В главное меню

Android SDK интерфейс


Минимальные требования

  •  Android SDK 21+

  •  Target SDK 34

  •  Gradle и Gradle Wrapper (версия 8+ или выше)

  •  DS Granat 2.1.+

Использование в проекте

При использовании личного устройства для корректной работы потребуется настроить VPN и добавить сертификаты МТС, настройка описана здесь «Настройка VPN и добавление сертификатов МТС»).

В корневом build.gradle проекта добавить репозиторий MTS Pay SDK и Дизайн Системы (если отсутствует)


allprojects {
    repositories {
        // MTS Pay SDK
        maven {
            url "https://artifactory.mts.ru/artifactory/mts-pay-sdk-mtspay-maven-local/"
        }
        // Дизайн система
        maven {
            url "https://artifactory.mts.ru/artifactory/android-designsystem-maven-local/"
        }
        // Для библиотек сканирования карт
        maven {
            url "https://artifactory.mts.ru/artifactory/android-common-libs-mtspay-maven-local/"
        }  
    }
}


Добавьте зависимость в файл build.gradle модуля, который будет работать с SDK

implementation "ru.mts.paysdk:mts-pay-ui:2.12.0"

Использование функционала сканирования банковской карты через камеру в проекте

Если вы не распространяете приложения для платформ x86-64, исключите из сборку соответствующую зависимость

implementation ("ru.mts.paysdk:mts-pay-ui:2.12.0") {
    exclude group: "ru.mts.cameracardreader", module: "camera-card-reader-x86-64"
}

Так же появилась возможность полностью исключить камеру из сборки. В таком случае функционал камеры не будет доступен и не отразится в интерфейсе

implementation ("ru.mts.paysdk:mts-pay-ui:2.12.0"" {
   exclude group: "ru.mts.cameracardreader", module: "camera-card-reader"
   exclude group: "ru.mts.cameracardreader", module: "camera-card-reader-x86-64"
}

Сценарии

Базовый сценарий оплаты/подписки

Необходимо сконфигурировать и передать идентификатор платежной сессии и ssoTokenId клиента (в случае авторизованного платежа для оплаты по привязанным платежным инструментам)

Привязанные карты и МТС Логин

Если необходимо дать клиенту возможность платежа с привязанных к профилю банковских карт (в том числе карт аккаунта МТС Банка, если он привязан к профилю), тогда для интеграции необходимо наличие валидного id_token МТС Логин, который генерируется в процессе аутентификации пользователя в интегрируемом приложении. Обязательным условием получения id_token является наличие значения openid в параметре scope URL авторизации МТС Логин (scope=openid). Ссылка на документацию сервиса МТС логин. Этот id_token необходимо будет передавать при инициализации SDK в параметр с наименованием ssoTokenId.

Для сценария оплаты по созданной сессии в объект MTSPayInitOptions необходимо обязательно передать в параметр sessionOptions — объект MTSPaySessionOptions

val options = MTSPayInitOptions(
    ssoTokenId =  "***webssotokenid***", // необязательный параметр, в случае если он указан дополнительно отобразим сохраненные платежные инструменты пользователя
    nightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, // необязательный параметр для ночного режима, если он не указан - будут использоваться автоматические настройки из системы
    isSupportAvailable = true, // Если указана поддержка, будет отображаться кнопка "Обратиться в поддержку". При ее нажатии вернется Action SHOULD_OPEN_SUPPORT     sessionOptions = MTSPaySessionOptions( // объект для сценария олаты по сессии
        sessionId = "sessionId"  //Обязательный параметр. Id созданной сессии на вашей стороне.
    )
)

Пополнение счетов

Для сценария пополнения счета в объект MTSPayInitOptions необходимо обязательно передать в параметр refillOptions — объект MTSPayRefillOptions. В параметр service, объекта MTSPayRefillOptions, можно передать объекта MTSPayRefillServiceOptions, в таком случае возможны следующие варианты инициализации SDK:

  1. Если передать 2 параметра phone + serviceAlias ИЛИ bill + serviceAlias, при валидных данных экран ввода реквизитов и выбора сервиса оплаты будет пропущен. Отобразиться сразу экран оплаты. В этом случае пользователь не сможет изменить сервис или отредактировать реквизиты
  2. Во всех других ситуациях будет показан экран ввода реквизита и выбора сервиса. Если были переданы параметры phone или bill — данные предзаполняются, но доступны для редактирования
val options = MTSPayInitOptions(
    ssoTokenId = "***webssotokenid***", // необязательный параметр, в случае если он указан дополнительно отобразим сохраненные платежные инструменты пользователя
    nightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM, // необязательный параметр для ночного режима, если он не указан - будут использоваться автоматические настройки из системы
    isSupportAvailable = true, // Если указана поддержка, будет отображаться кнопка "Обратиться в поддержку". При ее нажатии вернется Action SHOULD_OPEN_SUPPORT
    refillOptions = MTSPayRefillOptions( // Обязательный параметр для сценария пополнения счета
        serviceToken = "serviceToken", // Обязательный параметр. Токен вашего сервиса
        amount = BigDecimal(10.20), // Необязательный параметр. Предустановленная сумма оплаты
        service = MTSPayRefillServiceOptions( // Необязательный объект для предустановленных параметров
            serviceAlias = "Название предвыбранного сервиса оплаты", // Необязательный параметр.
            phone = "9123456789", // Необязательный параметр. Номер телефона 10 цифр без кода страны
            bill = "123456789" // Необязательный параметр. 9-ти или 11..13-ти значный номер лицевого счета
        )
    )
)

Пополнение карт Льюис

Для сценария пополнения карт Льюис в объект MTSPayLewisInitOptions необходимо обязательно передать следующие параметры:

  •  serviceToken — идентификатор сервисного токена приложения пополнения карты (обязательный параметр)

  •  phone — номер телефона (только цифры, 11 символов) (обязательный параметр). Пример: «79030000050»

  •  cardId — идентификатор карты, которую будут пополнять (обязательный параметр). Пример: «100000000069»

  •  maskedPan — маскированный номер карты (обязательный параметр). Пример: «220208******5253»

val options = MTSPayInitOptions(
    lewisOptions = MTSPayLewisInitOptions(
        serviceToken = "serviceToken", // Обязательный параметр. Токен вашего сервиса
        phone = "phone",  // Обязательный параметр. Номер телефона 11 цифр с кодом страны 
        cardId = "cardId",  // Обязательный параметр. Идентификатор карты, которую будут пополнять  
        maskedPan = "maskedPan",  // Обязательный параметр. Маскированный номер карты
        refillOptions = MTSPayRefillOptions( // Обязательный параметр для сценария пополнения счета
            serviceToken = "serviceToken", // Обязательный параметр. Токен вашего сервиса
            amount = BigDecimal(10.20), // Необязательный параметр. Предустановленная сумма оплаты
            service = MTSPayRefillServiceOptions( // Необязательный объект для предустановленных параметров
                  serviceAlias = "Название предвыбранного сервиса оплаты", // Необязательный параметр.
                  phone = "9123456789", // Необязательный параметр. Номер телефона 10 цифр без кода страны
                  bill = "123456789" // Необязательный параметр. 9-ти или 11..13-ти значный номер лицевого счета
            )
        )
    )
)

Предвыбранный инструмент оплаты при запуске SDK

Используйте объект MTSPaySelectedPaymentTool:

•  @param selectedPaymentToolType используйте параметры из PaymentToolComplexType

•  @param selectedPaymentToolId обязателен если используете PaymentToolComplexType.E_WALLET_BINDING

  data class MTSPaySelectedPaymentTool(
       val selectedPaymentToolType: PaymentToolComplexType,
       val selectedPaymentToolId: String? = null
  ) : Serializable

Передайте объект в MTSPayInitOptions или MTSPayMiniWidgetInitOptions(если инициализируете минивиджет)

Для получения результата работы SDK используйте ActivityResultContracts

По завершению работы SDK с кодом MTSPaySdkUI.MTS_PAY_RESULT_MESSAGE вовзращается объект MTSPayResultMessage

class MTSPayResultMessage(
    val resultType: MTSPayResultType, // enum PAY_SUCCESS - успешная оплата, PAY_ERROR - ошибка при оплате, PAY_USER_CANCEL - отменено пользователем
    val paymentId: String? = null, // Id платежа если платеж был успешным PAY_SUCCESS
    val sessionId: String? = null, // Id сессии
    val action: MTSPayActionType = MTSPayActionType.NOTHING, // Необходимые действия по окончанию работы SDK: SHOULD_OPEN_AUTO_PAYMENT_SETTINGS - не обходимо открыть страницу с настройками автоплатежей, SHOULD_OPEN_SUPPORT - необходимо открыть страницу поддержки пользователя
    val error: ErrorDomainModel? = null // объект ошибки если платеж завершился с ошибкой PAY_ERROR
) : Serializable

Пример CallBack’a resultLauncher

private var resultLauncher =
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
            MTSPaySdkUI.release()
             when (result.resultCode) {
                MTSPaySdkUI.MTS_PAY_RESULT_CODE -> {
                    result.data?.getSerializableExtra(MTSPaySdkUI.MTS_PAY_RESULT_MESSAGE)
                        ?.let { message ->
                            message as MTSPayResultMessage
                             when (message.resultType) {
                                MTSPayResultType.PAY_SUCCESS -> {
                                   // Успешный результат
                                }
                                 MTSPayResultType.PAY_ERROR -> {
                                  // Ошибка при оплате. ошибка в message.error
                                }
                                MTSPayResultType.PAY_USER_CANCEL -> {
                                   //пользователь вышел из модуля не завершив оплату
                                }
                            }
                            checkAction(message.action)
                        }
                }
            }
        }
 
    private fun checkAction(mtsPayActionType: MTSPayActionType) {
        when (mtsPayActionType) {
            MTSPayActionType.SHOULD_OPEN_AUTO_PAYMENT_SETTINGS -> {}
            MTSPayActionType.SHOULD_OPEN_SUPPORT -> {}
            MTSPayActionType.NOTHING -> {}
        }
    }

Возможные варианты инициализации MTSPaySdkEnvironment

Боевой сервер

val environment = MTSPaySdkEnvironment.Production(
    showLog = true // Необязательный параметр. По умолчанию false. Показывает логи запросов
)

Сервер для тестирования функционала

val environment = MTSPaySdkEnvironment.Stage(
    showLog = true // Необязательный параметр. По умолчанию true. Показывает логи запросов
)

Запуск

Для старта оплаты, необходимо передать выше указанные параметры

MTSPaySdkUI.startMTSPaySdkActivity(          
            requireContext(), // Обязательный параметр
            options, // Обязательный параметр. Параметры оплаты
            resultLauncher, // Обязательный параметр. CallBack`a для получения результата работы SDK
            environment // НЕ обязательный параметр. По умолчанию инициализруется MTSPaySdkEnvironment.Production()
 )

Дополнительные возможности SDK

Асинхронное получение token

Для асинхронного получения token в SDK — имплементируйте интерфейс AsyncAuthProvider из MTS Pay SDK. Вашу реализацию передайте в SDK

interface AsyncAuthProvider {
    fun getToken(): Observable<String>
}
........
class AsyncAuthProviderImpl() : AsyncAuthProvider {
    override fun getToken(): Observable<String> {
        return //ваша реализация получение token
    }
}
........
MTSPaySdkUI.setAsyncAuthProvider(AsyncAuthProviderImpl())
}

Аналитическая разметка (метрики)

Отправка аналитических метрик реализуется на стороне хост-приложения. Хост-приложение обогащает получаемые от модуля события всей необходимой информацией, такой как идентификаторы пользователя и прочее.

Для получения метрик необходимо передать объект, реализующий интерфейс MTSPayEventListener.

Пример реализации и обогащение данными cо стороны интегратора

interface MTSPayEventListener {
    fun onNewEvent(event: MTSPayEvent)
}
............
class EventListener() : MTSPayEventListener {
    override fun onNewEvent(event: MTSPayEvent) {
        event.toBundle().apply {
            "ваш" to "евент" // обогащение вашими данными
        }
    }
}
.............
MTSPaySdkUI.setAnalyticsEventListener(EventListener())
}