Интеграция платежного шлюза ЮKassa в мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1735 услуг
Интеграция платежного шлюза ЮKassa в мобильное приложение
Средний
~2-3 дня
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    495

Интеграция платежного шлюза ЮKassa в мобильное приложение

ЮKassa (бывший Яндекс.Касса) — один из самых популярных платёжных шлюзов для российского рынка. Мобильный SDK поддерживает оплату картой, через SberPay, SBP, Apple Pay, Google Pay и кошелёк ЮMoney. Интеграция строится через токенизацию платёжных данных на клиенте с последующим списанием через серверный API.

Архитектура: токенизация вместо реквизитов

ЮKassa не передаёт карточные данные напрямую на ваш сервер. Клиентский SDK создаёт платёжный токен — зашифрованный объект, который действует однократно и только для вашего магазина. Сервер использует этот токен для создания платежа через ЮKassa API.

iOS: YooKassaPayments SDK

// Podfile
pod 'YooKassaPayments'

// или SPM
.package(url: "https://github.com/yoomoney/yookassa-payments-swift", from: "7.x.x")

Запуск платёжного экрана:

import YooKassaPayments

let inputData = TokenizationModuleInputData(
    clientApplicationKey: "live_your_client_key",  // из личного кабинета ЮKassa
    title: "Your Company",
    subtitle: "Заказ №1234",
    amount: Amount(value: 1500, currency: .rub),
    paymentTypes: [.bankCard, .sberbank, .sbp, .applePay, .yooMoney],
    savePaymentMethod: .on,   // или .off, .userSelects
    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)
        // token.paymentToken — отправляем на сервер
        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

// build.gradle
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("RUB")),
        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)
}

Серверное подтверждение платежа

Токен с клиента передаётся на сервер, сервер создаёт платёж:

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": "RUB" },
    "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 это обрабатывает автоматически, но при прямой API-интеграции нужно открывать confirmation_url в SFSafariViewController / Custom Tabs.

Типичные грабли

clientApplicationKey vs secretKey. В SDK передаётся только clientApplicationKey (начинается на live_ или test_). secretKey только на сервере. Если перепутать — API вернёт 401, но сообщение не всегда очевидное.

SavePaymentMethod и оферта. При SavePaymentMethod.ON ЮKassa требует, чтобы пользователь принял оферту на рекуррентные платежи. SDK показывает чекбокс автоматически, но если это пропустить в кастомном UI — транзакцию отклонят.

Что входит в работу

  • Подключение YooKassa SDK (iOS / Android / Flutter)
  • Настройка paymentTypes под задачи проекта
  • Серверный endpoint для создания и подтверждения платежа
  • Настройка Webhook для финального статуса
  • Тестирование в тестовом магазине ЮKassa

Сроки

2–3 дня. Стоимость рассчитывается индивидуально.