¡Hola! A principios del verano, actualizamos el SDK de adquisición de Tinkoff y lanzamos la segunda versión para Android e iOS. Tinkoff Acquiring SDK es una biblioteca de código abierto para plataformas móviles. Es conveniente aceptar pagos en aplicaciones con él. En este artículo, quiero contarte lo que es bueno para los dueños de negocios en Internet y sus clientes.
Que se ha mejorado
Problemas que estaban en la versión anterior:
- Arquitectura de biblioteca compleja. Debido a esto, los desarrolladores dedicaron mucho tiempo a buscar y corregir errores.
- API de biblioteca redundante. Los desarrolladores a menudo cometen errores al integrar el SDK.
- No se siguen los requisitos de Apple Pay y Google Pay para configurar estos métodos de pago.
Qué hicimos para solucionar este problema y qué más hay de nuevo:
- Hemos reescrito completamente el código para ambos sistemas operativos. Refactorizar el código y agregar muchas características útiles. Las bibliotecas ahora funcionan en Kotlin y Swift.
- Se agregó el Sistema de Pago Rápido. Puede pagar a través de SBP utilizando un código QR o mediante "Cuenta instantánea", haciendo clic en el botón en la pantalla de pago.
- Apoyamos la solución todo en uno. Todo en un solo lugar: tarjetas de enlace, pago sin contacto, pagos rápidos mediante un código QR.
- Actualizado el diseño. Se agregó un tema oscuro. Pero no nos olvidamos de la personalización del tema en Android, que estaba en la versión anterior.
- Seguimos apoyando la versión anterior. Pensamos en todos los clientes, no engañamos viejos y nuevos: el SDK funciona igual en la primera y segunda versión. Sin embargo, le recomendamos que actualice para aprovechar las nuevas funciones.
Y ahora todo en orden.
¿Para qué sirve el SDK de adquisición de Tinkoff?
El SDK integra la adquisición de Internet en cualquier aplicación móvil y es adecuado para una empresa que acepta pagos en línea en aplicaciones: tiendas en línea, mercados, compañías de viajes, limpieza, sitios de transmisión, intercambios independientes.
La solución ayuda a los compradores a vincular una tarjeta en la aplicación y pagar las compras con un par de clics, y a los vendedores a hacer que la aplicación sea más funcional y no perder clientes en la etapa de pago.
Esto es lo que puede hacer el SDK:
escanee y reconozca tarjetas bancarias con la cámara y NFC y guárdelas. El comprador vincula la tarjeta una vez en la aplicación y luego ingresa solo el código CVC para pagar las compras.
Acepta todo tipo de pagos en la aplicación: mediante tarjetas bancarias, a través de tu cuenta personal tinkoff.ru, Apple Pay y Google Pay.Incluyendo pagos recurrentes, es decir, automáticos, por suscripción, sin volver a ingresar los detalles.

Pague utilizando el Sistema de pago rápido (FPS). El SDK ayuda a aceptar pagos a través de UBS: el comprador paga la mercancía utilizando el código QR, que contiene toda la información sobre el pedido. Implementemos dos escenarios: pago en la aplicación cliente y facturación.
Soporte de caja online y fiscalización. Todo está de acuerdo con FZ-54.
Personalice la ventana de pago para el diseño de la aplicación. Disponible en aplicaciones de Android.
Mejoras arquitectónicas
Problema. La arquitectura del código SDK está diseñada de tal manera que es difícil y requiere mucho tiempo mantener e implementar nuevas funciones en él.
Decisión. Los desarrolladores del SDK llevaron a cabo una refactorización completa del antiguo código de la biblioteca:
- el código está escrito en los lenguajes modernos Kotlin y Swift. Esto aceleró el proceso de desarrollo y ayudó a construir una arquitectura conveniente que es fácil de mantener y expandir: introducimos nuevas funciones más rápido y los clientes reciben actualizaciones más rápido. En la primera versión, el código está escrito en Java y Objective-C;
- en Android, la configuración de la pantalla se crea con Kotlin DSL. Y todo el trabajo multiproceso se basa en corrutinas: ayudan a procesar solicitudes a la red, mientras que el tamaño de la biblioteca aumenta en menos de 1 MB;
- Se ha reducido la cantidad de código en el proyecto.Usamos enum genérico, manejo de errores con lanzamientos y extensiones de algunas clases base. Se hizo más fácil mantener el proyecto;
- Bibliotecas API actualizadas. Los métodos para llamar a las pantallas y las funciones básicas de pago se trasladaron a una clase separada. Este es un único punto de entrada para la biblioteca: es mucho más fácil llamar a métodos API desde un solo lugar que dispersos por el código.
La estructura de los métodos se diseñó para que trabajar con la API fuera conveniente y comprensible. Los métodos están bien documentados y corresponden a los estándares habituales para Java, Kotlin, código Swift.
Por ejemplo, así es como se generan y ejecutan las configuraciones de la pantalla de pago en el SDK de Android:
val tinkoffAcquiring = TinkoffAcquiring("terminalKey", "password", "publicKey")
val paymentOptions = PaymentOptions()
.setOptions {
orderOptions {
orderId = "777"
amount = Money.ofCoins(1000)
title = "Order Title"
description = "Order Description"
}
customerOptions {
customerKey = "user-key"
checkType = CheckType.HOLD.toString()
email = "useremail@gmail.com"
}
featuresOptions {
localizationSource = AsdkSource(Language.RU)
useSecureKeyboard = true
}
}
tinkoffAcquiring.openPaymentScreen(this, paymentOptions, PAYMENT_REQUEST_CODE)
Ejemplo de IOS SDK:
let credentional = AcquiringSdkCredential(terminalKey: "terminalKey", password: "terminalPassword", publicKey: "testPublicKey")
let acquiringSDKConfiguration = AcquiringSdkConfiguration(credential: credentional)
if let sdk = try? AcquiringUISDK.init(configuration: acquiringSDKConfiguration) {
sdk.presentPaymentView(on: self, paymentData: createPaymentData(), configuration: acquiringViewConfiguration()) { [weak self] (response) in
self?.responseReviewing(response)
}
}
El SDK no limita las aplicaciones de los clientes: por ejemplo, puede aceptar pagos no solo a través de las pantallas de la biblioteca. A veces, los propietarios de empresas y sus desarrolladores necesitan más funciones en una aplicación.
Por ejemplo, en nuestra pantalla de pago, se realizan dos solicitudes al servidor y el vendedor necesita procesamiento adicional de pedidos en la aplicación. Por lo tanto, una de las solicitudes debe ejecutarse antes de que se abra la pantalla del SDK y la segunda debe estar ya en la pantalla. Podemos hacerlo.
Hay un módulo Core separado para esto en el SDK. Es independiente de la plataforma y se puede utilizar para invocar métodos de API de adquisición de Tinkoff. Y el módulo con la parte de la interfaz de usuario ofrece otras soluciones sin la pantalla SDK: métodos adicionales que inician la pantalla de pago desde una determinada etapa.
Google Pay y Apple Pay
Problema. Google y Apple requieren que sus métodos de pago no aparezcan junto a las tarjetas en la pantalla de pago del SDK, sino como botones separados en la aplicación que debe hacer usted mismo. Los desarrolladores de clientes tienen que trabajar más para configurar Google Pay y Apple Pay.
Decisión. El SDK actualizado ha mejorado la compatibilidad para aceptar pagos a través de Google Pay y Apple Pay.
Tenemos en cuenta el requisito de Google y Apple, pero al mismo tiempo simplificamos la tarea para los desarrolladores. La mayoría de las configuraciones de pago son manejadas por el SDK y los desarrolladores del cliente solo necesitan llamar a algunos métodos.
Estos métodos hacen:
- configurar los servicios de pago Google Pay y Apple Pay;
- procesar la disponibilidad de servicios en el dispositivo;
- llamada de servicio para pago;
- Procesando el resultado del pago.
Todo lo que el desarrollador debe hacer es crear un botón de acuerdo con las pautas del servicio, establecer la configuración de pago y transferir el token al SDK para completar el pago a través de la adquisición por Internet de Tinkoff.
Sistema de pago rápido
Esta es una característica nueva en el mercado fintech y una nueva tecnología, por lo que los desarrolladores tuvieron que implementarla en el SDK desde cero. SBP ayuda a aceptar pagos mediante código QR y depositar dinero instantáneamente en la cuenta del comerciante; llegan de inmediato, incluso los fines de semana y feriados.
Cómo funciona:
- Al pagar el pedido, el comprador hace clic en "Pagar vía SBP".
- El comprador ingresa a la aplicación bancaria y confirma el retiro de dinero allí. El importe se indicará en el formulario de pago.
- Después del pago, el dinero va inmediatamente a la cuenta del vendedor.

Los clientes pueden conectar un nuevo método de pago en su cuenta personal de Tinkoff Payments. Después de eso, en el SDK móvil, los clientes podrán aceptar pagos a través del SBP, mediante un botón y un código QR.
"Cuenta instantánea". Aparece un botón con el logotipo de SBP en la pantalla de pago.
La configuración de pantalla fpsEnabled incluye un botón para un pago rápido en el SDK de Android:
var paymentOptions = PaymentOptions().setOptions {
orderOptions { /*options*/ }
customerOptions { /*options*/ }
featuresOptions {
fpsEnabled = true
}
}
En el SDK de iOS, debe pasar buttonPaySPB:
let viewConfigration = AcquiringViewConfigration.init()
viewConfigration.fields = []
viewConfigration.fields.append(AcquiringViewConfigration.InfoFields.buttonPaySPB)
Por código QR estático. El vendedor debe abrir la pantalla de pago en su dispositivo y el comprador debe escanear el código QR de la pantalla. Esto se puede hacer en la aplicación bancaria o en cualquier lector de QR: se abrirá la aplicación móvil del banco, el comprador ingresará el monto del pedido y pagará los bienes.
Existe un método correspondiente para la pantalla de pago con código QR en el SDK. Un desarrollador de aplicaciones necesita crear un botón en el marcado y llamar a un método.
En Android:
tinkoffAcquiring.openStaticQrScreen(context, screenOptions, STATIC_QR_REQUEST_CODE)
Método en iOS:
sdk.presentPaymentSbpQrImage(on: self, paymentData: createPaymentData(), configuration: acquiringViewConfiguration()) { [weak self] (response) in
self?.responseReviewing(response)
}
Diseño actualizado y tema oscuro
Was:

Now:

Hemos trabajado en el diseño de pantallas. Los elementos visuales se han actualizado, ahora se ven modernos y en línea con la identidad corporativa de Tinkoff. Como en la versión anterior, dejamos la personalización del tema en Android a través de los atributos de estilo. La ventana puede verse como una tarjeta o abrirse en pantalla completa; esto también es fácil de configurar en los atributos.
Además, las pantallas del SDK ahora admiten la orientación horizontal del dispositivo y el tema oscuro. Para mantener la configuración de la aplicación cliente, en el SDK de Android, el modo de tema oscuro se puede especificar en la configuración de pantalla. Valores posibles: "Siempre encendido", "Siempre apagado", "Cambio según la configuración del dispositivo o el modo de ahorro de batería". En el SDK de iOS, el tema oscuro cambia según la configuración de la aplicación.
Localización de pantalla
Problema. Usamos la localización estándar del SDK, según el idioma instalado en el dispositivo. Algunos clientes necesitaban configuraciones de localización de pantalla avanzadas.
Decisión. Se lanzó soporte extendido para la localización de pantalla para el SDK de Android. Ahora no depende de la ubicación del dispositivo. Puede crear su propia localización en cualquier idioma o instalar la localización estándar del SDK. La localización en ruso e inglés todavía es compatible con ambas plataformas.
Cómo empezar a usar
Para integrar el SDK en la aplicación, primero debe conectar la adquisición por Internet de Tinkoff Payments . Es rápido: el propietario de la empresa envía una solicitud y completa un cuestionario. Una vez que hemos comprobado los datos y nos hemos asegurado de que todo está en orden, podemos empezar a utilizar el SDK. Esto suele tardar dos días o menos.
Los métodos para conectar código de bibliotecas, documentación y código fuente, consulte nuestra GitHub:
→ Android SDK
→ iOS SDK
Si usted tiene alguna pregunta sobre la biblioteca o necesita ayuda con la transición a una nueva versión, escriba a nosotros, vamos a ayudar a averiguarlo: oplata@tinkoff.ru . O cree un problema en la sección correspondiente de GitHub.