Интеграция платежного шлюза Fondy в мобильное приложение
Fondy (Cloudipsp) — украинский платёжный шлюз с нативными SDK для iOS и Android. Поддерживает карточные платежи, Google Pay, Apple Pay, а также платежи через мобильный банкинг. SDK называется cloudipsp-ios / cloudipsp-android. Интеграция строится через токенизацию на клиенте и подтверждение через серверный API.
Подключение SDK
// Android, build.gradle
implementation("com.cloudipsp:cloudipsp-android:1.x.x")
// iOS, Podfile
pod 'Cloudipsp'
Основной flow: создание токена и проведение платежа
Fondy использует двухэтапную схему: клиент создаёт токен карты, передаёт его на сервер, сервер проводит платёж.
Серверная часть: получение token для SDK
POST https://pay.fondy.eu/api/checkout/token
{
"request": {
"server_callback_url": "https://your-server.com/payment/callback",
"order_id": "ORDER-1234",
"currency": "UAH",
"merchant_id": "1396424",
"order_desc": "Заказ №1234",
"amount": "15000",
"signature": "sha1_signature"
}
}
Ответ содержит token — передаётся в мобильный SDK.
Android: CardInputView и оплата
// Токен полученный от сервера
val token = "server_token"
// CardInputView — встроенный компонент SDK
val cardInputView = CardInputView(context)
// Или программная передача данных карты
val cardNumber = CardNumber("4111 1111 1111 1111")
val mm = ExpireMonth("12")
val yy = ExpireYear("2025")
val cvv = Cvv("123")
Cloudipsp.checkout(
context = context,
token = token,
card = Card(cardNumber, mm, yy, cvv),
email = "[email protected]",
listener = object : Cloudipsp.PayCallback {
override fun onPaidProcessed(order: Order) {
if (order.status == Order.Status.Approved) {
handleSuccess(order.transactionId)
}
}
override fun onPaidFailure(e: Cloudipsp.Exception) {
handleError(e.message)
}
override fun on3dsRedirect(request: Cloudipsp.Request3ds, webView: WebView) {
// 3DS — SDK передаёт WebView для обработки
webView.loadUrl(request.url)
}
}
)
iOS: CloudipspView
import Cloudipsp
let api = Cloudipsp(merchantId: 1396424, callbackUrl: "yourapp://payment/result")
// Через готовый PaymentController
let paymentController = PaymentController(token: serverToken)
paymentController.present(in: self) { [weak self] result in
switch result {
case .success(let order):
self?.handleSuccess(order.orderStatus)
case .failure(let error):
self?.handleError(error.localizedDescription)
}
}
Подпись запросов
Fondy подписывает запросы через SHA-1 всех параметров запроса в алфавитном порядке + password:
SHA1(password|param1_value|param2_value|...)
Неправильная сортировка или лишние параметры в подписи — частая причина ошибки Invalid signature.
Верификация через callback
Fondy отправляет server_callback_url POST-запрос с результатом транзакции. Верифицируем подпись входящего запроса аналогичным SHA-1, только порядок: все поля ответа в алфавитном порядке.
Что входит в работу
- Подключение Cloudipsp SDK (iOS / Android)
- Серверный endpoint для получения token Fondy
- Реализация CardInputView или кастомного UI с Card-объектом
- Обработка 3DS через WebView внутри SDK
- Серверный callback и верификация подписи
Сроки
2–3 дня. Стоимость рассчитывается индивидуально.







