Mundo Físico (POS)

Cancelar Venda

Como cancelar vendas via terminal POS

Pré-requisitos

  • Versão da API: Esta guia refere-se à Versão 2 (cancelPayment).
  • Bind Assíncrono: O PaymentClient deve estar bindado (via paymentClient.bind(this)). Verifique a conexão antes de chamar métodos.
  • Fluxo Geral: cancelPayment desfaz uma autorização pendente (não confirmada). Não use para transações confirmadas ou negadas. Para cancelar - transações confirmadas, use a API de Estorno (Versão 2). Consulte o diagrama de fluxo de pagamento na documentação principal.
  • ⚠️ Quando Usar: Chame este método se o processo de negócio falhar após a autorização, para evitar cobranças indevidas. Não é um estorno; estorno é para transações confirmadas.

Passos para Desfazer uma Autorização

1. Obtenha o PaymentId

Após sucesso em startPaymentV2, obtenha o paymentId do objeto PaymentV2 retornado no callback onSuccess. Exemplo:

@Override
public void onSuccess(PaymentV2 payment) {
    String paymentId = payment.getPaymentId();
    // Decida se confirma ou cancela com base na lógica do app
    if (/* condição para cancelar */) {
        doCancelPayment(paymentId);
    }
}

2. Chame cancelPayment

Use o PaymentClient para chamar cancelPayment, passando o paymentId e um callback. Implemente PaymentClient.PaymentCallback (ou um genérico, pois o sucesso retorna void, mas o callback é reutilizado). Exemplo:

import br.com.phoebus.android.payments.api.PaymentClient;
import br.com.phoebus.android.payments.api.ErrorData;
import br.com.phoebus.android.payments.api.PaymentV2;
import br.com.phoebus.android.payments.api.exception.ClientException;

// Método para desfazer
private void doCancelPayment(String paymentId) {
    try {
        paymentClient.cancelPayment(paymentId, new PaymentClient.PaymentCallback<PaymentV2>() {
            @Override
            public void onSuccess(PaymentV2 payment) {
                // Desfazimento OK - status agora é DESFEITA
                // Não há dados retornados além de sucesso
            }

            @Override
            public void onError(ErrorData errorData) {
                // Erro no desfazimento - exiba mensagem
                String message = errorData.getResponseMessage();
                // Verifique errorData.paymentsResponseCode (ex.: TRANSACTION_ALREADY_CONFIRMED)
            }
        });
    } catch (ClientException e) {
        // Trate erro de cliente (ex.: bind não conectado)
    }
}
  • onSuccess: Indica que o desfazimento foi realizado. A transação agora está desfeita e não pode ser confirmada.
  • onError: Recebe ErrorData com códigos de erro (consulte "Códigos de Resposta" na doc principal). Exemplos: Não permitido para transações confirmadas ou negadas.

3. Tratamento de Erros e Considerações

  • Erros Comuns: "TRANSACTION_ALREADY_CONFIRMED": Transação já confirmada – use estorno em vez disso. "TRANSACTION_NOT_FOUND": paymentId inválido. "TRANSACTION_ALREADY_UNDONE": Já desfeita.
  • Interface do Terminal: O terminal pode não exibir nada, pois é uma operação backend.
  • Após Desfazimento: A transação não pode ser confirmada. Para nova tentativa, inicie um novo pagamento.
  • Segurança: Sempre chame cancelPayment se o negócio falhar para evitar duplicidades ou cobranças indevidas.
  • Testes: Use ambiente de teste e verifique logs.

2025 © Nuvende - CNPJ 38.297.374/0001-93