# 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](/es/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result)).

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:

```kotlin
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:

```kotlin
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:

```kotlin
// 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:

```kotlin
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.00
```

En 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](/es/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result) para ver los códigos y el payload.

## Siguientes pasos

* [Procesa un reembolso](/es/getnet-toolbox/sdk-white-label/how-to-guides-sdk/process-a-refund) — revierte una venta de crédito o débito.
* [Referencia del resultado de la transacción](/es/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result) — códigos de resultado y campos del payload.
* [Imprime un recibo](/es/getnet-toolbox/sdk-white-label/how-to-guides-sdk/print-a-receipt) — imprime tu propio contenido junto con los recibos de venta automáticos del SDK.