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







