Подключение оплаты по платежной ссылке
- Шаг 1. Получите необходимые идентификаторы
- Шаг 2. Подключите Client ID
- Шаг 3. Инициализируйте FirebaseApp во всех процессах приложения
- Шаг 4. Подключите Yandex Pay SDK
- Шаг 5. Получите объект платежной сессии
- Шаг 6. Инициализируйте контракт запуска Яндекс Пэй
- Шаг 7. Сформируйте данные для запуска Яндекс Пэй
- Шаг 8. Запустите сервис Яндекс Пэй
- Шаг 9. Обработайте результат
Требования к подключению
Поддерживаемая версия: Android 7.0 и выше.
Перед началом интеграции нужно получить и добавить в проект несколько идентификаторов:
- Merchant ID
- SHA256 Fingerprints
- Client ID (
YANDEX_CLIENT_ID) - Android package name (
applicationId)
Шаг 1. Получите необходимые идентификаторы
-
Получите значение хеша SHA256 Fingerprints с помощью утилиты
keytool:keytool -list -v -alias <your-key-name> -keystore <path-to-production-keystore>После ввода команды значение хеша отобразится в блоке
Certificate fingerprints: SHA256. -
Для регистрации приложения перейдите в сервис Яндекс OAuth.
-
В поле Название вашего сервиса укажите название, которое будет видно пользователям на экране авторизации.
-
В разделе Платформы приложения выберите Android-приложение и укажите его параметры:
- Android package name — уникальное имя приложения из
applicationIdв конфигурационном файле проекта; - SHA256 Fingerprints — значение хеша SHA256, полученное в пункте 1. Все буквы в хеше должны быть заглавными.
- Android package name — уникальное имя приложения из
-
Убедитесь, что на Яндекс OAuth у вашего приложения добавлен доступ к Яндекс Пэй. Для этого в блоке Доступ к данным в поле Название доступа выберите Оплата через Yandex Pay.
-
Нажмите кнопку Создать приложение и скопируйте значение поля Client ID.
-
На странице Настройки личного кабинета Яндекс Пэй укажите значения Client ID, SHA256 и Android package name в полях Client ID, SHA256 Fingerprint и Android package name соответственно.
Шаг 2. Подключите Client ID
Укажите полученный Client ID в сборочном скрипте build.gradle в manifestPlaceholders в качестве значения YANDEX_CLIENT_ID:
android {
defaultConfig {
manifestPlaceholders = [
// Подставьте ваш Client ID
YANDEX_CLIENT_ID: "12345678901234567890",
]
}
}
Шаг 3. Инициализируйте 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)
}
}
Подробнее о взаимодействии можно прочитать в статье После обновления Firebase до версии 31+ перестала работать AppMetrica.
Шаг 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"),
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— тестовое окружение.
Шаг 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.