Подключение оплаты по платежной ссылке
- Общая информация
- Шаг 1. Выполните настройку окружения
- Шаг 2. Подключите Yandex Pay SDK
- Шаг 3. Получите объект платежной сессии
- Шаг 4. (опционально) Разместите кнопку Яндекс Пэй на экране
- Шаг 5. Инициализируйте контракт запуска Яндекс Пэй
- Шаг 6. Сформируйте данные для запуска Яндекс Пэй
- Шаг 7. Запустите сервис Яндекс Пэй
- Шаг 8. Обработайте результат
Общая информация
Примечание
Начиная с версии 2.3.0-alpha01 SDK переведен на новую схему работы. Подробнее можно узнать в этой статье.
Схема работы
- Пользователь нажимает кнопку оплаты в приложении.
-
Пользователь переходит на экран платежной формы Яндекс Пэй, где отображается информация о заказе и способы оплаты:
- список банковских карт пользователя;
- варианты оплаты через систему быстрых платежей (СБП).
-
Пользователь выбирает способ оплаты и нажимает кнопку подтверждения заказа.
- Сервис Яндекс Пэй проводит платеж и возвращает результат выполнения операции.
Визуальное представление оплаты картой:
Визуальное представление оплаты сплитом:
Визуальное представление добавления карты:
Требования к подключению
Поддерживаемая версия: Android 7.0 и выше.
Примечание
Если ваш проект имеет minSdkVersion 23 или ниже, то прочитайте пункт о поддержке младших версий устройств.
Шаг 1. Выполните настройку окружения
Смотрите документацию о том, как подготовить проект к интеграции.
Шаг 2. Подключите Yandex Pay SDK
Укажите зависимость в ваших сборочных скриптах build.gradle
:
dependencies {
implementation 'com.yandex.pay:pay:2.3.10'
}
Шаг 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
.