Criar um Pagamento de Etapa Única
A função principal do TPV é processar pagamentos com cartão. O PaymentRepository gerencia esta operação, lidando com a comunicação entre o leitor de cartões e o Get Smart SDK Payment Service.
Antes de processar qualquer pagamento, certifique-se de que você já inicializou o TPV.
Realizando um Pagamento Padrão
Para processar um pagamento simples com cartão, use a função makePayment. O único parâmetro obrigatório é o amount (como um objeto Money).
suspend fun pay(amount: BigDecimal, currency: Currency) {
// 1. Create the Money object
val money = Money(amount, currency)
// 2. Call makePayment
val result = paymentRepository.makePayment(
amount = money
)
// 3. Handle the result
when (result) {
is RepositoryResult.Success -> handlePaymentResult(result.data)
is RepositoryResult.ConnectionError -> showError("Connection failed")
is RepositoryResult.Cancelled -> showInfo("User cancelled: ${result.message}")
is RepositoryResult.ProtocolError -> showError("Error: ${result.type}")
}
}Parâmetros de Pagamento Avançados
A função makePayment suporta vários parâmetros opcionais para enriquecer os dados da transação:
tip: Um objetoMoneyrepresentando o valor da gorjeta.shiftInfo: Um objetoShiftInfopara associar o pagamento a um turno de trabalho específico (Número e Data).financialConditions: Condições financeiras específicas (como Plazox), se aplicável.proprietaryExtraData: Um objeto para anexar dados de terceiros à transação.language: Um enumLanguageIso6391para forçar a interface do serviço para um idioma específico nesta operação.
Exemplo com parâmetros opcionais:
val result = paymentRepository.makePayment(
amount = Money(BigDecimal("50.00"), Currency.getInstance("EUR")),
tip = Money(BigDecimal("5.00"), Currency.getInstance("EUR")),
language = LanguageIso6391.ES
)Interpretando o PaymentResult
Quando a chamada do repositório é bem-sucedida (RepositoryResult.Success), ela retorna um objeto PaymentResult. Você deve verificar este objeto para determinar se a operação financeira foi realmente aprovada ou negada pelo banco.
O PaymentResult é uma interface selada (sealed interface) com três estados possíveis:
1. Aceito (PaymentResult.Accepted)
O pagamento foi autorizado pelo host.
- Dados: Contém um objeto
Transactioncom detalhes completos (cartão usado, código de autorização, dados do comprovante). - Ação: Imprima o comprovante e complete a venda em seu app.
2. Negado (PaymentResult.Denied)
O pagamento foi rejeitado pelo host ou banco.
- Dados: Contém um objeto
Transaction(geralmente com o motivo da rejeição). - Ação: Informe ao usuário que o cartão foi recusado.
3. Cartão Não Encontrado (PaymentResult.CardNotFound)
Erro específico para fluxos de entrada manual onde o número do cartão inserido não existe.
Exemplo de Lógica de Tratamento
fun handlePaymentResult(paymentResult: PaymentResult) {
when (paymentResult) {
is PaymentResult.Accepted -> {
val transaction = paymentResult.data
val authCode = transaction.operationInfo.authorizationNumber
println("✅ Payment Approved! Auth Code: $authCode")
// Proceed to print ticket...
}
is PaymentResult.Denied -> {
val transaction = paymentResult.data
val reason = transaction.operationInfo.failedReasonInfo?.desc ?: "Unknown"
println("❌ Payment Denied. Reason: $reason")
}
is PaymentResult.CardNotFound -> {
println("❌ Error: Card not found.")
}
}
}Próximos Passos
- Criar um Pagamento Pré-autorizado: Saiba como reservar fundos em um cartão.
- Estornar um Pagamento: Como devolver fundos se um pagamento foi feito por engano.