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"**.