SDK для Android
Библиотека позволяет встроить прием платежей в мобильные приложения на Android и работает как дополнение к API Яндекс.Кассы.
В мобильный SDK входят готовые платежные интерфейсы (форма оплаты и всё, что с ней связано). С помощью SDK можно получать токены для проведения оплаты с банковской карты, через Google Pay, Сбербанк Онлайн или из кошелька в Яндекс.Деньгах.
 Демо-приложение
Посмотреть, как выглядят платежные интерфейсы и как проходит процесс оплаты, можно в специальном демо-приложении. Установите приложение на ваше устройство и пройдите весь процесс так, как это сделают ваши пользователи: нажмите на кнопку Купить, введите данные банковской карты или кошелька на Яндексе. Приложение позволяет воспроизводить разные сценарии оплаты.
Приложение нужно устанавливать со смартфона
Скачивая демо-приложение, вы принимаете лицензионное соглашение.
 Порядок работы с SDK
Для начала вам нужно реализовать прием платежей по API Яндекс.Кассы. После этого:
  1. Сообщите менеджеру, что собираетесь проводить платежи с помощью мобильного SDK.
  2. Выпустите ключ для клиентских приложений в личном кабинете (эту возможность включает менеджер по запросу).
  3. Добавьте SDK в приложение и настройте выпуск одноразовых платежных токенов.
  4. Реализуйте отправку одноразовых токенов из мобильного приложения в вашу систему (например, в бэкенд вашего сайта, который отвечает за работу с Яндекс.Кассой).
  5. Проводите платежи с использованием платежных токенов через API Яндекс.Кассы.
 Подключение зависимостей
Чтобы использовать мобильный SDK, подключите зависимости через Gradle.
Дополнительно настройте приложение, если собираетесь принимать оплату из кошелька в Яндекс.Деньгах или продавать в приложении цифровые товары.
 Подключение зависимостей через Gradle
Для подключения библиотеки пропишите зависимости в 
build.gradle
вашего модуля.
Groovy
repositories {
    maven { url 'https://dl.bintray.com/yandex-money/maven' }
}

dependencies {
    implementation 'com.yandex.money:checkout:$versionName'
}
 Настройка приложения для приема платежей из кошелька в Яндекс.Деньгах
Чтобы принимать платежи из кошельков в Яндекс.Деньгах, необходима авторизация в Яндексе.
  1. Зарегистрируйте свое приложение в Яндекс.OAuth и сохраните ID. При регистрации:
    • введите название приложения;
    • в разделе Платформы выберите Android приложение и заполните настройки для Android;
    • в разделе API Яндекс.Паспорта выберите Доступ к логину, имени, фамилии и полу, чтобы имя пользователя отображалось без ошибок.
  2. Подключите
    YandexLoginSDK
    .
Groovy
android {
    defaultConfig {
        manifestPlaceholders = [YANDEX_CLIENT_ID:"ваш идентификатор приложения в Яндекс.OAuth"]
    }
}
repositories {
    mavenCentral()
}
dependencies {
    implementation "com.yandex.android:authsdk:$authsdkVersion"
}
 Настройка приложения при продаже цифровых товаров
Если в приложении вы продаете цифровые товары, отключите Google Pay (c его помощью нельзя платить за софт и другие товары). Для этого добавьте в AndroidManifest соответствующий код.
Java
<meta-data
    android:name="com.google.android.gms.wallet.api.enabled"
    tools:node="remove" />
 Использование библиотеки
Вся работа с библиотекой происходит через обращения к классу
ru.yandex.money.android.sdk.Checkout
.
С помощью SDK вы можете:
Токенизацию данных можно протестировать.
 Токенизация
 Шаг 1. Запуск токенизации
Для запуска токенизации вызовите метод
Checkout.createTokenizeIntent ()
. Метод вернет
Intent
, который нужно запустить в 
startActivityForResult ()
. После этого управление процессом перейдет в мобильный SDK.
Java
class MyActivity extends android.support.v7.app.AppCompatActivity {

    ...

    void timeToStartCheckout() {
        PaymentParameters paymentParameters = new PaymentParameters(
                new Amount(BigDecimal.TEN, Currency.getInstance("RUB")),
                "Название товара",
                "Описание товара",
                "live_AAAAAAAAAAAAAAAAAAAA",
                "12345"
        );
        Intent intent = Checkout.createTokenizeIntent(this, paymentParameters);
        startActivityForResult(intent, REQUEST_CODE_TOKENIZE);
    }
}
Входные параметры метода
ПараметрТипОписание
context
ContextКонтекст приложения
paymentParameters
PaymentParametersПараметры платежа
testParameters
TestParametersПараметры для отладки
uiParameters
UiParametersНастройка интерфейса
Поля PaymentParameters
Обязательные поля PaymentParameters
ПараметрТипОписание
amount
AmountОбъект, содержащий сумму заказа и валюту.
title
StringНазвание товара.
subtitle
StringОписание товара.
clientApplicationKey
StringКлюч для клиентских приложений из личного кабинета Яндекс.Кассы.
shopId
StringИдентификатор магазина в Яндекс.Кассе.
Необязательные поля PaymentParameters
ПараметрТипОписание
paymentMethodTypes
PaymentMethodTypeСпособы оплаты, доступные пользователю в приложении. Если оставить поле пустым или передать в нем
null
, мобильный SDK будет использовать все доступные способы оплаты.
gatewayId
StringИдентификатор субаккаунта. Используется для разделения потоков платежей в рамках одного аккаунта. Необязательный параметр.
customReturnUrl
StringURL страницы, на которую надо вернуться после 3-D Secure. Только HTTPS. Необходим, только если вы используете собственный Activity при реализации 3-D Secure. Если вы используете Activity мобильного SDK, не задавайте этот параметр.
userPhoneNumber
StringНомер телефона пользователя для оплаты через Сбербанк Онлайн. Используется для автозаполнения платежной формы. Указывается в формате: «+7XXXXXXXXXX».
googlePayParameters
GooglePayParametersНастройки для оплаты через Google Pay
Поля класса Amount
ПараметрТипОписание
value
BigDecimalСумма заказа. Максимальное и минимальное значения зависят от выбранного способа оплаты и настроек вашего аккаунта в Яндекс.Кассе.
currency
CurrencyВалюта.
Значения PaymentMethodType
  • YANDEX_MONEY
     — Яндекс.Деньги (платежи из кошелька или привязанными картами);
  • BANK_CARD
     — банковские карты (карты можно сканировать);
  • SBERBANK
     — Сбербанк Онлайн (с подтверждением оплаты по смс);
  • GOOGLE_PAY
     — Google Pay.
Поля класса GooglePayParameters
ПараметрТипОписание
allowedCardNetworks
Set (GooglePayCardNetwork)Платежные системы, карты которых можно использовать в вашем приложении для оплаты через Google Pay. Возможные значения:
MASTERCARD
,
VISA
,
AMEX
,
DISCOVER
,
JCB
,
INTERAC
,
OTHER
 Шаг 2. Получение результата токенизации
Результат токенизации будет возвращен в 
onActivityResult ()
. Возможные коды результата (
resultCode
):
  • Activity.RESULT_OK
     — токенизация прошла успешно;
  • Activity.RESULT_CANCELED
     — пользователь отменил токенизацию.
В случае успешной токенизации SDK вернет платежный токен и способ оплаты. Чтобы получить токен, вызовите метод
Checkout.createTokenizationResult ()
и передайте в нем
Intent
из 
onActivityResult ()
.
Java
public final class MainActivity extends AppCompatActivity {

    ...

     @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);

            if (requestCode == REQUEST_CODE_TOKENIZE) {
                switch (resultCode) {
                    case RESULT_OK:
                        // successful tokenization
                        TokenizationResult result = Checkout.createTokenizationResult(data);
                        ...
                        break;
                    case RESULT_CANCELED:
                        // user canceled tokenization
                        ...
                        break;
                }
            }
        }
}
Checkout.createTokenizationResult ()
возвращает
TokenizationResult
.
Параметры TokenizationResult
ПараметрТипОписание
paymentToken
StringПлатежный токен.
paymentMethodType
PaymentMethodTypeСпособ оплаты.
Значения
PaymentMethodType
:
  • YANDEX_MONEY
     — Яндекс.Деньги (платежи из кошелька или привязанными картами);
  • BANK_CARD
     — банковские карты;
  • SBERBANK
     — Сбербанк Онлайн (с подтверждением оплаты по смс);
  • GOOGLE_PAY
     — Google Pay.
 Тестовые параметры и отладка токенизации
Вы можете отладить токенизацию с помощью тестового режима и логирования.
Тестовый режим позволяет проверить работу SDK без реальных данных. Вы можете посмотреть, как работает SDK в разных условиях, и сгенерировать тестовый токен. В тестовом режиме мобильному SDK не нужен доступ в интернет.
Тестовый токен нельзя использовать для реальных платежей.
Мобильный SDK логирует все операции. Вы можете включить отображение логов для реальных и тестовых платежей. Все логи начинаются с тега 'Yandex.Checkout.SDK'.
Для отладки токенизации в вызов
Checkout.createTokenizeIntent ()
добавьте объект
TestParameters
.
Java
class MyActivity extends android.support.v7.app.AppCompatActivity {

    ...

    void timeToStartCheckout() {
        PaymentParameters paymentParameters = new PaymentParameters(...);
        TestParameters testParameters = new TestParameters(true, true, new MockConfiguration(false, true, 5));
        Intent intent = Checkout.createTokenizeIntent(this, paymentParameters, testParameters);
        startActivityForResult(intent, REQUEST_CODE_TOKENIZE);
    }
}
Поля класса
TestParameters:
ПараметрТипОписание
showLogs
BooleanОтображение логов мобильного SDK.
mockConfiguration
MockConfigurationНастройки тестовой конфигурации. Если этот параметр присутствует, мобильный SDK будет работать в офлайн-режиме и генерировать тестовый токен.
Поля класса
MockConfiguration
:
ПараметрТипОписание
completeWithError
BooleanТокенизация всегда возвращает ошибку.
paymentAuthPassed
BooleanПользователь всегда авторизован.
linkedCardsCount
IntКоличество карт, привязанных к кошельку пользователя.
 Настройка интерфейса
Интерфейс мобильного SDK можно настраивать с помощью объекта
UiParameters
.
Поля класса
UiParameters
:
ПараметрТипОписание
showLogo
BooleanПоказать или скрыть логотип Яндекс.Кассы на экране способов оплаты.
colorScheme
ColorSchemeЦветовая схема приложения.
Поля класса
ColorScheme
:
ПараметрТипОписание
primaryColor
ColorIntОсновной цвет, который будет использоваться в качестве фона кнопок и других элементов интерфейса. Не рекомендуется выбирать слишком светлые оттенки (в приложении белый фон, и светлые элементы интерфейса на нем потеряются) и красный цвет (это цвет ошибки).
Java
class MyActivity extends android.support.v7.app.AppCompatActivity {

    ...

    void timeToStartCheckout() {
        PaymentParameters paymentParameters = new PaymentParameters(...);
        UiParameters uiParameters = new UiParameters(true, new ColorScheme(Color.rgb(0, 114, 245)));
        Intent intent = Checkout.createTokenizeIntent(this, paymentParameters, new TestParameters(), uiParameters);
        startActivityForResult(intent, REQUEST_CODE_TOKENIZE);
    }
}
 3-D Secure
В мобильном SDK есть Activity для обработки 3-D Secure —
Checkout.create3dsIntent ()
.
Если вы обрабатываете 3-D Secure с помощью Activity мобильного SDK, не указывайте
PaymentParameters.customReturnUrl
при вызове
Checkout.createTokenizeIntent ()
.
Входные параметры для
Checkout.create3dsIntent ()
:
ПараметрТипОписание
context
ContextКонтекст для создания
Intent
.
url
StringURL для перехода на 3-D Secure.
colorScheme
ColorSchemeЦветовая схема.
Результат работы 3-D Secure можно получить в 
onActivityResult ()
. Возможные коды результата (
resultCode
):
  • Activity.RESULT_OK
     — аутентификация по 3-D Secure прошла успешно;
  • Activity.RESULT_CANCELED
     — экран 3-D Secure был закрыт (например, пользователь нажал на кнопку Назад);
  • Checkout.RESULT_ERROR
     — не удалось пройти аутентификацию по 3-D Secure.
Java
class MyActivity extends android.support.v7.app.AppCompatActivity {

    void timeToStart3DS() {
        Intent intent = Checkout.create3dsIntent(
                this,
                "https://3dsurl.com/"
        );
        startActivityForResult(intent, 1);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 1) {
            switch (resultCode) {
                case RESULT_OK:
                    // Аутентификация по 3-D Secure прошла успешно
                    break;
                case RESULT_CANCELED:
                    // Экран 3-D Secure был закрыт
                    break;
                case Checkout.RESULT_ERROR:
                    // Во время 3-D Secure произошла какая-то ошибка
                    //(например, нет соединения),
                    // более подробную информацию можно посмотреть в data:
                    // data.getIntExtra(Checkout.EXTRA_ERROR_CODE) — код ошибки из WebViewClient.ERROR_* или Checkout.ERROR_NOT_HTTPS_URL
                    // data.getStringExtra(Checkout.EXTRA_ERROR_DESCRIPTION) — описание ошибки (может отсутствовать)
                    // data.getStringExtra(Checkout.EXTRA_ERROR_FAILING_URL) — URL, по которому произошла ошибка (может отсутствовать)
                    break;
            }
        }
    }
}
 Сканирование банковской карты
Создайте
Activity
, обрабатывающую action
ru.yandex.money.android.sdk.action.SCAN_BANK_CARD
.
XML
<activity android:name=".ScanBankCardActivity">

    <intent-filter>
        <action android:name="ru.yandex.money.android.sdk.action.SCAN_BANK_CARD"/>
    </intent-filter>

</activity>
В этой
Activity
запустите вашу библиотеку для сканирования карты. Полученный номер карты передайте c помощью
Intent
.
Если сканирование прошло успешно, укажите
Activity.RESULT_OK
.
Java
public class ScanBankCardActivity extends Activity {

    private void onScanningDone(final String cardNumber, final int expirationMonth, final int expirationYear) {

        final Intent result = Checkout.createScanBankCardResult(cardNumber, expirationMonth, expirationYear);

        setResult(Activity.RESULT_OK, result);

        finish();

    }

}
 Что почитать еще
Платежный токенПроведение платежейСпособы оплатыВходящие уведомления