Procesa una venta
Esta guía muestra cómo iniciar una venta con el SDK White Label. Puedes dejar que el SDK recopile el monto y el método de pago, o definirlos desde tu aplicación.
Cómo funciona
Inicias una venta con initSale. El parámetro saleSetup define quién proporciona el monto y el método de pago. El SDK muestra las pantallas, ejecuta la transacción y devuelve el resultado mediante un callback (consulta Resultado de la transacción).
La llamada retorna de inmediato; el resultado llega después en onPaymentResult. Se requiere un warm-up exitoso (WarmUpStatus.Success).
Antes de comenzar
De forma opcional, verifica qué métodos están habilitados para el terminal. Ambas funciones son suspend, así que llámalas desde una coroutine:
lifecycleScope.launch {
val apolo = ApoloSdk.getClient()
val available = apolo.getAvailablePaymentTypes() // Set<IMethod>
val pixEnabled = apolo.isPaymentTypeAvailable(IBrSaleMethod.Pix)
}Venta guiada (el SDK recopila los datos)
Usa Default para que el usuario elija el monto y el método en las pantallas del SDK. Usa Amount para definir el monto y dejar que el usuario elija el método:
val apolo = ApoloSdk.getClient()
// the user informs the amount and the method
apolo.initSale(context = activity, onPaymentResult = { result -> /* ... */ })
// the application fixes the amount; the user chooses the method
apolo.initSale(
context = activity,
saleSetup = Amount(amountInCents = 1990L), // R$ 19.90
onPaymentResult = { result -> /* ... */ },
)Los montos siempre están en centavos y deben ser mayores que cero. Amount(19) significa R$ 0.19, no R$ 19.00.
Venta directa (la aplicación define el monto y el método)
Define el monto y el método con una variante de BrSaleSetup.
Crédito
El crédito admite pago único y pago en cuotas:
// single payment
apolo.initSale(
context = activity,
saleSetup = BrSaleSetup.Credit(amountInCents = 15000L), // R$ 150.00
onPaymentResult = { result -> /* ... */ },
)
// installments
apolo.initSale(
context = activity,
saleSetup = BrSaleSetup.Credit(
amountInCents = 15000L,
installmentPlan = CreditInstallmentPlan(
installments = 3,
installmentType = CreditInstallmentType.MERCHANT_NO_INTEREST,
),
),
onPaymentResult = { result -> /* ... */ },
)Para el pago en cuotas, installments debe ser mayor que 1. installmentType define quién financia el plan:
MERCHANT_NO_INTEREST— el comercio absorbe el costo; el titular de la tarjeta no paga intereses.ISSUER_WITH_INTEREST— el emisor financia; el titular de la tarjeta paga intereses.
Débito, Voucher y Pix
Cada variante recibe solo el monto en centavos:
apolo.initSale(context = activity, saleSetup = BrSaleSetup.Debit(amountInCents = 8990L)) // R$ 89.90
apolo.initSale(context = activity, saleSetup = BrSaleSetup.Voucher(amountInCents = 3500L)) // R$ 35.00
apolo.initSale(context = activity, saleSetup = BrSaleSetup.Pix(amountInCents = 12000L)) // R$ 120.00En el caso de Pix, el SDK genera y muestra el QR Code, y monitorea el pago antes de devolver el resultado.
Lee el resultado
El resultado llega en onPaymentResult. Trata result.result == "00" como una aprobación y cualquier otro valor como una no aprobación. Consulta Resultado de la transacción para ver los códigos y el payload.
Siguientes pasos
- Procesa un reembolso — revierte una venta de crédito o débito.
- Referencia del resultado de la transacción — códigos de resultado y campos del payload.
- Imprime un recibo — imprime tu propio contenido junto con los recibos de venta automáticos del SDK.