Skip to content
No description, website, or topics provided.
Branch: master
Clone or download
Latest commit 0000b4d Mar 1, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
gradle/wrapper
library
pay-cards-sdk initial Jul 12, 2018
sample Version update: 2.1.0 Mar 1, 2019
CHANGELOG.md Version update: 2.1.0 Mar 1, 2019
CODEOWNERS
LICENSE.txt initial Jul 12, 2018
README.md Fix README Mar 1, 2019
build.gradle Version update: 2.1.0 Mar 1, 2019
common.gradle
gradle.properties initial Jul 12, 2018
gradlew initial Jul 12, 2018
gradlew.bat
sensitive.gradle Version update: 1.3.0.4 Dec 14, 2018
settings.gradle

README.md

Android Checkout MSDK

Эта библиотека позволяет встроить прием платежей в мобильные приложения на Android. Она работает как дополнение к API Яндекс.Кассы.

В mSDK входят готовые платежные интерфейсы (форма оплаты и всё, что с ней связано).

С помощью mSDK можно получать токены для проведения оплаты с банковской карты, Google Pay, Сбербанка или из кошелька в Яндекс.Деньгах.

В этом репозитории лежит код mSDK и пример приложения, которое его интегрирует.

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

mSDK - версия 2.1.0 (changelog)

Подключение зависимостей

Подключение через Gradle

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

repositories {
    maven { url 'https://dl.bintray.com/yandex-money/maven' }
}

dependencies {
    implementation 'com.yandex.money:checkout:2.1.0'
}

Подключение YandexLoginSDK

Если среди платёжных методов есть кошелёк Яндекс.Денег, необходимо подключить YandexLoginSDK. В остальных случаях этот шаг можно пропустить.

На странице создания приложения, в разделе Платформы надо выбрать Android приложение

В разделе API Яндекс.Паспорта надо добавить Доступ к логину, имени, фамилии и полу для корректного отображения имени пользователя

android {
    defaultConfig {
        manifestPlaceholders = [YANDEX_CLIENT_ID:"ваш id приложения в Яндекс.Паспорте"]
    }
}
repositories {
    mavenCentral()
}
dependencies {
    implementation "com.yandex.android:authsdk:2.1.0"
}

Настройка приложения при продаже цифровых товаров

Если в вашем приложении продаются цифровые товары, нужно отключить Google Pay из списка платежных опций. Для этого добавьте в AndroidManifest следующий код:

<meta-data
    android:name="com.google.android.gms.wallet.api.enabled"
    tools:node="remove" />

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

Вся работа с библиотекой происходит через обращения к классу ru.yandex.money.android.sdk.Checkout

Токенизация

Запуск токенизации

Для запуска процесса токенизации используется метод Checkout.createTokenizeIntent(). Метод отдаёт Intent, который нужно запустить в startActivityForResult(). После этого управление процессом перейдёт в mSDK. Готовый платёжный токен можно получить в onActivityResult() (см. Получение результата токенизации)

Входные параметры метода:

Поля PaymentParameters:

Обязательные:

  • amount (Amount) - стоимость товара. Допустимые способы оплаты могут меняться в зависимости от этого параметра;
  • title (String) - название товара;
  • subtitle (String) - описание товара;
  • clientApplicationKey (String) - токен магазина, полученный в Яндекс.Кассе;
  • shopId (String) - идентификатор магазина в Яндекс.Кассе.

Необязательные:

  • paymentMethodTypes (PaymentMethodType) - ограничения способов оплаты. Если оставить поле пустым или передать в него null, библиотека будет использовать все доступные способы оплаты;
  • gatewayId (String) - gatewayId для магазина;
  • customReturnUrl (String) - url страницы (поддерживается только https), на которую надо вернуться после прохождения 3ds. Должен использоваться только при при использовании своего Activity для 3ds url. При использовании Checkout.create3dsIntent() не задавайте этот параметр.

Поля класса Amount:

  • value (BigDecimal) - сумма;
  • currency (Currency) - валюта.

Значения PaymentMethodType:

  • YANDEX_MONEY - оплата произведена с кошелька Яндекс.денег;
  • BANK_CARD - оплата произведена с банковской карты;
  • SBERBANK - оплата произведена через Сбербанк (SMS invoicing или Сбербанк онлайн);
  • GOOGLE_PAY - оплата произведена через Google Pay.
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);
    }
}

Получение результата токенизации

Результат токенизации будет возвращен в onActivityResult().

Возможные типы результата:

  • Activity.RESULT_OK - токенизация прошла успешно;
  • Activity.RESULT_CANCELED - пользователь отменил токенизацию;

В случае успешной токенизации MSDK вернёт токен и тип платежного инструмента, с помощью которого он был получен. Для получения токена используйте метод Checkout.createTokenizationResult() и передайте туда intent, полученный в onActivityResult().

Checkout.createTokenizationResult() возвращает TokenizationResult, который состоит из:

  • paymentToken (String) - платежный токен;
  • paymentMethodType (PaymentMethodType) - тип платежного средства.

Значения PaymentMethodType:

  • YANDEX_MONEY - оплата произведена с кошелька Яндекс.денег;
  • BANK_CARD - оплата произведена с банковской карты;
  • SBERBANK - оплата произведена через Сбербанк (SMS invoicing или Сбербанк онлайн);
  • GOOGLE_PAY - оплата произведена через Google Pay.
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.createTokenizeIntent() можно добавить объект TestParameters.

Поля класса TestParameters:

  • showLogs (Boolean) - включить отображение логов mSDK. Все логи начинаются с тега 'Yandex.Checkout.SDK'
  • googlePayTestEnvironment (Boolean) - использовать тестовую среду Google Pay - все транзакции, проведенные через Google Pay, будут использовать WalletConstants.ENVIRONMENT_TEST. Подробнее см. на https://developers.google.com/pay/api/android/guides/test-and-deploy/integration-checklist#about-the-test-environment.
  • mockConfiguration (MockConfiguration) - использовать моковую конфигурацию. Если этот параметр присутствует, mSDK будет работать в оффлайн режиме и генерировать тестовый токен. Этот токен нельзя использовать для платежей.

MockConfiguration В библиотеке есть тестовый режим, с помощью которого можно посмотреть, как будет выглядеть работа SDK при различных входных данных. Для работы этого режима не нужен доступ в интернет. Полученный токен нельзя использовать для оплаты.

Поля класса MockConfiguration:

  • completeWithError (Boolean) - токенизация всегда возвращает ошибку;
  • paymentAuthPassed (Boolean) - пользователь всегда авторизован;
  • linkedCardsCount (Int) - количество карт, привязанных к кошельку пользователя.
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);
    }
}

Настройка интерфейса

Для настройки интерфейса mSDK можно использовать объект UiParameters. Можно настроить цвета интерфейса и показ/скрытие логотипа Яндекс.Кассы.

Поля класса UiParameters:

  • showLogo (Boolean) - показать/скрыть лого Яндекс.Кассы на экране способов оплаты.
  • colorScheme (ColorScheme) - цветовая схема mSDK.

Поля класса ColorScheme:

  • primaryColor (ColorInt) - основной цвет приложения. В этот цвет будут краситься кнопки, переключатели, поля для ввода и т.д. Не рекомендуется задавать в качестве этого цвета слишком светлые цвета (они будут не видны на белом фоне) и красный цвет (он будет пересекаться с цветом ошибки).
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);
    }
}

3DSecure

Для упрощения интеграции в mSDK есть Activity для обработки 3DS. Не указывайте PaymentParameters.customReturnUrl при вызове Checkout.createTokenizeIntent(), если используете это Activity.

Входные параметры для Checkout.create3dsIntent():

  • context (Context) - контекст для создания Intent;
  • url (String) - URL для перехода на 3DS.

Результат работы 3ds можно получить в onActivityResult()

Возможные типы результата:

  • Activity.RESULT_OK - 3ds прошёл успешно;
  • Activity.RESULT_CANCELED - прохождение 3ds было отменено (например, пользователь нажал на кнопку "назад" во время процесса);
  • Checkout.RESULT_ERROR - не удалось пройти 3ds.

Запуск 3ds и получение результата

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:
                    // 3ds прошел
                    break;
                case RESULT_CANCELED:
                    // экран 3ds был закрыт
                    break;
                case Checkout.RESULT_ERROR:
                    // во время 3ds произошла какая-то ошибка (нет соединения или что-то еще)
                    // более подробную информацию можно посмотреть в 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

Подключение activity для сканирования

<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, если сканирование прошло успешно.

Возвращение результата с activity

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();
    
    }
    
}

Полезные ссылки

You can’t perform that action at this time.