Cancelamento

Cancelamento

Faz-se uso da classe mPOSVoidRequestBuilder.

Na voidTransactionCallback, deverá ser apresentada uma listagem de transações para o usuário. Neste ponto, uma transação deverá ser selecionada. Após a seleção, a transação deverá ser cancelada e notificada na messageCallback.

Dica

A transação é selecionada utilizando o método: response.select(transaction) no objeto VoidTransaction recebido na voidTransactionCallback.
O tempo de seleção para transação de cancelamento é de 30 segundos, após, a operação será cancelada.

Exemplo
val voidRequest = MPOSPlugin.createVoidRequestBuilder()
    .transactionId("")
    .callback(object: Callback<mPOSVoidResponse>() {
        override fun onStart() {
            state = state.copy(status = Status.MESSAGE, message = "Processando")
        }

        override fun onSuccess(response: mPOSVoidResponse) {
            state = state.copy(status = Status.MESSAGE, message = "Cancelamento realizado")
            voidTransaction = null
        }

        override fun onFail(error: Throwable) {
            state = state.copy(
                status = Status.MESSAGE,
                message = error.message ?: "Falha na operação"
            )
            voidTransaction = null
        }

        override fun onComplete() {
            state = state.copy(status = Status.FINISHED, message = "")
        }
    })
    .voidTransactionCallback(object: Callback<UserSelection<VoidTransaction>>() {
        override fun onSuccess(response: UserSelection<VoidTransaction>) {
            voidTransaction = response
            state = state.copy(
                transactionsList = voidTransaction!!.items.toList(),
                status = Status.DISPLAY_VOID_LIST
            )
        }

        override fun onFail(error: Throwable) {
        }
    })
    .messageCallback(object: Callback<MessageCallbackRequestField.MessageData>() {
        override fun onSuccess(response: MessageCallbackRequestField.MessageData) {
            state = state.copy(status = Status.MESSAGE, message = response.message)
        }

        override fun onFail(error: Throwable) {
        }
    })
    .build()

Zoop.post(voidRequest)

Parâmetros

.transactionId

Caso seja passado um transactionId, o cancelamento será feito para a transação específica. Caso contrário, será feito o fluxo de listagem de transações. Ainda assim, a leitura do cartão será necessária.

  • transactionId: ID da transação a ser cancelada.

Este é um parâmetro opcional, podendo ser omitido, null ou vazio para seguir para o fluxo de listagem de transações.

Callbacks

.callback

Responsável pelo fluxo do cancelamento, início, processamento, conclusão (sucesso/falha).

onStart

Esta callback é sinalizada quando o fluxo do cancelamento começa, podendo ser sinalizado pela aplicação o início do processamento.

onSuccess

Neste momento, a transação foi cancelada, e você recebe o objeto MPOSVoidResponsecontendo um TransactionData, contendo todos os dados da transação.

data class TransactionData(
    val value: Int?, // Valor da transação em centavos
    val paymentType: Int?, // Tipo de pagamento
    val installments: Int?, // Parcelas
    val status: String?, // Status (approved/canceled)
    val brand: String?, // Marca do cartão ex: Visa
    val address: String?, // Endereço do seller
    val sellerName: String?, // Nome do seller
    val acquiring: String?, // Adquirente
    val pan: String?, // PAN do cartão
    val autoCode: String?, // Código de autorização
    val documentType: String?, // Tipo de documento, CPF/CNPJ
    val document: String?, // Documento
    val nsu: String?, // NSU
    val date: String?, // Data da transação
    val hour: String?, // Hora da transação
    val cv: String?, // CV
    val arqc: String?, // ARQC
    val aid: String?, // AID
    val sellerReceipt: String?, // Recibo do estabelecimento
    val customerReceipt: String?, // Recibo do cliente
    val approvalMessage: String?, // Mensagem de aprovação ex: APROVADA PELO EMISSOR
    val aidLabel: String?, // Label do cartão
    val transactionId: String?, // Id da transação
    val receiptId: String? = null, // Id do recibo, caso aplicável (hoje, apenas transações Pix)
    val pixId: Strting? = null, // Id do Pix
    var cardFingerprint: String? = null, // Token único do cartão
    val cardEntryMode: String? // Identifica qual o modo de entrada do cartão(TARJA, CHIP, NFC)
)

onFail

Falha no cancelamento, é recebido um exception, podendo ser do tipo:

  • ZoopPaymentException: Falha no fluxo do pagamento, neste caso, passamos a mensagem de erro, podendo ser acessada como exception.message.
  • ZoopTimeoutException: Tempo excedido na operação.
  • ZoopClosedConnectionException: Conexão interrompida.
  • ZoopNetworkException: Falha de conexão.

onComplete

Sinaliza o final do fluxo do cancelamento, tanto em casos de sucesso/falha.

.messageCallback

Responsável pelas mensagens no fluxo do cancelamento. ex: “Aproxime, insira ou passe o cartão”.

onSuccess

Mensagem a ser exibida pela aplicação para o usuário, acessada como response.message.

onFail

Não recebe nenhum dado, esta callback não é chamada.

.voidTransactionCallback

Responsável pela seleção da transação a ser cancelada, a partir de uma lista (fornecida neste callback).

A aplicação deverá exibir uma lista de transações para que o usuário selecione uma dentre elas em até 30 segundos. Esgotado esse limite de tempo, a operação será cancelada e notificada na messageCallback.

Pode-se obter a lista de itens pela propriedade items do objeto de UserSelection<VoidTransaction> recebido em onSuccess(). Seleciona-se a transação a cancelar pelo método select() desse mesmo objeto.

onSuccess

É recebido um objeto UserSelection<VoidTransaction> contendo um objeto iterable (acessada por response.items) a ser exibida pela aplicação para o usuário, a seleção de transação para cancelamento, é feita neste objeto. Cada item no objeto é uma transação.

data class VoidTransaction(
    val id: String,
    val amount: String,
    val option: Option,
    val cardBrand: CardBrand,
    val date: String,
    val time: String
)

onFail

Não recebe nenhum dado, esta callback não é chamada.