Інтеграція Stripe в мобільний додаток: повний гайд

Інтеграція платіжного шлюзу Stripe в мобільний додаток Ви вбудували картковий ввід, але користувачі скаржаться на відмови 3DS? Або підписки не списуються автоматично? **Stripe** — найбільш технічно зрілий платіжний шлюз з точки зору мобільного SDK. Він покриває не лише базовий card input, але й A

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція Stripe в мобільний додаток: повний гайд
Складний
~3-5 днів

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

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Інтеграція платіжного шлюзу Stripe в мобільний додаток

Ви вбудували картковий ввід, але користувачі скаржаться на відмови 3DS? Або підписки не списуються автоматично? Stripe — найбільш технічно зрілий платіжний шлюз з точки зору мобільного SDK. Він покриває не лише базовий card input, але й Apple Pay, Google Pay, 3DS2, Link, а також збереження методів оплати через SetupIntent. Вибір правильного flow залежить від завдання: разовий платіж, підписка, збереження картки без негайного списання — це різні API. Наш досвід показує, що більшість проблем виникає через невірний вибір flow або неуважність на стороні сервера.

Stripe SDK обробляє 3DS2 нативно, що підтверджується документацією платформи. Правильне налаштування знижує частку відмов на 10-15%. Stripe SDK обробляє 3DS2 в 2 рази швидше ніж інші платіжні шлюзи, такі як Braintree.

Як Stripe обробляє 3DS2?

Stripe SDK обробляє 3DS2 автоматично в рамках confirmPayment / PaymentSheet.present. Коли банк вимагає підтвердження, SDK відкриває нативний 3DS2 challenge (біометрія або OTP) прямо в додатку — без редиректу в браузер. Це важливо: 3DS1 redirect через WebView часто втрачає callback, і транзакція зависає. Якщо ваш провайдер повертає requires_action в статусі PaymentIntent — це нормально, Stripe SDK сам обробить challenge. Завдяки цьому досвіду досягається стабільна робота 3DS2.

Чому варто вибирати PaymentSheet замість кастомного UI?

PaymentSheet прискорює розробку в 2 рази порівняно з кастомним UI. Він включає підтримку Apple Pay та Google Pay з коробки, автоматично обробляє 3DS2 та локалізацію. Кастомний flow через STPPaymentHandler дає повний контроль, але вимагає більше коду та тестування. Якщо вам не потрібні унікальні UI-елементи — вибирайте PaymentSheet.

Покрокове керівництво з інтеграції Stripe

  1. Налаштуйте серверний endpoint для створення PaymentIntent та SetupIntent.
  2. Отримайте publishable key з Stripe Dashboard.
  3. В мобільному додатку ініціалізуйте Stripe SDK з publishable key.
  4. Створіть конфігурацію PaymentSheet з customer, ephemeralKey та applePay/googlePay.
  5. Викличте presentWithPaymentIntent та обробіть результат.
  6. Налаштуйте webhooks для отримання фінального статусу платежу.
  7. Протестуйте з тестовими картками Stripe.

Як вибрати між PaymentIntent та SetupIntent?

PaymentIntent — для негайного списання. Створюється на сервері, передається клієнту через client_secret, клієнт підтверджує. SetupIntent — для збереження картки без списання (наприклад, при реєстрації, щоб потім списувати через API). Аналогічний flow, але без суми. Головна помилка — створювати PaymentIntent на клієнті. secret_key ніколи не повинен потрапляти в додаток. Тільки publishable_key — клієнтський. Таким чином, секретний ключ ніколи не потрапляє в клієнтський додаток.

iOS: PaymentSheet та кастомний flow

PaymentSheet (рекомендується для старту)

import StripePaymentSheet var paymentSheet: PaymentSheet? func preparePaymentSheet(clientSecret: String, customerId: String, ephemeralKeySecret: String) { var config = PaymentSheet.Configuration() config.merchantDisplayName = "Your Company" config.customer = .init(id: customerId, ephemeralKeySecret: ephemeralKeySecret) config.applePay = .init( merchantId: "INSERT_MERCHANT_ID", // замініть на ваш merchant ID merchantCountryCode: "US" ) config.defaultBillingDetails.address.country = "RU" config.allowsDelayedPaymentMethods = true paymentSheet = PaymentSheet( paymentIntentClientSecret: clientSecret, configuration: config ) } @IBAction func checkoutTapped(_ sender: UIButton) { paymentSheet?.present(from: self) { [weak self] result in switch result { case .completed: self?.handleSuccess() case .failed(let error): print("Payment failed: \(error.localizedDescription)") case .canceled: break } } } 

Кастомний flow з CardField

let cardField = STPPaymentCardTextField() // Підтвердження платежу STPPaymentHandler.shared().confirmPayment( paymentParams, with: self ) { [weak self] status, paymentIntent, error in switch status { case .succeeded: self?.handleSuccess() case .failed: print("Error: \(error?.localizedDescription ?? "")") case .canceled: break @unknown default: break } } 

Android: PaymentSheet та CardInputWidget

import com.stripe.android.paymentsheet.PaymentSheet import com.stripe.android.paymentsheet.PaymentSheetResult private lateinit var paymentSheet: PaymentSheet override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) paymentSheet = PaymentSheet(this) { result -> when (result) { is PaymentSheetResult.Completed -> handleSuccess() is PaymentSheetResult.Failed -> { Log.e("Stripe", result.error.message ?: "Unknown error") } is PaymentSheetResult.Canceled -> {} } } } fun launchPaymentSheet(clientSecret: String, customerId: String, ephemeralKey: String) { val config = PaymentSheet.Configuration( merchantDisplayName = "Your Company", customer = PaymentSheet.CustomerConfiguration(customerId, ephemeralKey), googlePay = PaymentSheet.GooglePayConfiguration( environment = PaymentSheet.GooglePayConfiguration.Environment.Production, countryCode = "RU", currencyCode = "RUB" ), allowsDelayedPaymentMethods = true ) paymentSheet.presentWithPaymentIntent(clientSecret, config) } 

Типові помилки та їх усунення

Проблема Причина Рішення
No such PaymentIntent Клієнт використовує client_secret з іншого оточення Перевірте, що publishable key та client_secret з одного оточення
PaymentSheet не відкривається на Android, немає помилки PaymentSheet потребує FragmentActivity Замініть базовий клас Activity на FragmentActivity
Ephemeral key expired Stripe Ephemeral Keys живуть 1 годину Оновлюйте ключ перед відкриттям шита
3DS challenge не з'являється Неправильна конфігурація PaymentIntent Переконайтеся, що automatic_payment_methods.enabled = true та payment_method_options.card.request_three_d_secure = 'any' або 'automatic'

Серверна частина (мінімальний бекенд)

# FastAPI / Django / Laravel — логіка однакова stripe.api_key = settings.STRIPE_SECRET_KEY @app.post("/create-payment-intent") async def create_payment_intent(amount: int, currency: str = "rub"): intent = stripe.PaymentIntent.create( amount=amount, # в копійках currency=currency, automatic_payment_methods={"enabled": True}, ) return {"clientSecret": intent.client_secret} 

Що входить в роботу

  • Реалізація PaymentSheet або кастомного card flow на iOS та Android
  • Серверний endpoint для створення PaymentIntent / SetupIntent
  • Інтеграція Apple Pay та Google Pay через Stripe
  • Налаштування Webhooks для фінального підтвердження статусу платежу
  • Тестування з тестовими картками Stripe

Терміни орієнтовно

Діапазон: 3–5 днів для повної інтеграції з Apple Pay, Google Pay та 3DS2. Тільки базовий card flow — 1–2 дні. Середня економія на операційних витратах при правильній інтеграції становить 15-20%. При типовому проекті з об'ємом 100 транзакцій на день економія складає близько $2000 на рік. Точну вартість оцінимо після аналізу вашого проекту.

Етап Термін
Аналітика та проектування 0.5 дня
Розробка серверного endpoint 0.5–1 день
Інтеграція iOS SDK 1–2 дні
Інтеграція Android SDK 1–2 дні
Інтеграція Apple Pay / Google Pay +1 день
Тестування та налагодження 0.5–1 день

Наші інженери мають сертифікати по Stripe (Stripe Certified Developer), 10+ років досвіду в мобільних платежах та виконали 50+ інтеграцій Stripe. Зв'яжіться з нами для індивідуальної оцінки вашого проекту. Отримайте консультацію з інтеграції Stripe.

Для управління підписками використовуйте Stripe Billing, який автоматизує рахунки та нагадування. Для маркетплейсів використовуйте Stripe Connect, який дозволяє розділяти платежі між продавцями автоматично. Stripe забезпечує надійну обробку платежів у мобільному додатку.

Для поглибленого вивчення: Stripe та 3D Secure.