Интеграция платежного шлюза ЮKassa в мобильное приложение
При интеграции платежей в мобильное приложение ключевая сложность — соблюдение требования безопасности. Прямая передача банковских реквизитов требует сертификации PCI DSS Level 1, которая стоит в около $9k–13k и проходит ежегодный аудит. Мы, команда с 7-летним опытом в мобильной разработке, предлагаем решение через токенизацию ЮKassa: клиентский SDK создаёт одноразовый платёжный токен, который сервер использует для завершения платежа. Никакие карточные данные не покидают устройство пользователя. Так вы принимаете платежи без собственной PCI-сертификации, сокращая затраты на инфраструктуру безопасности.
Как работает токенизация ЮKassa?
SDK ЮKassa на стороне клиента (iOS или Android) принимает данные карты, шифрует их и отправляет напрямую в платёжный шлюз ЮKassa. В ответ SDK возвращает вашему приложению токен — уникальный идентификатор, привязанный к конкретному магазину и сумме. Этот токен передаётся на ваш бэкенд, который создаёт платёж через API ЮKassa. Ваш сервер никогда не видит реальных реквизитов — только токен. Это снимает ответственность за PCI DSS с вашей команды и ускоряет интеграцию до 2–3 дней. Для тестирования используйте test_ ключ и карту с номером 5555555555554444.
Почему токенизация — единственный безопасный способ?
Прямая передача реквизитов требует сертификации PCI DSS Level 1, которая обходится в около $9k–13k и ежегодного аудита. Токенизация Ю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 дня. Стоимость рассчитывается индивидуально — оценим проект после знакомства с вашим приложением и платёжными сценариями. Наши инженеры имеют более 7 лет опыта в мобильной разработке и реализовали 30+ проектов с ЮKassa. Мы гарантируем корректную обработку 3D Secure, возврат при ошибках и соблюдение App Store Review Guidelines Section 4.2/5.1. Если нужна консультация или оценка — свяжитесь с нами, чтобы обсудить детали.
Получите консультацию наших инженеров — мы проведём аудит вашего приложения и предложим оптимальное решение. Закажите интеграцию, и мы настроим платёжный шлюз за 2 дня.







