- Общая информация
- Шаг 1. Подготовка идентификаторов
- Шаг 2. Настройка проекта
- Шаг 3. Подключение Yandex Pay SDK
- Шаг 4. Получение объекта платежной сессии
- Шаг 5. (опционально) Размещение кнопки Яндекс Пэй на экране
- Шаг 6. Инициализация контракта запуска Яндекс Пэй
- Шаг 7. Формирование данных для запуска Яндекс Пэй
- Шаг 8. Запуск сервиса Яндекс Пэй
- Шаг 9. Обработка результата
- Настройка для устройств с версией ниже 7.0
Не переживайте, с вашими деньгами все в порядке
В результате атак БПЛА пострадали инфраструктуры дата-центров Яндекса. Мы делаем все возможное для восстановления работы наших сервисов.
Сейчас обращений больше, чем обычно, поэтому ожидание ответа может занять значимо больше времени. Поддержка ответит вам, как только сможет.
Спасибо за понимание и терпение.
Подключение оплаты по платежной ссылке
Важно
Яндекс Пэй SDK 1.x — устаревшая версия SDK. Рекомендуем подключаться к новому модульному SDK 2.0 — Yandex Pay Kit. Инструкцию по подключению смотрите в Документации Yandex Pay Kit.
Общая информация
Примечание
Начиная с версии 2.3.0-alpha01 SDK переведен на новую схему работы. Подробнее можно узнать в этой статье.
Схема работы
-
Пользователь нажимает на кнопку оплаты в приложении.
-
Пользователь переходит на экран платежной формы Яндекс Пэй, где отображается информация о заказе и способы оплаты:
- список банковских карт пользователя;
- варианты оплаты через систему быстрых платежей (СБП).
-
Пользователь выбирает способ оплаты и нажимает на кнопку подтверждения заказа.
-
Сервис Яндекс Пэй проводит платеж и возвращает результат выполнения операции.
Полная оплата

Оплата в Сплит

Требования к подключению
Поддерживаемая версия: Android 7.0 и выше.
Примечание
Если ваш проект имеет minSdkVersion 23 или ниже, то прочитайте пункт о поддержке младших версий устройств.
Шаг 1. Подготовка идентификаторов
Перед началом интеграции получите идентификаторы, которые понадобятся при подключении SDK:
- Merchant ID — идентификатор магазина в личном кабинете Яндекс Пэй. Узнать Merchant ID
- Android package name (
applicationId) — уникальный идентификатор Android-приложения. Подробнее об Application ID - SHA256 Fingerprints — криптографический хэш сертификата Android-приложения. Получить SHA256 Fingerprints
- Client ID (
YANDEX_CLIENT_ID) — идентификатор приложения в сервисе Яндекс OAuth. Получить Client ID
1.1 Получение SHA256 Fingerprints
Получите значение хеша SHA256 Fingerprints с помощью утилиты keytool:
keytool -list -v -alias <your-key-name> -keystore <path-to-production-keystore>
После ввода команды значение хеша отобразится в блоке Certificate fingerprints: SHA256.
1.2 Получение Client ID
Чтобы получить Client ID, зарегистрируйте приложение в сервисе Яндекс OAuth — это нужно, чтобы покупатели при оплате через Яндекс Пэй могли авторизоваться с помощью своего Яндекс ID.
Важно
Аккаунт, с которого вы регистрируете приложение в Яндекс OAuth, должен в Яндекс ID состоять в организации и иметь права разработчика. Добавить аккаунт в организацию и выдать права может сотрудник с ролью Владелец или Администратор.
Как проверить наличие прав
-
Если аккаунт состоит организации, в Яндекс OAuth при нажатии на фото профиля отображается название организации:

-
Чтобы проверить наличие прав разработчика, в Яндекс ID перейдите в список сотрудников организации → профиль сотрудника → Права в сервисах → Яндекс ID для сайта:

-
Перейдите в сервис Яндекс OAuth, нажмите кнопку Создать, выберите вариант Для авторизации пользователей и перейдите к созданию.

-
В поле Название вашего сервиса укажите название, которое будет отображаться пользователям на экране авторизации, и загрузите иконку приложения.

-
В разделе Платформы приложений выберите Android-приложение и укажите его параметры:
- Android package name — уникальное имя приложения из
applicationIdв конфигурационном файле проекта; - SHA256 Fingerprints — значение хеша SHA256. Все буквы в хеше должны быть заглавными.

- Android package name — уникальное имя приложения из
-
Добавьте доступ к Яндекс Пэй: в разделе Права доступа к данным пользователей в поле Название доступа укажите и выберите Оплата через Yandex Pay.
Примечание
Доступ Управление заказами Yandex Pay Checkout не требуется. Если он у вас добавлен, удалите его.

-
Нажмите кнопку Продолжить → Всё верно, создать приложение и скопируйте значение поля Client ID.

-
В разделе Настройки личного кабинета Яндекс Пэй нажмите Добавить Client ID и укажите значение Client ID.

Там же в разделе Настройки нажмите Добавить приложения, выберите нужный Client ID, платформу приложения и укажите SHA256 и Android package name в полях SHA256 Fingerprint и Android package name соответственно.

Шаг 2. Настройка проекта
Подготовьте Android-проект к работе с Яндекс Пэй SDK: подключите полученный Client ID и инициализируйте Firebase и AppMetrica.
2.1 Подключение Client ID
Укажите полученный Client ID в сборочном скрипте build.gradle в manifestPlaceholders в качестве значения YANDEX_PAY_CLIENT_ID:
android {
defaultConfig {
manifestPlaceholders = [
// Подставьте ваш Client ID
YANDEX_PAY_CLIENT_ID: "12345678901234567890",
]
}
}
2.2 Инициализация FirebaseApp
Мобильный SDK использует службы AppMetrica, которые необходимы для стабильной работы SDK. Этот шаг позволяет исправить проблемы совместимости сервисов Firebase и сервисов метрик.
При использовании Firebase вместе с Яндекс Пэй SDK необходимо вызывать FirebaseApp.initialize(context) во всех процессах приложения.
Если вы используете AppMetrica в своем приложении, активировать YandexMetrica необходимо после инициализации Firebase.
Пример
// Не забудьте объявить MyApplication в AndroidManifest.xml в блоке <application/>, используя android:name
class MyApplication: Application() {
override fun onCreate() {
// Инициализируется в каждом процессе приложения
FirebaseApp.initializeApp(this)
}
}
Шаг 3. Подключение Yandex Pay SDK
Укажите зависимость в ваших сборочных скриптах build.gradle:
dependencies {
implementation 'com.yandex.pay:pay:2.14.0'
}
Шаг 4. Получение объекта платежной сессии
При помощи функции getYandexPaymentSession получите объект платежной сессии:
private val yaPayConfig = YPayConfig(
merchantData = MerchantData(
id = MerchantId("merchantId"), // Merchant ID магазина из личного кабинета Яндекс Пэй
name = MerchantName("merchantName"), // Наименование продавца (магазина)
url = MerchantUrl("https://merchant.com/"), // URL сайта продавца (магазина)
),
environment = YPayApiEnvironment.PROD, // Необходимое окружение: SANDBOX — для тестовой среды, 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"), // Merchant ID магазина из личного кабинета Яндекс Пэй
new MerchantName("merchantName"), // Наименование продавца (магазина)
new MerchantUrl("https://merchant.com/") // URL сайта продавца (магазина)
),
YPayApiEnvironment.PROD // Необходимое окружение: SANDBOX — для тестовой среды, 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— Merchant ID магазина из личного кабинета Яндекс Пэй;name— наименование продавца (магазина);url— URL сайта продавца (магазина).
-
environment— среда выполнения Yandex Pay SDK:PRODилиSANDBOX.
Шаг 5. (опционально) Размещение кнопки Яндекс Пэй на экране
Подробнее о кнопке Яндекс Пэй читайте в разделе Кнопки оплаты Яндекс Пэй.
-
Разместите кнопку в вашей верстке:
<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, в котором укажите платежные способы для пользователя.KotlinJavafun initViews() { paymentSession.bindTo(yPayButton, SessionListenerArgs(listOf(PaymentMethodType.CARD,PaymentMethodType.SPLIT))) }void initViews() { getPaymentSession().bindTo(yPayButton); }
Шаг 6. Инициализация контракта запуска Яндекс Пэй
При инициализации контракта добавьте 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.Success) {
handleResult("Finished with success");
} else if (yPayResult instanceof YPayResult.Cancelled) {
handleResult("Finished with cancelled event");
} else if (yPayResult instanceof YPayResult.Failure) {
handleResult("Finished with domain error");
}
});
В случае неуспешной оплаты, дополнительно возвращается код ошибки errorMsg:
| Код ошибки | Описание |
|---|---|
incorrect payment url |
Неверная платежная ссылка |
transaction error |
Ошибка проведения транзакции |
failed to parse order ID |
Не удалось получить orderId при возврате результата |
invalid intent parsing |
Не удалось получить результат оплаты |
invalid result code |
Неверный код результата оплаты |
unresolved payment strategy |
Не удалось обработать результат оплаты, так как ваше приложение было закрыто в фоновом режиме |
session key not provided |
Не был предоставлен ключ сессии |
config data not provided |
Не был предоставлен объект СonfigData |
payment data not provided |
Не был предоставлен объект PaymentData |
Шаг 7. Формирование данных для запуска Яндекс Пэй
Перед запуском Яндекс Пэй сформируйте:
- платежные данные — при помощи класса
PaymentData.PaymentUrlFlowData; - параметры
YPayContractParams— на основе полученных платежных данных и данных платежной сессии.
val paymentData = PaymentData.PaymentUrlFlowData(
// Ссылка на оплату заказа, полученная из Pay API
paymentUrl = "payment-url"
)
val params = YPayContractParams(
paymentSession = paymentSession,
paymentData = paymentData,
)
final PaymentData paymentData = new PaymentData.PaymentUrlFlowData(
// Ссылка на оплату заказа, полученная из Pay API
"payment-url"
);
// параметры запуска Яндекс Пэй
final YPayContractParams params = new YPayContractParams(
getPaymentSession(),
paymentData
);
Примечание
Если вы хотите проводить оплату в Сплит, при создании ссылки передайте необходимые параметры в availablePaymentMethods.
Подробнее о генерации платежной ссылки читайте в документации бэкенда.
Шаг 8. Запуск сервиса Яндекс Пэй
Запуск через кнопку Яндекс Пэй
Передайте ранее созданный лаунчер в кнопку при помощи функции 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);
Шаг 9. Обработка результата
После запуска сервиса Яндекс Пэй, SDK выберет оптимальную стратегию и запустит платежную форму, в рамках которой будет проведена оплата. Результат будет получен с помощью контракта запуска YPayLauncher.
Примечание
При возникновении трудностей с настройкой, посмотрите пример интеграции.
Настройка для устройств с версией ниже 7.0
Владельцы устройств с версиями Android 7.0 (API 24 lvl) и выше могут пользоваться SDK Яндекс Пэй без ограничений. Для устройств с версиями ниже 7.0 возможности ограничены:
- нет официальной поддержки;
- ограничен функционал SDK;
- потребуется дополнительная настройка окружения по шагам ниже.
-
Подключите зависимость SDK в
build.gradleвашего проекта:dependencies{ ... implementation "com.yandex.pay:*pay/other*:*version*" ... } -
Синхронизируйте проект и попробуйте собрать его. У вас должна появиться ошибка слияния манифестов:
Manifest merger failed : uses-sdk:minSdkVersion *Your min version* cannot be smaller than version 24 declared in library -
Откройте AndroidManifest.xml файл того модуля, в котором вы подключаете зависимость и перечислите все библиотеки, попадающие в эту ошибку.
Пример:
<manifest xmlns:tools="http://schemas.android.com/tools"> <uses-sdk tools:overrideLibrary="com.yandex.pay, ...* other libraries *... ,com.yandex.pay.base"/> </manifest> -
Проверьте доступность поддержки SDK через объект YPay и инициализируйте все необходимые компоненты после проверки:
if (YPay.isSupported){ // init Yandex pay } else { // do some other logic }Важно
Проверяйте доступность
YPay.isSupportedпри каждом обращении к SDK Яндекс Пэй.