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:

func voidTransactionSuccessful(var1: AnyObject) {
       DispatchQueue.main.async {
            self.messageLabel.text = "Estorno realizado com sucesso"
            self.progressImageView.stopAnimating()
            self.performSegue(withIdentifier: "unwindVoidSuccess", sender: self)
       }
   }

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:

func voidTransactionFailed(var1: AnyObject) {
     DispatchQueue.main.async {
     if let obj = var1 as? Dictionary<String, AnyObject>, let error = 
                  obj["error"] as? Dictionary<String, AnyObject> {
               let message =  error["message"] as? String ?? "")
      }
   }
}

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:

func currentVoidTransactionCanBeAbortedByUser(var1: Bool) {
    if var1 {
      showPopup()
    }       
 }

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:

func showMessage(var1: String, var2: TerminalMessageType) {
     switch var2 {
       case .WAIT, .WAIT_PROCESSING, .WAIT_INITIALIZING:
            showWait(var1)
         break
       case .ACTION_INSERT_CARD:
           showInsertCard(var1)
         break
    ....
 }

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:

let zoopTerminalVoidPayment = ZoopTerminalVoidPayment()
    zoopTerminalVoidPayment.setTerminalPaymentListener(ptpl: self)
    zoopTerminalVoidPayment.setApplicationDisplayListener(padl: self)
    zoopTerminalVoidPayment.setExtraCardInformationListener(
pExtraCardInformationListener: self)

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:

zoopTerminalVoidPayment.voidTransaction(
                         transactionId: "360ac14b83dd41c6827a19e6dd8bd427", 
                         marketplaceId: "ffffa5eeee47cccc8b22229d7777a3bb", 
                         sellerId: "8989894eee3434530909e9234565bffd", 
                         publishableKey: "zk_test_jhUYGlLGlOPPoF23FFoaRODf"
)

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