Lite SDK (Pago Android)
SDK recomendadoRecomendamos utilizar el Android Seamless SDK para una experiencia de integración sin problemas. Esta opción ofrece una solución de pago flexible con componentes de interfaz de usuario predefinidos y opciones de personalización.
Esta página proporciona una guía del Lite SDK Yuno Lite SDK para pagos en Android. Este SDK ofrece un proceso de integración simplificado con la funcionalidad esencial de pago, por lo que es ideal para los comerciantes que:
- ¿Necesita una implementación rápida con requisitos mínimos de personalización?
- Desea centrarse principalmente en el procesamiento de pagos con tarjeta.
- Prefiere una interfaz de usuario lista para usar que gestione el flujo de pago
El Lite SDK incluye características principales como:
- Componentes de interfaz de usuario de pago prediseñados
- Procesamiento de pagos con tarjeta
- Manejo básico del estado de pago
- Gestión de errores esenciales
Para los comerciantes que necesiten funciones más avanzadas, como múltiples métodos de pago, interfaz de usuario personalizada o prevención avanzada del fraude, considere la posibilidad de utilizar nuestro Full SDK completo.
Requisitos
Antes de comenzar la integración de Yuno Android SDK, asegúrate de que tu proyecto cumple los requisitos técnicos. Además, asegúrate de que se cumplen los siguientes requisitos previos:
- Debes tener una cuenta Yuno activa.
- Necesitas tus credenciales de la API de Yuno (
account_id,public-api-keyyprivate-secret-key), que puedes obtener en Sección de credenciales de desarrolladores del panel de Yuno. Estas credenciales son necesarias para autenticar las solicitudes a la API de Yuno. La API se utiliza para:- Cree un
customer, que se requiere antes de iniciar los pagos - Cree un
checkout_session, que inicialice el flujo de pago - Crear el pago asociado a la sesión
- Cree un
Versión del SDKConsulte las notas de la versión o el repositorio Yuno Android SDK para verificar la versión actual del SDK disponible.
Paso 1: Crea un cliente
Cree un cliente utilizando el endpoint Crear cliente antes de iniciar los pagos. Este paso es necesario para:
- Identificar a la persona que realiza el pago
- Habilitar la funcionalidad de tarjeta guardada (si está habilitada)
- Seguimiento del historial de pagos
El ID de cliente devuelto desde este endpoint se utilizará al crear el checkout_session.
Paso 2: Crea una sesión de pago
Crear un nuevo checkout_session utilizando la función del endpoint Crear sesión de pago para inicializar el flujo de pago. Asegúrese de que:
- Incluya el ID de cliente obtenido en el paso anterior
- Almacenar lo devuelto
checkout_sessionID para usar en el paso 5 de la integración - El objeto
checkout_sessionEs único para cada intento de pago y no se puede reutilizar.
Manejo de retornos del navegador externoSi su flujo de pago envía a los usuarios a un navegador externo (por ejemplo, para autenticación 3DS o redirecciones bancarias), asegúrese de configurar la
callback_urlal crear su sesión de pago. Para obtener una guía paso a paso sobre cómo gestionar la devolución a su aplicación, consulte Manejar el retorno del navegador externo (callback_url).
Paso 3: Incluye la biblioteca en tu proyecto
Incluye el archivo del SDK de Yuno en tu proyecto a través de Gradle. Añade la fuente del repositorio:
maven { url "https://yunopayments.jfrog.io/artifactory/snapshots-libs-release" }Incluya el siguiente código en el archivo build.gradle para añadir la dependencia del SDK de Yuno a la aplicación:
dependencies {
implementation 'com.yuno.payments:android-sdk:{last_version}'
}Permisos
El SDK de Yuno incluye el INTERNET por defecto, necesario para realizar solicitudes de red.
<uses-permission android:name="android.permission.INTERNET" />Paso 4: Inicializar el SDK con la clave pública
Initialize el SDK:
- Obtén tus claves API públicas desde el panel de control de Yuno
- Crea una clase de aplicación personalizada si no tienes una
- Inicialice el SDK llamando
Yuno.initialize()en tu aplicación con el métodoonCreate()pasando su clave API y su configuración:
class CustomApplication : Application() {
override fun onCreate() {
super.onCreate()
Yuno.initialize(
this,
PUBLIC_API_KEY,
config: YunoConfig,
)
}
}Usa la clase de datos YunoConfig para personalizar el comportamiento del SDK. Incluya esta configuración cuando llame a Yuno.initialize(). Las opciones disponibles son:
clase de datos YunoConfig(
val cardFlow: CardFormType CardFormType.ONE_STEP,
val saveCardEnabled: Boolean false,
val cardFormDeployed: Boolean false,
val language: YunoLanguage? = null,
val styles: YunoStyles? = null,
val cardNumberPlaceholder: String? = null, // Opcional: texto de marcador de posición personalizado para el campo del número de tarjeta
val hideCardholderName: Boolean? = null // Opcional: establezcete en verdadero para ocultar el campo del nombre del titular de la tarjeta
)La siguiente tabla describe cada opción de personalización:
| Opción de personalización | Descripción |
|---|---|
| flujo de tarjeta | Esta configuración opcional define el flujo de pago y de Tarjetas de Inscripción. Por defecto, el CardFormType.ONE_STEP . Véase la sección Opciones de renderizado para más información. |
| saveCardEnabled | Activa la casilla Guardar tarjeta en los flujos de tarjetas. Consulte la sección Guardar tarjeta para obtener más información. |
| language | Define el idioma que se utilizará en los formularios de pago. Puede establecerlo en una de las opciones de idioma disponibles:
|
| estilos | Permite la personalización de la interfaz de usuario en todo el SDK. Úselo para definir estilos visuales globales, como la familia de fuentes y la apariencia de los botones (color, relleno, radio, tipografía) mediante un YunoStyles objeto. Para más información, consulte la sección styles sección. |
| númeroDeTarjetaPlaceholder | Este campo opcional te permite personalizar el texto del marcador de posición para el campo del número de tarjeta. Admite caracteres alfanuméricos, espacios y caracteres UTF-8 para la localización. Si no se proporciona, el SDK utiliza el marcador de posición predeterminado («Número de tarjeta»). Esta personalización no afecta al formato de la tarjeta, el enmascaramiento, la lógica BIN ni la validación. |
| ocultarNombreTitularTarjeta | Este campo opcional te permite ocultar el campo del nombre del titular de la tarjeta en el formulario de la tarjeta. Cuando se establece en true, el campo del nombre del titular de la tarjeta no se muestra. Cuando no se especifica o se establece en false, se muestra el campo del nombre del titular de la tarjeta (comportamiento predeterminado). Ocultar el campo no afecta al PAN, la caducidad, la recopilación del CVV, la lógica BIN ni las validaciones 3DS/proveedor. El comerciante es responsable de garantizar que se proporcione el nombre del titular de la tarjeta cuando lo requiera tu pago . |
También necesitas actualizar tu manifiesto para usar tu aplicación:
<application android:name=".CustomApplication"></application>Paso 5: Iniciar el proceso de pago
Llame al startCheckout método en el onCreate() función de la actividad que integra el SDK para iniciar un nuevo proceso de pago con el Lite SDK:
startCheckout(
checkoutSession"checkout_session",
countryCode: "US",
callbackPaymentState: ((String?) -> Unit)?,
merchantSessionId: String? = null
)La siguiente tabla describe los parámetros necesarios para iniciar la comprobación:
| Parámetro | Descripción |
|---|---|
checkoutSession | Un identificador único para la sesión de pago asociada al pago. Es necesario para iniciar el proceso de pago y otorgar acceso a los métodos de pago disponibles del cliente. |
countryCode | Código del país donde se realiza el pago. Consulte Cobertura de países para obtener una lista completa de los países admitidos y sus códigos. |
callbackPaymentState | Es una función que devuelve el proceso de pago actual. Enviar esta función no es obligatorio si no necesita el resultado. |
merchantSessionId | Un identificador utilizado por el comerciante para rastrear el pago. |
Estado de pago de devolución de llamada
El objeto callbackPaymentState es una función que devuelve el proceso de pago actual. El envío de esta función no es obligatorio si no necesita el resultado. El siguiente bloque de código muestra los posibles estados:
const val pago=SUCCEEDED"
const val pago= "FALLIDO"
const val pago= "PROCESANDO"
const val pago= "RECHAZAR"
const val pago= "ERROR_INTERNO"
const val pago= "CANCELADO"La siguiente tabla proporciona información adicional sobre los posibles estados:
| Estado | Descripción | Se requiere acción adicional |
|---|---|---|
SUCCEEDED | El proceso de transacción o pago se completó con éxito sin ningún error. | No. |
FAIL | La transacción falló debido a errores como problemas de validación de datos, fallas de conexión del servidor o problemas técnicos/de red. | Sí. Investigue la causa del fallo (validación, red, servidor) y tome medidas correctivas. |
PROCESSING | La transacción está actualmente en curso, esperando aprobación o verificación. | No. |
REJECT | La transacción fue rechazada debido a razones como fondos insuficientes o sospecha de actividad fraudulenta. | Sí. Informar al usuario del rechazo, proporcionar el motivo si es posible y sugerir acciones. |
INTERNAL_ERROR | Se produjo un error interno inesperado dentro del sistema que maneja el proceso de pago. | Sí. Requiere intervención técnica para revisar el sistema, solucionar problemas internos y reintentar o informar al usuario. |
CANCELED | El usuario canceló voluntariamente la transacción o abandonó el proceso de pago. | No. |
Validación pago
En esta sección se explica cómo gestiona el SDK pago cuando los usuarios cancelan o abandonan pago , y cómo se relaciona el estado del SDK con pago del backend en estos casos.
Sincronizar pago (Google Pay)
En el caso de pago sincrónicos, como Google Pay, cuando tú cancelas o cierras la interfaz de usuario de la cartera antes de recibir la respuesta del proveedor pago (PSP):
- Estado del SDK: Devoluciones
CANCELED(CANCELLED) - pago en el backend: Restos
PENDINGhasta el tiempo de espera de PSP o la cancelación por parte del comerciante - ImportanteEl SDK no devolverá
REJECToPROCESSINGen este escenario
Esto garantiza que el pago backend pago en estado pendiente y pueda ser gestionado correctamente por el sistema del comerciante.
pago asíncronos (métodos basados en PIX y QR)
Para pago asíncronos como PIX, cuando tú cierras la ventana del código QR (haces clic en X) antes de completar el pago:
- Estado del SDK: Devoluciones
PROCESSING, opcionalmente con un subestado comoCLOSED_BY_USER - pago en el backend: Restos
PENDINGy el código QR sigue siendo válido hasta su fecha de caducidad. - Reutilización de la sesión de pago: al volver a abrir la misma sesión de pago, se puede mostrar el mismo código QR válido.
- Sin cancelación automática: El pago PIX no pago cancela automáticamente cuando tú cierras la ventana QR.
Este comportamiento permite a los usuarios volver al pago y completar la transacción utilizando el mismo código QR antes de que caduque.
Pagos asíncronos caducados
Si un código QR PIX caduca de forma natural:
- Estado del backendActualizado a
EXPIRED - Estado del SDK: Las devoluciones de llamada del SDK y endpoints de sondeo endpoints
EXPIREDde manera constante
Esto garantiza que los comerciantes reciban información precisa sobre el estado cuando un pago ha caducado.
Paso 6: Iniciar el proceso de pago
Llamar al método startPaymentLite para iniciar un proceso de pago:
iniciarPagoLite(
paymentSelected: PaymentSelected,
callbackOTT:(¿Cadena?) -> Unidad,
callBackTokenWithInformation:OneTimeTokenModel?) -> Unidad,
showPaymentStatus: Boolean,
)La siguiente tabla describe los parámetros necesarios para iniciar el pago:
| Parámetro | Descripción |
|---|---|
paymentSelected | Informar el método de pago seleccionado por el comprador. |
showStatusYuno | Un valor Boolean que especifica si el estado del pago debe mostrarse dentro de la interfaz de Yuno. |
callbackOTT | Una función obligatoria que devuelve el token único actualizado necesario para completar el proceso de pago. |
callBackTokenWithInformation | Una función que proporciona información detallada sobre el token de un solo uso, envuelto en un OneTimeTokenModel objeto, lo que permite un manejo integral de los detalles del token. |
Envía un parámetro adicional, que es el token bóveda y/o el tipo de pago que el usuario seleccionó para realizar el pago:
PaymentSelected(
vaultedToken : Stringpago",
paymentMethodType : Cadenapago",
)Paso 7: Consigue el OTT (token de un solo uso)
El token de un solo uso es un identificador único que representa una sesión de pago. Este token es necesario para crear un pago.
Token de devolución de llamada de un solo uso
La devolución de llamada de token única devuelve los siguientes parámetros:
| Parámetro | Tipo | Descripción |
|---|---|---|
| un token de tiempo único | Cadena | token de un solo uso generado para la sesión de pago |
Manejo del cargadorEl comerciante es responsable del manejo del cargador. Yuno ofrece una opción para utilizar nuestro cargador; sin embargo, el comerciante puede utilizar su propio cargador y deberá realizar las configuraciones correspondientes.
Paso 8: Crea el pago
Después de completar los pasos anteriores, cree un pago llamando al endpoint Crear pago desde su backend. Este endpoint requiere:
- El token único obtenido en el paso 7
- El objeto
checkout_sessionobtenido en el paso 2
Continuar con la integración de métodos de pagoYuno requiere que integres el
continuePaymentdel SDK después de crear el pago porque ciertos métodos de pago asincrónicos requieren una acción adicional por parte del cliente para completarlo. La API le informará de este escenario a través delsdk_action_requiredde la respuesta, que se devolverá como verdadero. Layuno.continuePayment()La función mostrará las pantallas adicionales a los clientes, donde podrán realizar las acciones necesarias para completar el pago sin necesidad de que usted maneje cada escenario.
Para los métodos de pago que requieren acciones adicionales del cliente (como desafíos de autenticación 3DS) o procesamiento asincrónico (como transferencias bancarias), deberá integrar el SDK. continuePayment método después de crear el pago. La respuesta de la API Crear pago incluye un sdk_action_required campo que indica si este paso es necesario:
- Si el
TRUE: Llamaryuno.continuePayment()para mostrar pantallas adicionales para acciones del cliente (por ejemplo, autenticación 3DS, páginas de redireccionamiento bancario) - Si el
FALSE: Omita este paso, ya que no se requiere interacción adicional con el cliente.
El siguiente bloque de código muestra cómo implementar el flujo de continuación de pago:
continuePayment(
showPaymentStatus: Boolean = true
checkoutSession: String? = null
countryCode: String? = null,
callbackPaymentState: ((String?) -> Unit)? = null
)Enviar FALSE en el showPaymentStatus para mostrar sus pantallas de estado de pago. A continuación, obtener el estado de pago por devolución de llamada.
Modo de renderizado (integración avanzada)
Para los desarrolladores que requieren un control avanzado de la interfaz de usuario, el SDK Lite también admite la integración del modo de renderizado. Este modo proporciona componentes de interfaz de usuario basados en fragmentos que se pueden integrar en diseños personalizados, ofreciendo mayor flexibilidad y manteniendo la funcionalidad optimizada del SDK Lite.
Configuración básica del modo de renderizado
Usar startPaymentRender Para una integración avanzada de la interfaz de usuario:
fun Activity.startPaymentRender(
checkoutSession: String? = null
countryCode: String? = null
ámbitoCoroutina: CoroutineScope,
paymentSelected: PaymentSelected,
oyente: YunoPaymentRenderListener,
): YunoPaymentFragmentControllerEjemplo de implementación
class PaymentActivity : Activity() {
private lateinit var fragmentController: YunoPaymentFragmentController
private fun initializeRenderMode() {
fragmentController = startPaymentRender(
checkoutSession = checkoutSessionId,
countryCode = "US",
coroutineScope = lifecycleScope,
paymentSelected = PaymentSelected.CARD,
listener = object : YunoPaymentRenderListener {
override fun showView(fragment: Fragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.payment_container, fragment)
.commit()
}
override fun returnOneTimeToken(oneTimeToken: String, additionalData: OneTimeTokenModel?) {
processPayment(oneTimeToken) {
fragmentController.continuePayment()
}
}
override fun returnStatus(resultCode: Int, paymentStatus: String) {
handlePaymentResult(paymentStatus)
}
override fun loadingListener(isLoading: Boolean) {
updateLoadingUI(isLoading)
}
}
)
}
}Beneficios clave
- Integración de interfaz de usuario personalizada: Incrusta componentes de pago en tus diseños existentes
- Compatibilidad de fragmentos: Funciona tanto con XML como con Jetpack Compose.
- Control de flujo: Gestione manualmente el envío de formularios y la continuación del pago
Función avanzadaEl modo de renderizado está diseñado para desarrolladores que necesitan una integración de interfaz de usuario personalizada. Para implementaciones más sencillas, utilice los métodos estándar del SDK Lite descritos en los pasos anteriores.
Características complementarias
Yuno Android SDK proporciona servicios y configuraciones adicionales que puedes utilizar para mejorar la experiencia de los clientes. Utiliza la personalización del SDK para cambiar la apariencia del SDK para que coincida con tu marca o para configurar el cargador.
styles
stylesCon el styles puede definir estilos visuales globales a través de una opción de personalización YunoStyles objeto. Permite aplicar una imagen de marca consistente en todo el SDK personalizando la apariencia y la tipografía de los botones.
datos clase YunoStyles(
val BotónEstilos: YunoButtonStyles? = null,
val fontFamily: ¿FontFamily? = null
)| Parámetro | Descripción |
|---|---|
buttonStyles | Personaliza los botones principales que se muestran en el SDK. |
fontFamily | Establece la familia de fuentes utilizada en todos los elementos de texto del SDK. |
El objeto YunoButtonStyles El objeto le permite definir configuraciones específicas para la apariencia del botón:
datos clase YunoButtonStyles(
val backgroundColor: Color? = null,
val contentColor: Color? = null,
val cornerRadius: ¿Dp? = null
val elevación: ¿Dp? = null
val relleno: ¿Dp? = null
val fontFamily: FontFamily? = null
val fontSize: TextUnit? = null
val fontStyle: FontStyle? = null
)Use el endpoint YunoConfig descrita en el paso 4, para utilizar la clase de datos styles opción de personalización.
Loader
La funcionalidad del cargador se controla a través del keepLoader en el parámetro YunoConfig que se documenta en línea en la sección de configuración del SDK.
Guardar tarjeta para futuros pagos
También puede mostrar una casilla para guardar o inscribir tarjetas mediante cardSaveEnable: true. En los siguientes ejemplos se muestra la casilla de verificación para ambas variantes de representación del formulario de tarjeta:
Opciones de renderizado
Puede elegir entre dos opciones de representación de la forma de la tarjeta. Las siguientes capturas de pantalla muestran la diferencia entre cardFormType ONE_STEP y STEP_BY_STEP:
Personalización del SDK
Puede cambiar el aspecto del SDK para adaptarlo a su marca. Para obtener más información, consulte la página de personalización del SDK.
App DemoAdemás de los ejemplos de código proporcionados, puedes ver el repositorio de Yuno para completar la implementación de Yuno Android SDKs.
Actualizado hace 27 días