tinkoff-mobile-tech / tinkoff-asdk-android-old

Tinkoff Acquiring SDK for Android
Other
32 stars 16 forks source link
acquiring android java

Tinkoff Acquiring SDK for Android

Внимание! Появилась новая версия Acquiring SDK 2.0, которая теперь находится в репозитории AcquiringSdkAndroid

Рекомендуем перейти на новую версию библиотеки.

В версии 2.0 появились новые возможности:

Кроме этого, теперь библиотека написана на Kotlin, а также улучшен и переработан API библиотеки.


Acquiring SDK позволяет интегрировать Интернет-Эквайринг Tinkoff в мобильные приложения для платформы Android.

Возможности SDK:

Требования

Для работы Tinkoff Acquiring SDK необходим Android версии 4.4 и выше (API level 19).

Подключение

Для подключения SDK добавьте в build.gradle вашего проекта следующую зависимость:

compile 'ru.tinkoff.acquiring:ui:$latestVersion'

Если вы хотите внедрить сканирование с помощью библиотеки Card-IO, то необходимо добавить в build.gradle

compile 'ru.tinkoff.acquiring:card-io:$latestVersion'

Подготовка к работе

Для начала работы с SDK вам понадобятся:

Которые выдаются после подключения к Интернет-Эквайрингу.

Пример работы

Для проведения оплаты необходимо запустить PayFormActivity. Активити должна быть настроена на обработку конкретного платежа, поэтому для получения интента для ее запуска необходимо вызвать цепочку из методов PayFormActivity#init, PayFormStarter#prepare и PayFormStarter#setCustomerKey:

PayFormActivity
        .init("TERMINAL_KEY", "PASSWORD", "PUBLIC_KEY") // данные продавца
        .prepare(
               "ORDER-ID",                  // ID заказа в вашей системе
                1000,                       // сумма для оплаты
                "НАЗВАНИЕ ПЛАТЕЖА",         // название платежа, видимое пользователю
                "ОПИСАНИЕ ПЛАТЕЖА",         // описание платежа, видимое пользователю
                "CARD-ID",                  // ID карточки
                "batman@gotham.co",         // E-mail клиента для отправки уведомления об оплате
                false,                      // флаг определяющий является ли платеж рекуррентным [1]
                true                        // флаг использования безопасной клавиатуры [2]
        )
        .setCustomerKey("CUSTOMER_KEY")     // уникальный ID пользователя для сохранения данных его карты
        .startActivityForResult(this, REQUEST_CODE_PAYMENT);

Можно передать данные чека на форму, указав парметр Receipt в метод PayFormStarter#setReceipt и кастомизировать форму передав мапу с параметрами в метод PayFormStarter#setData. Так же можно указать тему и запустить форму для оплаты уже с привязанных карт (реккурентынй платеж), а также указать модуль для сканирования (свой или CameraCardIOScanner)

PayFormActivity
        .init("TERMINAL_KEY", "PASSWORD", "PUBLIC_KEY") // данные продавца
        .prepare(//TODO params)
        .setCustomerKey("CUSTOMER_KEY")     // уникальный ID пользователя для сохранения данных его карты
        .setReceipt(receipt)
        .setData(dataMap)
        .setTheme(themeId)
        .setChargeMode(chargeMode)
        .setCameraCardScanner(new CameraCardIOScanner()))
        .startActivityForResult(this, REQUEST_CODE_PAYMENT);

Данные объекты при их наличии будут переданы на сервер с помощью метода API Init, где можно посмотреть детальное описание объекта Receipt

[1] Рекуррентный платеж может производиться для дальнейшего списания средств с сохраненной карты, без ввода ее реквизитов. Эта возможность, например, может использоваться для осуществления платежей по подписке.

[2] Безопасная клавиатура используется вместо системной и обеспечивает дополнительную безопасность ввода, т.к. сторонние клавиатуры на устройстве клиента могут перехватывать данные и отправлять их злоумышленнику.

Экран привязки карт

Для запуска привязки карт необходимо запустить AttachCardFormActivity. Активити должна быть настроена на обработку конкретного платежа, поэтому для получения интента для ее запуска необходимо вызвать цепочку из методов AttachCardFormActivity#init, AttachCardFormActivity#prepare:

AttachCardFormActivity
        .init("TERMINAL_KEY", "PASSWORD", "PUBLIC_KEY") // данные продавца
        .prepare(
                "CUSTOMER_KEY",                         // уникальный ID пользователя для сохранения данных его карты                             
                CheckType.THREE_DS,                     // тип привязки карты
                true,                                   // флаг использования безопасной клавиатуры
                "E-MAIL")                               // e-mail клиента
        .startActivityForResult(this, ATTACH_CARD_REQUEST_CODE);

По аналогии с PayFormActivity, форму привязки карты можно кастомизировать

AttachCardFormActivity
        .init("TERMINAL_KEY", "PASSWORD", "PUBLIC_KEY") // данные продавца
        .prepare("CUSTOMER_KEY", CheckType.THREE_DS, true, "E-MAIL")   
        .setData(data)
        .setTheme(themeId)
        .setCameraCardScanner(new CameraCardIOScanner()))
        .startActivityForResult(this, ATTACH_CARD_REQUEST_CODE);

Темы

для более подробного раздела прочитайте соответвующую тему на wiki страничке. В приложении есть базовая тема AcquiringTheme. Если вы хотите что-то изменить, то отнаследуйтесь от нее и переопределите нужные аттрибуты.

На обоих активити используется одна и та же тема, просто на AttachCardFormActivity не используются некоторые аттрибуты.

Структура

SDK состоит из следующих модулей:

Core

Является базовым модулем для работы с Tinkoff Acquiring API. Модуль реализует протокол взаимодействия с сервером и позволяет не осуществлять прямых обращений в API. Не зависит от Android SDK и может использоваться в standalone Java приложениях.

Основной класс модуля - AcquiringSdk - предоставляет фасад для взаимодействия с Tinkoff Acquiring API. Для работы необходимы ключи и пароль продавца (см. Подготовка к работе).

UI

Содержит интерфейс, необходимый для приема платежей через мобильное приложение.

Основной класс - PayFormActivity - экран с формой оплаты, который позволяет:

Google Pay

Документация

Для включения Google Pay необходимо:

Добавить мета информацию в манифест приложения

    <meta-data
        android:name="com.google.android.gms.wallet.api.enabled"
        android:value="true" />

Сконфигурировать необходимые параметры

    GooglePayParams googlePayParams = new GooglePayParams.Builder()
                    .setMerchantName(getString(R.string.merchant_name))
                    .setAddressRequired(false)
                    .setPhoneRequired(false)
                    .setTheme(WalletConstants.THEME_LIGHT)
                    .setBuyButtonAppearance(WalletFragmentStyle.BuyButtonAppearance.ANDROID_PAY_LIGHT)
                    .setEnvironment(WalletConstants.ENVIRONMENT_TEST)
                    .build();

Передать параметры в PayFormActivity

PayFormActivity
        .init(TERMINAL_KEY, PASSWORD, PUBLIC_KEY) // данные продавца
        .prepare()
        .setGooglePayParams(params)
        .setCustomerKey(CUSTOMER_KEY)
        .startActivityForResult(this, REQUEST_CODE_PAYMENT);

Card-IO

Модуль для сканирование карты с помощью камеры с помощью библиотеки Card-IO.

Proguard

-keep class ru.tinkoff.acquiring.sdk.views.** { *; }

Sample

Содержит пример интеграции Tinkoff Acquiring SDK и модуля сканирования Card-IO в мобильное приложение по продаже книг.

Поддержка