Getnet DocsGetnet Docs

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 objeto Money representando o valor da gorjeta.
  • shiftInfo: Um objeto ShiftInfo para 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 enum LanguageIso6391 para 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 Transaction com 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