Para utilizar a funcionalidade de estorno do Zoop iOS SDK, você chamará 1 método da classe **ZoopTerminalVoidPayment**:

**public func voidTransaction(transactionId:String, marketplaceId: String, sellerId:String, publishableKey:String)**

Mas antes disso, será necessário implementar algumas interfaces.

**Protocolo VoidTransactionProtocol**

Implemente o protocolo **VoidTransactionProtocol** para receber notificações de status, solicitações e resultados finais do estorno.

A seguir, os 3 callbacks presentes neste "Listener". Detalharemos cada um deles em sequência:

**voidTransactionSuccessful (@objc func voidTransactionSuccessful(var1: AnyObject))**

O método que notifica sua aplicação de que uma transação foi estornada com sucesso.

A seguir, um exemplo de código:



**voidTransactionFailed (@objc func voidTransactionFailed(var1: AnyObject))**

O método que 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 **"AnyObject"**.

A seguir, um exemplo de código:



**currentVoidTransactionCanBeAbortedByUser (@objc funccurrentVoidTransactionCanBeAbortedByUser(var1: Bool))**

O método que notifica sua aplicação se em determinando momento é permitido abortar uma tentativa de estorno em andamento.

A seguir, um exemplo de código:



**Protocolo ApplicationDisplayProtocol**

Implemente do protocolo **ApplicationDisplayProtocol** 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:

func **showMessage**(var1: String, var2: TerminalMessageType)

func **showMessage**(var1: String, var2: TerminalMessageType, var3: String)

**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:



Após implementar os callbacks podem efetivamente fazer a chamada pro estorno.

**Classe ZoopTerminalVoidPayment**

Para realizar um estorno, no seu controller, 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**":

  • **func voidTransaction**(transactionId: id, marketplaceId: sMarketplaceId, sellerId: sSellerId, publishableKey: sPublishableKey)

  • **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**" do protocolo **ApplicationDisplayProtocol** até que um **"AnyObject"** contendo informações do status do estorno seja trazido no método "**voidTransactionSuccessful**" ou no método "**voidTransactionFailed**", ambos do protocolo "**VoidTransactionProtocol**".