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).
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:
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:
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:
// 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:
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.00No 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 para ver os códigos e o payload.
Próximos passos
- Processe um estorno — reverta uma venda no crédito ou no débito.
- Referência do resultado da transação — códigos de resultado e campos do payload.
- Imprima um recibo — imprima seu próprio conteúdo junto com os recibos de venda automáticos do SDK.