# Processe uma venda

Este guia mostra como iniciar uma venda com o SDK White Label. Você pode deixar o SDK coletar o valor e o meio de pagamento, ou definir os dois no seu aplicativo.

## Como funciona

Você inicia uma venda com `initSale`. O parâmetro `saleSetup` define quem fornece o valor e o meio de pagamento. O SDK exibe as telas, executa a transação e devolve o resultado por um callback (consulte [Resultado da transação](/pt/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result)).

A chamada retorna imediatamente; o resultado chega depois em `onPaymentResult`. É necessário um warm-up bem-sucedido (`WarmUpStatus.Success`).

## Antes de começar

Se quiser, verifique quais meios de pagamento estão habilitados para o terminal. As duas funções são `suspend`, então chame-as de uma coroutine:

```kotlin
lifecycleScope.launch {
    val apolo = ApoloSdk.getClient()
    val available = apolo.getAvailablePaymentTypes()          // Set<IMethod>
    val pixEnabled = apolo.isPaymentTypeAvailable(IBrSaleMethod.Pix)
}
```

## Venda guiada (o SDK coleta os dados)

Use `Default` para deixar o usuário escolher o valor e o meio de pagamento nas telas do SDK. Use `Amount` para definir o valor e deixar o usuário escolher o meio de pagamento:

```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 -> /* ... */ },
)
```

Os valores são sempre em centavos e devem ser maiores que zero. `Amount(19)` significa R\$ 0,19, e não R\$ 19,00.

## Venda direta (o aplicativo define o valor e o meio de pagamento)

Defina o valor e o meio de pagamento com uma variante de `BrSaleSetup`.

### Crédito

O crédito aceita pagamento à vista e parcelado:

```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 -> /* ... */ },
)
```

No parcelamento, `installments` deve ser maior que 1. O `installmentType` define quem financia o plano de parcelamento:

* `MERCHANT_NO_INTEREST` — o estabelecimento absorve o custo; o portador do cartão não paga juros.
* `ISSUER_WITH_INTEREST` — o emissor financia; o portador do cartão paga juros.

### Débito, Voucher e Pix

Cada variante recebe somente o valor em 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
```

No Pix, o SDK gera e exibe o QR Code e acompanha o pagamento antes de retornar o resultado.

## Leia o resultado

O resultado chega em `onPaymentResult`. Trate `result.result == "00"` como aprovação e qualquer outro valor como não aprovação. Consulte [Resultado da transação](/pt/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result) para ver os códigos e o payload.

## Próximos passos

* [Processe um estorno](/pt/getnet-toolbox/sdk-white-label/how-to-guides-sdk/process-a-refund) — reverta uma venda no crédito ou no débito.
* [Referência do resultado da transação](/pt/getnet-toolbox/sdk-white-label/reference-sdk/transaction-result) — códigos de resultado e campos do payload.
* [Imprima um recibo](/pt/getnet-toolbox/sdk-white-label/how-to-guides-sdk/print-a-receipt) — imprima seu próprio conteúdo junto com os recibos de venda automáticos do SDK.