Кнопки оплаты Яндекс Пэй
Компонент com.yandex.pay.withredirect.api.button.YPayButton входит в модуль pay-with-redirect модульного мобильного SDK. Подключение, YPay.init и PaymentSession описаны в разделе Подключение оплаты по платежной ссылке; обзор Android SDK — Яндекс Пэй для Android; Client ID и Firebase — Настройка окружения. Тот же виджет используется в сценарии Пэй Виджет рядом с in-app оплатой.
Что такое кнопка оплаты
Кнопка оплаты Яндекс Пэй позволяет пользователю начать оплату заказа в приложении в один тап.
Вид кнопки зависит от доступных для использования методов оплаты, которые указаны в классе SessionListenerArgs в поле selectedPaymentMethods при привязке к платёжной сессии:
-
доступна полная оплата и Сплит:
-
доступен только Сплит:
Примечание
Переданные методы оплаты должны быть доступны и на бэкенде вашего магазина.
Для кнопки можно настроить внешний вид (тема, скругление, обводка) и обработку нажатия через лаунчер.
Параметры кнопки
Тема и обводка задаются в XML атрибутами или в коде свойствами класса YPayButton. В коде для темы используется YPayTheme (SYSTEM, LIGHT, DARK) из пакета com.yandex.pay.configuration — она же задаётся глобально в YPay.init; свойство colorScheme у кнопки позволяет переопределить тему только для этого виджета.
Ширина кнопки задаётся обычным android:layout_width контейнера: внутренний контент адаптивно подстраивается под доступную ширину (нет отдельного API «размера в pt», как в ранних версиях монолитного SDK).
| Параметр | Значение (Kotlin / XML) | Внешний вид |
|---|---|---|
| Тема | ||
colorScheme / app:ypay_color_scheme |
YPayTheme.SYSTEM / by_theme |
Тёмная тема ОС Светлая тема ОС |
colorScheme / app:ypay_color_scheme |
YPayTheme.LIGHT / light |
|
colorScheme / app:ypay_color_scheme |
YPayTheme.DARK / dark |
|
Обводка hasOutlineBorder / app:ypay_has_outline_border |
false |
|
true (по умолчанию) |
||
Скругление cornerRadius / app:ypay_corner_radius |
0dp |
|
16dp |
||
100dp |
Тип кнопки для сценария оплаты: app:ypay_button_type="pay" (значение по умолчанию; в коде — YPayButtonType.PAY).
Работа с кнопкой
Примечание
Сначала выполните шаги из раздела Подключение оплаты по платежной ссылке: YPay.init с payWithRedirectFlow, получите PaymentSession, создайте YPayLauncher.
Разместите кнопку в вёрстке и задайте атрибуты префикса app:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<com.yandex.pay.withredirect.api.button.YPayButton
android:id="@+id/ypay_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:ypay_button_type="pay"
app:ypay_color_scheme="by_theme"
app:ypay_corner_radius="8dp"
app:ypay_has_outline_border="true" />
</androidx.constraintlayout.widget.ConstraintLayout>
XML-атрибуты
| Атрибут | Значения | По умолчанию | Описание |
|---|---|---|---|
ypay_button_type |
pay |
pay |
Тип кнопки (сценарий оплаты) |
ypay_color_scheme |
by_theme, light, dark |
by_theme |
Соответствует YPayTheme.SYSTEM, LIGHT, DARK |
ypay_corner_radius |
dimension | значение ресурса по умолчанию SDK | Радиус скругления |
ypay_has_outline_border |
boolean | true |
Показывать обводку |
В коде привяжите сессию и зарегистрируйте запуск оплаты. bindTo вызывается на кнопке (не на сессии). До bindTo вызов setOnClickListener не сработает.
import com.yandex.pay.payment.PaymentData
import com.yandex.pay.session.PaymentMethodType
import com.yandex.pay.withredirect.api.launcher.YPayContractParams
import com.yandex.pay.withredirect.api.session.SessionListenerArgs
ypayButton.bindTo(
paymentSession = paymentSession,
args = SessionListenerArgs(
selectedPaymentMethods = listOf(PaymentMethodType.CARD, PaymentMethodType.SPLIT),
),
)
ypayButton.setOnClickListener(yPayLauncher) { buttonLauncher ->
buttonLauncher.launch(
YPayContractParams(
paymentSession = paymentSession,
paymentData = PaymentData(paymentUrl = getPaymentUrl()),
),
)
}
После bindTo зарегистрируйте setOnClickListener(yPayLauncher, …) — полный пример запуска см. в разделе «Запуск через кнопку».
По умолчанию SessionListenerArgs использует только оплату картой: listOf(PaymentMethodType.CARD).
Важно
Нельзя вызывать View.setOnClickListener у YPayButton — будет исключение. Используйте только setOnClickListener(YPayActionLauncher, YPayButton.OnClickListener?), как в разделе «Запуск через кнопку».
Динамически сменить тему:
import com.yandex.pay.configuration.YPayTheme
ypayButton.colorScheme = YPayTheme.DARK
Полный сценарий (результат оплаты, ошибки, запуск без кнопки) — в разделе Подключение оплаты по платежной ссылке.