Pagamento

Venda

  • Faz-se uso do método TapOnPhone.pay().

Parâmetros

É necessário passar os parâmetros conforme a seguir:

struct PaymentRequest(
    let amount: Int
    let paymentType: TapOnPhonePaymentType
    let installments: Int
    let metadata: String?
)

amount -> Valor em centavos. Ex: 100 = R$ 1,00
paymentType -> Tipo de pagamento (TapOnPhonePaymentType.credit, TapOnPhonePaymentType.debit)
installments -> Quantidade de parcelas (para compra parcelada valor deve ser igual ou maior que 2)
metadata -> String arbitrária enviado junto à transação (limitada a 512 caracteres)

Para informação sobre os possíves eventos, ver aqui

Exemplo de pagamento

TapOnPhone.pay(
    payRequest: PaymentRequest(
        amount: 1000, // R$ 10,00
        paymentType: TapOnPhonePaymentType.credit,
        installments: 2,
        metadata: """
            {
                "clientId": "1234",
                "name": "John Doe"        
            }
        """
    ),
    onSuccess: { [weak self] result in
        guard let self else { return }

        print("Payment approved! id: \(result.transactionId)")
    },
    onError: { [weak self] transactionError in
        guard let self else { return }
        
        if transactionError.type == .payment {
          let error = transactionError.error as! PaymentErrorResponse
          print("Payment denied - id: ", error.transactionId ?? "unknown")
          print("code: ", error.error.code.rawValue)
          print("name: ", error.error.code.description)
          print("message: ", error.error.message)
        } else {
          error.error as! TapOnPhoneError
          print("SDK start error - code: ", error.code.rawValue)
          print("name: ", error.code.description)
          print("message: ", error.message)
        }
    },
    onEvent: { ApplicationEvent in
        print("ApplicationEvent: \(ApplicationEvent)")
    }
)

Resposta de sucesso PaymentApprovedResponse

struct PaymentApprovedResponse {
	let transactionId: String // Id da transação na Zoop
	let cardBrand: String  // Bandeira do cartão
  let readerIdentifier: String? // Id do leitor de pagamentos
  let readResultId: String? // Id do resultado da leitura do cartão
}

Resposta de erro ErrorResponse

struct ErrorResponse {
  let type: ErrorType
  let error: Any // Quando initialize, cast para TapOnPhoneError, quando payment, cast para PaymentErrorResponse
}

enum ErrorType {
  case initialize
  case payment
  case onboarding
}

struct PaymentErrorResponse {
	let error: TapOnPhoneError // Estrutura de erro do SDK informando o que exatamente aconteceu
	let transactionId: String? // Id da transação na Zoop
	let cardBrand: String?  // Bandeira do cartão
  let readResultId: String? // Id do resultado da leitura do cartão
}