Seamless SDK (Pago Android)
Esta página proporciona una guía del Yuno Seamless SDK para pagos en 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.
Este SDK es ideal para comerciantes que:
- ¿Quiere tener control sobre el flujo de pago mientras aprovecha los componentes de interfaz de usuario prediseñados?
- ¿Necesita personalizar la experiencia de pago manteniendo el cumplimiento de PCI?
- Requiere un equilibrio entre la velocidad de implementación y la personalización.
El Seamless SDK incluye características como:
- Componentes de interfaz de usuario de pago prediseñados con opciones de personalización
- Admite múltiples métodos de pago
- Manejo avanzado del estado de pago
- Gestión integral de errores
Los comerciantes que necesiten un control completo de la interfaz de usuario o funciones más avanzadas pueden 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 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
Verificar la 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 6 de la integración
Controlar la autenticación frente a la captura mediante el envío
payment_method.detail.card.captureen la sesión de pago:false= solo autorizar,true= capturar inmediatamente.
Parámetros clave
| Parámetro | Requerido | Descripción |
|---|---|---|
amount | Sí | El objeto de importe de la transacción primaria que contiene currency (código ISO 4217) y value (importe numérico en esa moneda). |
alternative_amount | No | Una representación monetaria alternativa del importe de la transacción con la misma estructura que amount (currency y value). Útil para escenarios multidivisa, como mostrar los precios a los clientes en su divisa preferida (por ejemplo, USD) mientras se procesa el pago en la divisa local (por ejemplo, COP). |
Uso de la sesión de pagoEl objeto
checkout_sessiones único para cada intento de pago y no se puede reutilizar.
Paso 3: Agrega el SDK a tu proyecto
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}'
}Paso 4: Configurar permisos
El SDK de Yuno requiere permisos de red. Asegúrese de que el permiso INTERNET está incluido en su AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET" />Paso 5: Inicializar el SDK
Recupera tus claves API públicas del panel de control de Yuno.
Si no has implementado una aplicación personalizada, crea una. En el método onCreate() de tu clase de aplicación, llama a la función de inicialización (Yuno.initialize):
class CustomApplication : Application() {
override fun onCreate() {
super.onCreate()
Yuno.initialize(
this,
PUBLIC_API_KEY,
config = YunoConfig()
)
}
}Use el endpoint YunoConfig para establecer configuraciones adicionales para el SDK. La siguiente tabla enumera y describe las opciones de personalización:
| Opción | Descripción |
|---|---|
| flujo de tarjeta | Define el flujo del formulario de la tarjeta. La opción predeterminada es CardFormType.ONE_STEP. Consulta la sección Opciones de renderizado para más información. |
| saveCardEnabled | Activa la casilla de guardar tarjeta para 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 el 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 . |
El siguiente bloque de código muestra un ejemplo de YunoConfig:
clase de datos YunoConfig(
val cardFlow: CardFormType CardFormType.ONE_STEP,
val saveCardEnabled: 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: establecer en verdadero para ocultar el campo del nombre del titular de la tarjeta
)Paso 6: Iniciar el 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 Seamless SDK:
startCheckout(
checkoutSession: "checkout_session",
country_code: "US",
callbackPaymentState: ((String?) -> Unit)?,
merchantSessionId: String? = null
)| Parámetro | Descripción |
|---|---|
checkoutSession | El objeto checkout_session está relacionado con el pago. |
country_code | 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 | Una función que devuelve el proceso de pago actual. Opcional si no necesita el resultado. |
merchantSessionId | Identificador opcional para el seguimiento de la sesión del comerciante. El valor predeterminado es nulo. |
Los posibles estados de pago devueltos por callbackPaymentState son:
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 7: Reciba el pago mediante un token de un solo uso (OTT)
Llamar al método startPaymentSeamlessLite para iniciar un proceso de pago:
startPagoSeamlessLite(
pagoSeleccionado: PagoSeleccionado,
callbackPaymentState: ((¿Cadena?) -> Unidad)?,
showPaymentStatus: Boolean,
)La siguiente tabla describe los parámetros para iniciar el pago:
| Parámetro | Descripción |
|---|---|
paymentSelected | Especifica el método de pago, ya sea a través de un token almacenado o un tipo de pago seleccionado. |
callbackPaymentState | Este es un parámetro opcional. Esta función maneja las actualizaciones de estado. |
showPaymentStatus | Se trata de un parámetro opcional. Cuando true, muestra la pantalla de resultados predeterminada del SDK. |
Recibirá el estado del pago a través de callbackPaymentState, que indicará si el pago fue exitoso o si ocurrió algún problema.
Paso 8: Crear pago
Llamar al método startPaymentSeamlessLite con el método de pago seleccionado para completar el proceso de pago:
startPagoSeamlessLite(
pagoSeleccionado: PagoSeleccionado,
callbackPaymentState: ((¿Cadena?) -> Unidad)?,
showPaymentStatus: Boolean,
)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 5, 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:
Acceso a la aplicación de demostraciónAdemá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 26 días