Интеграция платежного шлюза Тинькофф Кассы в мобильное приложение
Тинькофф Касса (сейчас T-Касса) предоставляет нативные SDK для iOS и Android. Поддерживает оплату картой, через СБП, Tinkoff Pay и Apple/Google Pay. Особенность — SDK включает готовый платёжный экран, поэтому базовая интеграция занимает меньше дня, если бэкенд уже готов.
Подключение SDK
// Android
implementation("ru.tinkoff.acquiring:ui:x.x.x")
// iOS, SPM
.package(url: "https://github.com/TinkoffCreditSystems/AcquiringSdk_IOS")
Основной flow
T-Касса работает по двухэтапной схеме: сначала сервер инициализирует платёж и получает paymentId, затем SDK на клиенте проводит его.
Серверная инициализация:
POST https://securepay.tinkoff.ru/v2/Init
{
"TerminalKey": "your_terminal_key",
"Amount": 150000,
"OrderId": "ORDER-1234",
"Description": "Оплата заказа",
"Token": "sha256_signature"
}
Ответ содержит PaymentId и PaymentURL. PaymentId передаётся в SDK для проведения платежа в нативном UI.
Android: запуск платёжного экрана
val tinkoffAcquiring = TinkoffAcquiring(
context,
terminalKey = "your_terminal_key",
publicKey = "your_public_key"
)
val paymentOptions = PaymentOptions().setOptions {
setTerminalParams(
terminalKey = "your_terminal_key",
publicKey = "your_public_key"
)
orderOptions {
orderId = "ORDER-1234"
amount = Money.ofRubles(1500)
title = "Заказ №1234"
description = "Оплата заказа"
savingAsParentPayment = false
}
featuresOptions {
useSecureKeyboard = true
cameraCardScanner = CameraCardIOScanner() // опционально
fpsEnabled = true // СБП
tinkoffPayEnabled = true
}
}
val launcher = registerForActivityResult(TinkoffAcquiring.createPaymentContract(context)) { result ->
when (result.status) {
AsdkState.Success -> handleSuccess(result.paymentId)
AsdkState.Cancelled -> {}
AsdkState.Error -> handleError(result.error)
else -> {}
}
}
tinkoffAcquiring.openPaymentScreen(
activity = this,
paymentOptions = paymentOptions,
launcher = launcher
)
iOS: AcquiringUISDK
import TinkoffASDKUI
let credential = AcquiringSdkCredential(
terminalKey: "your_terminal_key",
publicKey: "your_public_key"
)
let acquiringSDK = try AcquiringUISDK(credential: credential)
let paymentData = PaymentInitData(
amount: 150000, // в копейках
orderId: "ORDER-1234",
customerKey: "user_123"
)
acquiringSDK.presentPaymentView(
on: self,
paymentData: paymentData,
configuration: AcquiringViewConfiguration()
) { result in
switch result {
case .success(let paymentInfo):
print("Payment ID: \(paymentInfo.paymentId)")
case .failure(let error):
print("Error: \(error)")
case .cancelled:
break
}
}
Tinkoff Pay: отдельный кейс
Tinkoff Pay открывает приложение Т-Банка для подтверждения платежа. Для работы нужно, чтобы Т-Банк был установлен на устройстве. SDK проверяет это автоматически через UIApplication.canOpenURL (iOS) или PackageManager.getLaunchIntentForPackage (Android) и скрывает кнопку если приложение не найдено.
Подпись запросов (Token)
Все серверные запросы к API T-Кассы подписываются через SHA-256: конкатенация значений параметров + Password в алфавитном порядке ключей. Неправильный token — частая причина ошибки 0 (Invalid Token) при инициализации платежа.
Что входит в работу
- Подключение ASDK iOS / Android
- Серверная инициализация платежа с корректной подписью
- Настройка опций: СБП, Tinkoff Pay, сохранение карты
- Обработка статусов и Webhook подтверждение
- Тестирование через тестовый терминал
Сроки
2–3 дня. Стоимость рассчитывается индивидуально.







