Выбор 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.







