Подключение оплаты по платежной ссылке

Общая информация

Примечание

Начиная с версии 2.3.0-alpha01 SDK переведен на новую схему работы. Подробнее можно узнать в этой статье.

Схема работы

  1. Пользователь нажимает кнопку оплаты в приложении.
  2. Пользователь переходит на экран платежной формы Яндекс Пэй, где отображается информация о заказе и способы оплаты:

    • Список банковских карт пользователя.
    • Варианты оплаты через систему быстрых платежей (СБП).
  3. Пользователь выбирает способ оплаты и нажимает кнопку подтверждения заказа.

  4. Сервис Яндекс Пэй проводит платеж и возвращает результат выполнения операции.

Визуальное представление оплаты картой: flow

Визуальное представление оплаты сплитом: flow

Визуальное представление добавления карты: flow

Требования к подключению

Поддерживаемая версия: Android 7.0 и выше.

Примечание

Если ваш проект имеет minSdkVersion 23 или ниже, то прочитайте пункт о поддержке младших версий устройств.

Шаг 1. Выполните настройку окружения

Смотрите документацию о том, как подготовить проект к интеграции.

Шаг 2. Подключите Yandex Pay SDK

Укажите зависимость в ваших сборочных скриптах build.gradle:

dependencies {
    implementation 'com.yandex.pay:pay:2.3.0-alpha02'
}

Шаг 3. Получите объект платежной сессии

При помощи функции getYandexPaymentSession получите объект платежной сессии:

  private val yaPayConfig = YPayConfig(
    merchantData = MerchantData(
        id = MerchantId("merchantId"),
        name = MerchantName("merchantName"),
        url = MerchantUrl("https://merchant.com/"),
    ),
    environment = YPayApiEnvironment.PROD,
  )

  private val paymentSessionKey = PaymentSessionKey(
    generateSessionKey()
  )

  private val paymentSession: PaymentSession = YPay.getYandexPaymentSession(
    context = this,
    config = yaPayConfig,
    sessionKey = paymentSessionKey  // является необязательным в реализации на Kotlin
  )
  private YPayConfig getPayConfig() {
    return new YPayConfig(
        new MerchantData(
            new MerchantId("merchantId"),
            new MerchantName("MERCHANT_NAME"),
            new MerchantUrl("https://merchant.com/")
        ),
        YPayApiEnvironment.PROD
    );
  }

  private PaymentSessionKey getPaymentSessionKey() {
    return new PaymentSessionKey(
        generateSessionKey()
    );
  }

  private PaymentSession getPaymentSession() {
    return YPay.INSTANCE.getYandexPaymentSession(
        this,
        getPaymentSessionKey(),
        getPayConfig()
    );
  }

При получении PaymentSession необходимо передать:

  • Context — контекст приложения или Activity.
  • PaymentSessionKey - ключ платежной сессии.
  • YPayConfig — данные конфигурации Yandex Pay SDK.

При создании YPayConfig необходимо передать:

  • merchantData — данные продавца:
    • id — уникальный идентификатор продавца. Его можно получить при регистрации продавца в сервисе Яндекс Пэй.
    • name — наименование продавца, которое будет отображаться у пользователя.
    • url — URL продавца, который будет отображаться у пользователя.
  • environment — среда выполнения Yandex Pay SDK:
    • PROD — production окружение.
    • SANDBOX— тестовое окружение.

Шаг 4. (опционально) Разместите кнопку Яндекс Пэй на экране

Разместите кнопку в вашей верстке:

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <com.yandex.pay.YPayButton
        android:id="@+id/y_pay_button"
        android:layout_width="300dp"
        android:layout_height="54dp"
        android:layout_marginTop="4dp"
        app:ypay_color_scheme="by_theme"
        app:ypay_corner_radius="4dp" />

При создании кнопки можно передать значения атрибутов:

  • ypay_color_scheme — позволяет определить цветовую гамму кнопки. Возможные значения:
    • by_theme — цветовая гамма адаптируется в зависимости от темы в системе.
    • light — всегда светлая цветовая гамма.
    • dark — всегда темная цветовая гамма.
  • ypay_corner_radius — позволяет определить закругление кнопки, значение передается в dp.

При инициализации view компонентов свяжите текущий объект сессии с кнопкой при помощи объекта класса PaymentSession и его функции bindTo:

Передайте дополнительно SessionListenerArgs, в котором укажите платежные способы для пользователя.

fun initViews() {
    paymentSession.bindTo(yPayButton, SessionListenerArgs(listOf(PaymentMethodType.CARD,PaymentMethodType.SPLIT)))
}
void initViews() {
    getPaymentSession().bindTo(yPayButton);
}

После привязки кнопка сможет показывать персонализированные данные пользователя.

Шаг 5. Инициализируйте контракт запуска Яндекс Пэй

При инициализации контракта добавьте callback с получением результата YPayResult:

private val yandexPayLauncher = YPayLauncher(this) { result: YPayResult ->
    when (result) {
        is YPayResult.Success -> showToast("Finished with success")
        is YPayResult.Cancelled -> showToast("Finished with cancelled event")
        is YPayResult.Failure -> showToast("Finished with domain error")
    }
}
private final YPayLauncher launcher = new YPayLauncher(this, yPayResult -> {
    if (yPayResult instanceof YPayResult.Cancelled) {
        handleResult("Finished with cancelled event");
    } else if (yPayResult instanceof YPayResult.Success) {
        handleResult("Finished with success");
    } else if (yPayResult instanceof YPayResult.Failure) {
        handleResult("Finished with domain error");
    }
});

Шаг 6. Сформируйте данные для запуска Яндекс Пэй

Перед запуском Яндекс Пэй сформируйте платежные данные при помощи класса PaymentData.PaymentUrlFlowData, а также данные платежной сессии. Сформируйте YPayContractParams на их основе.

val paymentData = PaymentData.PaymentUrlFlowData(
    // Ссылка на оплату заказа
    "payment-url"
)

val params = YPayContractParams(
    paymentSession = paymentSession,
    paymentData = paymentData,
)
final PaymentData paymentData = new PaymentData.PaymentUrlFlowData(
    // Ссылка на оплату заказа
    "payment-url"
);

// параметры запуска Яндекс Пэй
final YPayContractParams params = new YPayContractParams(
    getPaymentSession(),
    paymentData
);

Примечание

Если вы хотите проводить оплату в Сплит, при создании ссылки передайте необходимые параметры в availablePaymentMethods.

Подробнее про генерацию платежной ссылки можно посмотреть в документации бэкенда.

Шаг 7. Запустите сервис Яндекс Пэй

Запуск через кнопку Яндекс Пэй

Передайте ранее созданный лаунчер в кнопку при помощи функции setOnClickListener и определите логику его запуска в lambda-выражении. При запуске лаунчера передайте в него параметры YPayContractParams:

yPayButton.setOnClickListener(yandexPayLauncher) { launcher ->
    val params = YPayContractParams(...)
    launcher.launch(params)
}
yPayButton.setOnClickListener(yandexPayLauncher, launcher -> {
    YPayContractParams params = new YPayContractParams(...);
    launcher.launch(params);
});

Важно

У YPayButton создана своя функция setOnClickListener, всю логику обработки нажатия следует определять в ней. Вызов View.setOnClickListener приведет к выбросу исключения.

Запуск без кнопки

Запустите сервис с помощью лаунчера, передав параметры запуска YPayContractParams:

val params = YPayContractParams(...)
yandexPayLauncher.launch(params)
final YPayContractParams params = new YPayContractParams(...);
yandexPayLauncher.launch(params);

Шаг 8. Обработайте результат

После запуска сервиса Яндекс Пэй, SDK выберет оптимальную стратегию и запустит платежную форму, в рамках которой будет проведена оплата. Результат будет получен с помощью контракта запуска YPayLauncher.