Подключение оплаты по платежной ссылке
Требования к подключению
Поддерживаемая версия: Android 7.0 и выше.
Шаг 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_CLIENT_ID:
android {
defaultConfig {
manifestPlaceholders = [
// Подставьте ваш Client ID
YANDEX_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)
}
}
Шаг 4. Подключение Yandex Pay SDK
Укажите зависимость в ваших сборочных скриптах build.gradle:
dependencies {
implementation 'com.yandex.pay.inapps:inapps:1.2.0'
}
Шаг 5. Получение объекта платежной сессии
При помощи функции 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.
Шаг 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
);
Примечание
Подробнее про генерацию платежной ссылки можно посмотреть в документации бэкенда.
Шаг 8. Запуск сервиса Яндекс Пэй
Запустите сервис с помощью лаунчера, передав параметры запуска YPayContractParams:
val params = YPayContractParams(...)
yandexPayLauncher.launch(params)
final YPayContractParams params = new YPayContractParams(...);
yandexPayLauncher.launch(params);
Шаг 9. Обработка результата
После запуска сервиса Яндекс Пэй, SDK запустит платежную форму, в рамках которой будет проведена оплата. Результат будет получен с помощью контракта запуска YPayLauncher.