Saltar al contenido principal

Inicio rápido

Beta

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 prepararLector no prepara nada y la Tarjeta FINORA no está disponible).
  • Tu app autorizada por el comercio: su applicationId y la huella SHA-256 de su certificado de firma en la lista de integradores. Ver Seguridad y alta.

1. Dependencia​

settings.gradle.kts
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven("https://developers.finoracore.com/maven/") // FINORA Pago SDK
}
}
app/build.gradle.kts
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.
  • referenciaExterna identifica 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("…") o sucursalId(…).
  • build() valida la solicitud con las mismas reglas que FINORA Pago y lanza IllegalArgumentException si 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.