Вибір SDK для PayPal: Checkout чи Braintree?
Уявіть: ви додали платіжний SDK, протестували в sandbox, випустили реліз — а перші користувачі не можуть оплатити, тому що повернення в додаток ламається на деяких пристроях. Така ситуація — наслідок неправильного вибору SDK або налаштування returnUrl. Після 15 впроваджень ми виявили схему: 60% проєктів обирають PayPal Checkout через простоту, але потім стикаються з обмеженнями, коли потрібна підтримка карток. Або навпаки, команди обирають Braintree, але витрачають на інтеграцію в 2 рази більше часу. Розберемо критерії, конфігурацію та типові пастки.
Як вибрати між PayPal Checkout SDK та Braintree?
PayPal Checkout SDK — простий спосіб додати оплату через PayPal Wallet. Користувач авторизується в WebView, і після підтвердження додаток отримує orderId. Однак якщо потрібна підтримка карток VISA/Mastercard без переходу в PayPal, знадобиться Braintree. Він надає готовий UI для введення картки та повертає nonce — одноразовий токен для списання. Вибір залежить від географії та вимог до UX.
Чому серверний capture обов'язковий?
Найчастіша помилка — вважати платіж завершеним після onApprove на клієнті. Насправді гроші списуються лише після виклику capture на сервері. Це вимога безпеки PayPal: клієнт ініціює ордер, сервер фіксує списання. Ігнорування цього кроку призводить до втрати коштів або задвоєння замовлень.
Nonce як основа безпеки Braintree
nonce — одноразовий токен, який Braintree повертає після успішного введення картки або авторизації PayPal. Його не можна використати повторно, що виключає фрод. Для отримання nonce потрібно згенерувати client_token на сервері через Braintree API. Це додатковий крок, але він підвищує безпеку.
Проблеми, які ми вирішуємо
- Неправильний
returnUrl— платіж не повертається в додаток. Перевірте схему вInfo.plist(iOS) абоAndroidManifest.xml. Використовуйте Universal Links / App Links для надійності. - Sandbox-тести з неповними акаунтами — платежі падають з помилкою. Оновіть профіль тестового акаунта в PayPal Developer Dashboard, додайте підтверджену email.
- Пропуск webhook-сповіщень — упущені зміни статусу платежу. Налаштуйте обробку подій
CHECKOUT.ORDER.APPROVEDтаPAYMENT.CAPTURE.COMPLETED.
Як ми це робимо: стек і конфіги
Для iOS використовуємо Swift 5.9+ з async/await, для Android — Kotlin з Coroutines. Серверна частина на Node.js або Python (Flask). Приклад створення ордера (сервер):
POST https://api-m.paypal.com/v2/checkout/orders Authorization: Bearer access_token { "intent": "CAPTURE", "purchase_units": [{ "amount": { "currency_code": "USD", "value": "15.00" }, "description": "Order #1234" }] } Відповідь включає id — його передаємо в мобільний SDK. Android (PayPal Checkout SDK):
// build.gradle implementation("com.paypal.checkout:android-sdk:1.x.x") // Application.onCreate() PayPalCheckout.setConfig( CheckoutConfig( application = this, clientId = "your_client_id", environment = Environment.LIVE, returnUrl = "yourapp://x-callback-url/paypal-sdk/paypal-checkout", currencyCode = CurrencyCode.USD, userAction = UserAction.PAY_NOW ) ) // Запуск оплати PayPalCheckout.start( createOrder = CreateOrder { createOrderActions -> createOrderActions.set(orderId) }, onApprove = OnApprove { approval -> capturePaymentOnServer(approval.data.orderId) }, onCancel = OnCancel { }, onError = OnError { errorInfo -> Log.e("PayPal", errorInfo.reason) } ) iOS (PayPalCheckout SDK):
// SPM: PayPalCheckout import PayPalCheckout PayPalCheckout.set(config: CheckoutConfig( clientID: "your_client_id", createOrder: nil, onApprove: nil, onCancel: nil, onError: nil, environment: .live )) Checkout.start( createOrder: { action in action.set(orderId: "order_id_from_server") }, onApprove: { approval in self.capturePayment(orderId: approval.data.ecToken) }, onCancel: { }, onError: { error in print("PayPal error: \(error.reason)") } ) Порівняння SDK: PayPal Checkout vs Braintree
| Критерій | PayPal Checkout SDK | Braintree |
|---|---|---|
| Підтримка карток | Тільки через PayPal Wallet | Нативний card input |
| Редирект | WebView (браузер) | Немає редиректу |
| Повернення токена | orderId | nonce (одноразовий) |
| Підтримка Venmo | Ні | Так |
| Складність інтеграції | Середня | Вища (потрібен client token) |
Braintree підходить для мультивалютних проєктів з картковими платежами, але його інтеграція складніша. За нашими оцінками, налаштування Braintree займає в 2 рази більше часу, ніж PayPal Checkout SDK, зате дозволяє приймати картки без редиректу, що збільшує конверсію на 10–20%.
Типові помилки та рішення
| Помилка | Причина | Рішення |
|---|---|---|
| Платіж не завершено | Пропущено виклик capture | Додати серверний endpoint для захоплення ордера |
| Deeplink не працює | Невірний returnUrl | Перевірити схему в Info.plist / AndroidManifest |
| Тестові платежі падають | Акаунти sandbox не оновлено | Оновити профіль в Developer Dashboard |
Що входить в роботу
- Архітектурна документація з обґрунтуванням вибору SDK
- Налаштування sandbox-середовища та серверних endpoints
- Інтеграція SDK на iOS (Swift) та Android (Kotlin)
- Тестування всіх сценаріїв: успіх, скасування, помилка, відновлення після збою
- Інструкція з деплою та моніторингу платежів
- Навчання команди (2 години онлайн)
Процес роботи
- Аналітика — вивчаємо вимоги до платіжного шлюзу, готуємо архітектуру.
- Проєктування — обираємо SDK, проєктуємо серверні endpoints.
- Реалізація — налаштовуємо SDK, пишемо код створення та захоплення ордера.
- Тестування — sandbox-тести, перевірка deeplink, обробка помилок.
- Деплой — публікація в App Store / Google Play, моніторинг.
Строки орієнтовно
Інтеграція базового PayPal Checkout SDK займає від 2 до 3 днів для однієї платформи (iOS або Android). Якщо потрібен Braintree з картками — до 5 днів. Вартість розраховується індивідуально залежно від складності та кількості платформ. Отримайте консультацію з інтеграції — оцінимо проєкт за 1 день. Замовте консультацію для детального обговорення.
Наші інженери мають сертифікації та багаторічний досвід у мобільній розробці, що гарантує якість. Документація: PayPal Checkout SDK.







