Inicio rápido
El SDK 1.0.0-beta.3 se publica en el repositorio Maven de FINORA. FINORA Pago 0.16.0 y la app de ejemplo los entrega FINORA bajo acuerdo. Todavía no lo uses con dinero real.
Requisitos
- Android 6.0 (API 23) o superior.
- FINORA Pago 0.16.0 o superior instalado y enrolado en el mismo equipo (con la 0.15.3 se cobra y se anula, pero
prepararLectorno prepara nada y la Tarjeta FINORA no está disponible). - Tu app autorizada por el comercio: su
applicationIdy la huella SHA-256 de su certificado de firma en la lista de integradores. Ver Seguridad y alta.
1. Dependencia
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven("https://developers.finoracore.com/maven/") // FINORA Pago SDK
}
}
dependencies {
implementation("com.dcgeeks.finora:pago-sdk:1.0.0-beta.3")
}
El repositorio publica el .aar, el .pom, el .module, las fuentes y sus sumas de verificación (MD5, SHA-1, SHA-256 y SHA-512). El SDK declara por ti las <queries> que exige Android 11 para ver a FINORA Pago, y trae sus reglas de ProGuard/R8. Solo depende de androidx.activity (y de la biblioteca estándar de Kotlin).
2. Cobrar en diez líneas
private val cobrar = registerForActivityResult(FinoraPago.Cobrar()) { r ->
if (r.aprobada) entregarPedido(r.referenciaExterna, r.autorizacion, r.ultimos4, r.marca)
else if (r.estado.requiereConsulta) marcarParaConsultar(r) // EN_DUDA: nunca cobres otra vez
else mostrar(r.mensaje)
}
fun alPulsarCobrar() = cobrar.launch(
SolicitudCobro.Builder().montoCentavos(12_500).moneda("VES")
.referenciaExterna("PED-1001").sucursalCodigo("0001").build()
)
montoCentavos(12_500)son 125,00 en la unidad menor de la moneda.referenciaExternaidentifica tu pedido y es la clave de idempotencia: si repites la solicitud con la misma referencia, no se cobra dos veces.- La sucursal es obligatoria:
sucursalCodigo("…")osucursalId(…). build()valida la solicitud con las mismas reglas que FINORA Pago y lanzaIllegalArgumentExceptionsi algo está mal.
3. Antes de mostrar el botón «Cobrar» (opcional)
val estado = FinoraPago.estado(context) // sin abrir pantalla; no lo llames en bucle en el hilo principal
when {
!estado.instalado -> pedirInstalarFinoraPago()
!estado.autorizado -> mostrar("Pide al comercio que autorice esta app")
!estado.listo -> mostrar(estado.motivo)
else -> habilitarCobro()
}
La última palabra la tiene siempre el resultado del cobro: estado() solo sirve para guiar al usuario.
4. Prepara el lector antes del cobro (recomendado)
// Al abrir el pedido, fuera del hilo principal: conecta el lector Bluetooth y lo deja listo, sin cobrar nada.
val e = FinoraPago.prepararLector(context)
Así el cliente no espera la conexión del lector al pagar. Detalles y cifras en Rendimiento. Para cobrar con la Tarjeta FINORA del cliente, añade .medio(Contrato.Medio.TARJETA_FINORA) a la solicitud (Tarjeta FINORA).
Variante de demostración
Para probar sin dinero real, usa la variante de demostración de FINORA Pago:
registerForActivityResult(FinoraPago.Cobrar(Contrato.PAQUETE_DEMO)) { … }
Los resultados de la demostración llegan con simulado = true.
Siguiente paso
¿Primera vez? Sigue el tutorial de cero a tu primer cobro, con la app de ejemplo y el alta en la lista de integradores.
Lee Estados y errores antes de salir a producción: el caso EN_DUDA es el que evita cobrar dos veces a un cliente.