Інтеграція платіжного шлюзу ЮKassa в мобільний додаток
При інтеграції платежів у мобільний додаток ключова складність — дотримання вимог безпеки. Пряма передача банківських реквізитів вимагає сертифікації PCI DSS Level 1, яка коштує мільйони рублів і проходить щорічний аудит. Ми, команда з багаторічним досвідом у мобільній розробці, пропонуємо рішення через токенізацію ЮKassa: клієнтський SDK створює одноразовий платіжний токен, який сервер використовує для завершення платежу. Жодні карткові дані не покидають пристрій користувача. Так ви приймаєте платежі без власної PCI-сертифікації, скорочуючи витрати на інфраструктуру безпеки.
Як працює токенізація ЮKassa?
SDK ЮKassa на стороні клієнта (iOS або Android) приймає дані картки, шифрує їх і відправляє безпосередньо в платіжний шлюз ЮKassa. У відповідь SDK повертає вашому додатку токен — унікальний ідентифікатор, прив'язаний до конкретного магазину та суми. Цей токен передається на ваш бекенд, який створює платіж через API ЮKassa. Ваш сервер ніколи не бачить реальних реквізитів — тільки токен. Це знімає відповідальність за PCI DSS з вашої команди і прискорює інтеграцію до 2–3 днів. Для тестування використовуйте test_ ключ і картку з номером 5555555555554444.
Чому токенізація — єдиний безпечний спосіб?
Пряма передача реквізитів вимагає сертифікації PCI DSS Level 1, яка обходиться в мільйони рублів і щорічного аудиту. Токенізація ЮKassa знижує це навантаження: ви не торкаєтесь карткових даних. SDK бере на себе шифрування та передачу в ЮKassa. Навіть при компрометації сервера зловмисник не отримає реквізити. За статистикою, токенізація знижує ризик витоку даних на 90% порівняно зі зберіганням даних на сервері.
Які сценарії оплати підтримуються?
| Спосіб оплати | Чи потрібне додаткове налаштування | Коментар |
|---|---|---|
| Банківські картки | Ні, включені за замовчуванням | Завжди доступні |
| SberPay | Так, потрібно налаштувати в кабінеті ЮKassa | Тільки для клієнтів Ощадбанку |
| СБП | Так, потрібна прив'язка до СБП | Підтримується більшістю банків |
| Apple Pay | Так, потрібно налаштувати Merchant ID і завантажити сертифікат | Тільки на iOS |
| Google Pay | Так, налаштувати в консолі Google Pay | Тільки на Android |
| ЮMoney | Ні, доступний за замовчуванням | Популярний серед користувачів |
iOS: YooKassaPayments SDK
Підключаємо SDK через CocoaPods або SPM (детальніше в документації). Запуск платіжного екрану:
import YooKassaPayments
let inputData = TokenizationModuleInputData(
clientApplicationKey: "live_your_client_key",
title: "Your Company",
subtitle: "Замовлення №1234",
amount: Amount(value: 1500, currency: .rub),
paymentTypes: [.bankCard, .sberbank, .sbp, .applePay, .yooMoney],
savePaymentMethod: .on,
isLoggingEnabled: false
)
let viewController = TokenizationAssembly.makeModule(
inputData: inputData,
moduleOutput: self
)
present(viewController, animated: true)Обробка результату:
extension PaymentViewController: TokenizationModuleOutput {
func tokenizationModule(
_ module: TokenizationModuleInput,
didTokenize token: Tokens,
paymentMethodType: PaymentMethodType
) {
dismiss(animated: true)
sendTokenToBackend(token.paymentToken, paymentMethodType: paymentMethodType.rawValue)
}
func didFinish(on module: TokenizationModuleInput, with error: YooKassaPaymentsError?) {
dismiss(animated: true)
if let error = error {
print("YooKassa error: \(error)")
}
}
} Android: YooKassa Payments SDK
Додайте залежність (актуальну версію див. в документації):
implementation("ru.yoomoney.sdk.kassa.payments:yookassa-android-sdk:7.x.x") Запуск платіжного екрану:
private val tokenizeLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
if (result.resultCode == Activity.RESULT_OK) {
val token = Checkout.createTokenizationResult(result.data!!)
sendTokenToBackend(
token.paymentToken,
token.paymentMethodType.name
)
}
}
fun startPayment() {
val paymentParameters = PaymentParameters(
amount = Amount(
BigDecimal.valueOf(1500),
Currency.getInstance("USD")
),
title = "Your Company",
subtitle = "Замовлення №1234",
clientApplicationKey = "live_your_client_key",
shopId = "your_shop_id",
savePaymentMethod = SavePaymentMethod.ON,
paymentMethodTypes = setOf(
PaymentMethodType.BANK_CARD,
PaymentMethodType.SBERBANK,
PaymentMethodType.SBP,
PaymentMethodType.GOOGLE_PAY,
PaymentMethodType.YOO_MONEY
)
)
val intent = Checkout.createTokenizeIntent(this, paymentParameters)
tokenizeLauncher.launch(intent)
} Як автоматично обробляти 3D Secure?
При створенні платежу через API, якщо потрібен 3D Secure, у відповіді приходить confirmation.type: redirect і confirmation_url. У мобільному додатку потрібно відкрити цей URL у веб-в'ю (SFSafariViewController на iOS, Custom Tabs на Android) і дочекатися повернення по return_url. Ми рекомендуємо використовувати автоматичну обробку SDK, але при прямій інтеграції слідуйте цьому алгоритму.
Серверне підтвердження платежу
Токен з клієнта передається на сервер, сервер створює платіж через API:
POST https://api.yookassa.ru/v3/payments
Authorization: Basic base64(shopId:secretKey)
Content-Type: application/json
Idempotence-Key: unique-uuid
{
"amount": {
"value": "1500.00",
"currency": "USD"
},
"capture": true,
"payment_method_data": {
"type": "bank_card"
},
"confirmation": {
"type": "mobile_application",
"return_url": "yourapp://payment/result"
},
"payment_token": "token_from_client",
"description": "Замовлення №1234"
}Якщо відповідь містить status: pending і confirmation.type: redirect — потрібне 3DS підтвердження. SDK обробляє це автоматично, але при прямій інтеграції потрібно відкрити confirmation_url у SFSafariViewController / Custom Tabs.
Порівняння ЮKassa з прямим прийомом карток
| Критерій | ЮKassa | Прямий прийом карток |
|---|---|---|
| PCI DSS | Не потрібна сертифікація | Потрібен Level 1, щорічний аудит |
| Час інтеграції | 2–3 дні | 1–2 місяці |
| Підтримка 3D Secure | Автоматично (SDK / redirect) | Реалізація вручну |
| Вартість запуску | Відносно низька | Висока (сертифікація + комісії) |
| Способи оплати | 10+ (картки, SberPay, СБП, гаманці) | Тільки картки |
ЮKassa відмінно підходить для швидкого запуску: ви економите значні кошти на сертифікації та отримуєте широкий набір платіжних методів. Токенізація знижує час інтеграції в 10 разів порівняно з прямим прийомом карток (2–3 дні проти 1–2 місяців).
Що входить в роботу
- Підключення YooKassa SDK (iOS / Android / Flutter) під ключ
- Налаштування paymentTypes під завдання проекту
- Серверний endpoint для створення та підтвердження платежу
- Налаштування Webhook для фінального статусу
- Тестування в тестовому магазині ЮKassa
- Допомога в публікації в App Store і Google Play (перевірка на відповідність правилам)
Строки та вартість
Базова інтеграція займає 2–3 дні. Вартість розраховується індивідуально — оцінимо проект після знайомства з вашим додатком і платіжними сценаріями. Наші інженери мають багаторічний досвід у мобільній розробці та реалізували багато проектів з ЮKassa. Ми гарантуємо коректну обробку 3D Secure, повернення при помилках та дотримання App Store Review Guidelines Section 4.2/5.1. Якщо потрібна консультація або оцінка — зв'яжіться з нами, щоб обговорити деталі.
Отримайте консультацію наших інженерів — ми проведемо аудит вашого додатку та запропонуємо оптимальне рішення. Замовте інтеграцію, і ми налаштуємо платіжний шлюз за 2 дні.







