Para utilizar a funcionalidade de estorno do Zoop Android SDK, você chamará 1 método da classe **ZoopTerminalVoidPayment**:
**void voidTransaction** (String transactionId, String marketplaceId, String sellerId, String publishableKey)
Mas antes disso, precisamos implementar algumas interfaces.
**Interface VoidTransactionListener**
Implemente a interface **VoidTransactionListener** para receber notificações de status, solicitações e resultados finais do estorno.
A seguir, os 4 callbacks presentes neste "Listener". Detalharemos cada um deles em sequência:
**void voidTransactionSuccessful** (JSONObject var1)
**void voidTransactionFailed** (JSONObject var1)
**void currentVoidTransactionCanBeAbortedByUser** (boolean var1)
**void voidAborted()**
**voidTransactionSuccessful**
Esse método notifica sua aplicação de que uma transação foi estornada com sucesso.
A seguir, um exemplo de código:
**voidTransactionFailed**
Esse método notifica sua aplicação de que a tentativa de estornar uma transação falhou. Dentre outras informações, podemos encontrar uma mensagem de erro amigável dentro do "JSONObject".
A seguir, um exemplo de código:
**currentVoidTransactionCanBeAbortedByUser**
Esse método notifica sua aplicação se em determinando momento é permitido abortar uma tentativa de estorno em andamento.
A seguir, um exemplo de código:
**voidAborted**
Esse método notifica sua aplicação de que a tentativa de estorno foi abortada com sucesso após a solicitação do usuário. Esse "callback" pode ser acionado ao chamarmos o método **"void requestAbortCharge()"** da classe **ZoopTerminalVoidPayment**. A outra forma é clicando no botão **"Cancel"** da maquininha.
A seguir, um exemplo de código:
**Interface ApplicationDisplayListener**
Implemente a interface **ApplicationDisplayListener** para solicitar que o aplicativo apresente mensagens ao usuário.
A seguir, os 2 callbacks presentes neste "Listener". Detalharemos cada um deles em sequência:
**void showMessage** (String message, TerminalMessageType messageType)
**void showMessage** (String message, TerminalMessageType messageType, String explanation)
**showMessage**
Esse método notifica sua aplicação com uma mensagem e o tipo da mensagem para que sua aplicação possa fazer o processamento que julgar necessário antes de repassar ao usuário.
A seguir, um exemplo de código:
**showMessage**
Esse método notifica sua aplicação com uma mensagem, o tipo da mensagem e uma breve explicação para que sua aplicação possa fazer o processamento que julgar necessário antes de repassar ao usuário.
A seguir, um exemplo de código:
Após implementar os callbacks podem efetivamente fazer a chamada pro estorno.
**Classe ZoopTerminalVoidPayment**
Para realizar um estorno, na **"onCreate()"** da sua "Activity", antes de chamar o método **"voidTransaction"**, deve-se criar uma nova instância do **ZoopTerminalVoidPayment** e setar os seus "listerners".
A seguir, um exemplo de código:
A seguir, descrevemos os 4 parâmetros do método **"voidTransaction"**:
**void voidTransaction** (String transactionId, String marketplaceId, String sellerId, String publishableKey)
**transactionId** - _String_ contendo o identificador da transação a ser estornada
**marketplaceId** - _String_ contendo o identificador registrado para o _marketplace_ atual
**sellerId** - _String_ contendo o identificador do vendedor registrado
**publishableKey** - chave de identificação em _String_
A seguir, um exemplo de código:
Após o método **"voidTransaction"** ser chamado, o SDK irá se comunicar com a maquininha para obter as informações necessárias do cartão para que o estorno seja realizado com sucesso. Nesse processo, um possível fluxo seria passar repetidas vezes pelo método **"showMessage"** da interface **ApplicationDisplayListener** até que um **"JSONObject"** contendo informações do status do estorno seja trazido no método **"voidTransactionSuccessful"** ou no método **"voidTransactionFailed"**, ambos da interface **"VoidTransactionListener"**.