Подключаем рассрочку Халва: полный цикл в мобильном приложении
При интеграции рассрочки Халва в мобильное приложение мы сталкиваемся с двумя принципиально разными сценариями: установлено ли приложение Халвы на устройстве пользователя. Наш подход основан на REST API Халвы и обработке deeplink-переходов. За 5 лет работы мы выполнили более 30 интеграций с платежными сервисами и гарантируем стабильную работу. Одна из таких интеграций помогла интернет-магазину увеличить конверсию на 18% за счет упрощения процесса оплаты. Средняя стоимость такой интеграции — от 30 000 до 60 000 рублей, а экономия на разработке по сравнению с аналогами составляет до 40%.
Как проверить, установлена ли Халва на устройстве?
Проверка наличия приложения Халвы — первый шаг. На iOS используем UIApplication.shared.canOpenURL(URL(string: "halva://")!). Важно: с iOS 9 нужно добавить halva в LSApplicationQueriesSchemes в Info.plist, иначе canOpenURL всегда вернет false. Это одна из самых частых ошибок, которую мы исправляем при аудите. Согласно Apple Developer Documentation на canOpenURL, необходимо указывать схемы заранее. На Android проверка выполняется через PackageManager.getPackageInfo().
Два сценария флоу
Приложение Халвы установлено. Пользователь нажимает «Оплатить в рассрочку Халва» → ваше приложение открывает deeplink halva://partner/pay?orderId=...&amount=...&token=... → пользователь видит экран подтверждения в приложении Халвы → подтверждает → Халва возвращает пользователя через deeplink-callback в ваше приложение → сервер получает webhook о статусе заявки.
Приложение не установлено. Fallback на WebView-форму: открываем SFSafariViewController / Custom Tabs с URL web-формы Халвы. Флоу тот же, только через браузер.
| Параметр | Deeplink-сценарий | WebView fallback |
|---|---|---|
| Скорость | ~3 секунды до подтверждения | ~10 секунд (загрузка формы) |
| UX | Нативный экран Халвы | Браузерный интерфейс |
| Техническая сложность | Требует обработки callback при cold start | Проще, но медленнее |
Deeplink-сценарий в 3 раза быстрее WebView-формы по времени подтверждения, поэтому его реализация критична для конверсии.
Расчёт рассрочки
Перед оформлением пользователь хочет видеть график платежей: «12 месяцев — X рублей/мес». Халва предоставляет API /v1/installment/calculate с параметрами amount и partnerId. Ответ: список доступных периодов рассрочки с суммами платежей. Отображаем в виде picker/chip-компонента — пользователь выбирает срок, приложение обновляет сумму ежемесячного платежа в реальном времени.
Кэшируем ответ расчёта на 10–15 минут — условия рассрочки не меняются поминутно, а лишние сетевые запросы замедляют UX.
Почему обработка webhook критична для UX?
Мобильный клиент не должен напрямую обращаться к API Халвы с секретными ключами. Весь flow через ваш сервер: создание заявки → получение токена/URL → передача клиенту. Webhook от Халвы (application.approved / application.rejected) обрабатывает сервер, меняет статус заказа, отправляет push-уведомление пользователю.
Push при одобрении заявки — важная деталь UX. Пользователь ушёл в приложение Халвы, вернулся, но не дождался ответа. Push через Firebase Cloud Messaging (FCM) / APNs возвращает его к завершению заказа.
Типичные ошибки при интеграции
- Deeplink callback не обработан при cold start приложения (пользователь свайпнул приложение из памяти, Халва открывает deeplink — приложение запускается с нуля, callback теряется). Решение: сохраняем orderId в UserDefaults/SharedPreferences, при старте проверяем pending-заявки.
- Не обрабатываем
application.expired— заявка одобрена, но пользователь не подтвердил в течение 30 минут. Нужен таймер и соответствующий UI.
Как настроить deeplink-интеграцию: пошагово
- Зарегистрируйте deeplink-схему
halva://в манифесте Android (intent-filter) и в Info.plist iOS (CFBundleURLSchemes). - На сервере создайте endpoint для получения webhook-статусов от Халвы.
- На клиенте реализуйте обработку deeplink:
getInitialLink/getInitialURLдля cold start, stream/subscription для foreground. - Сохраняйте orderId при открытии deeplink, чтобы восстановить контекст при cold start.
- Протестируйте на реальных устройствах с установленным и неустановленным приложением Халвы.
Больше деталей в официальной документации Халвы. Свяжитесь с нами для получения инструкции.
Flutter и React Native
| Платформа | Пакет | Cold start | Foreground |
|---|---|---|---|
| Flutter | uni_links |
getInitialLink() |
linkStream |
| React Native | Linking | getInitialURL() |
addEventListener('url') |
На Flutter: deeplink обрабатывается через uni_links пакет. getInitialLink() при cold start, linkStream для foreground. При старте приложения — проверяем getInitialLink() на наличие Халва-callback, если есть — восстанавливаем контекст заказа из SharedPreferences и показываем правильный экран статуса.
На React Native: Linking.getInitialURL() + Linking.addEventListener('url', handler). Логика та же — pending orderId хранится в AsyncStorage.
Что входит в работу
- Интеграция API расчета рассрочки с кэшированием
- Реализация deeplink-флоу с cold start обработкой
- WebView fallback для устройств без приложения Халвы
- Серверная часть: webhook endpoint, push-уведомления
- Документация по интеграции и тестирование на 3+ устройствах
- Поддержка при релизе в App Store и Google Play
Ориентиры по срокам
Полная интеграция с расчетом рассрочки, deeplink-флоу и WebView-fallback: 2–3 дня. Для Flutter/React Native с правильной обработкой cold start — плюс полдня на отладку Linking. Оценим ваш проект бесплатно — свяжитесь для консультации. Получите готовую интеграцию под ключ с гарантией стабильной работы. Закажите прямо сейчас — мы перезвоним в течение часа.







