Simulações

Guia de simulações no iOS Simulator

Simulações no iOS Simulator

O SDK Tap on Phone iOS oferece recursos de simulação para desenvolvimento, testes automatizados e validação de integração no iOS Simulator, sem cartão NFC.

As simulações descritas nesta página dependem do ambiente sandbox da Zoop e estão disponíveis a partir das versões indicadas abaixo.

O que você pode simular

RecursoVersão mínima
Pagamento completo no simulador3.4.12
Recusa por valor (R$ 5,01–5,99)3.4.12
Kernel update (kernelUpdateProgress)3.5.0
📘

Importante

Simulações no simulador não substituem testes em dispositivo físico com NFC. Use dispositivo real para validar Tap to Pay, onboarding Apple e fluxos de produção.

Antes de começar

  • SDK 3.4.12 ou superior (recomendado: 3.5.0).
  • App rodando no iOS Simulator (Xcode).
  • Credenciais sandbox provisionadas pela Zoop. Veja Ambiente de Sandbox.
  • Fluxo mínimo: setConfiginitialize (opcional) → pay.

Configurar o ambiente sandbox

let config = ConfigParameters(
    credentials: credentials,
    environment: .sandbox,
    logLevel: .error,
    sdkConfig: SdkConfig()
)
TapOnPhone.setConfig(configParameters: config)

Pagamentos simulados

Disponível desde a versão 3.4.12.

O SDK executa o fluxo de pagamento completo no iOS Simulator. As transações usam dados de cartões de teste e são enviadas ao backend sandbox da Zoop.

💡

Dica

Nenhuma alteração na integração é necessária. Basta rodar o app no simulador com environment: .sandbox e chamar o método pay normalmente.

Realizar um pagamento simulado

let request = PaymentRequest(
    amount: 1000,              // R$ 10,00
    paymentType: .credit,
    installments: 1,
    referenceId: "minha-ref-001"
)

TapOnPhone.pay(
    payRequest: request,
    onSuccess: { response in
        print("Aprovado:", response.transactionId)
    },
    onError: { response in
        switch response.sdkError {
        case .payment(let paymentError):
            print("Recusado:", paymentError.error.message)
        case .tapOnPhone(let error):
            print("Erro SDK:", error.message)
        case .unknown(let raw):
            print("Erro:", raw)
        }
    },
    onEvent: { event in
        print("Evento:", event)
    }
)

Restrições

RestriçãoDetalhe
Ambientes permitidosApenas sandbox
Valor máximoR$ 200,00 (20.000 centavos) por transação
NFCNão utilizado; leitura simulada localmente
Cobrança realNão ocorre
⚠️

Atenção

Valores acima de R$ 200,00 são rejeitados no simulador. Tentativas para o ambiente de production ou custom também retornam erro.


Simular aprovação e recusa por valor

No sandbox, o backend simula respostas da adquirente conforme o valor da transação.

Transações aprovadas

Use valores fora do intervalo R$ 5,01–5,99. Exemplo: R$ 10,00 (amount: 1000).

Transações negadas

Para simular recusa, use valor entre R$ 5,01 e R$ 5,99 (501 a 599 centavos).

ExemploamountResultado esperado
R$ 5,05505Erro 6015 e acquirerCode 4005
R$ 5,32532acquirerCode 4032

O acquirerCode em PaymentErrorResponse segue o padrão 40xx, em que xx são os centavos após R$ 5,00.

onError: { response in
    switch response.sdkError {
    case .payment(let paymentError):
        print("Código SDK:", paymentError.error.code.rawValue)
        print("Acquirer:", paymentError.acquirerCode ?? "—")
    default:
        break
    }
}

Para a lista completa de códigos simuláveis, consulte Ambiente de Sandbox.


Simular atualização de kernel

Disponível desde a versão 3.5.0.

Permite testar o comportamento do app durante uma atualização de kernel da Apple no iOS Simulator.

Gatilho

Pagamento com valor exatamente R$ 6,01 (amount: 601) no iOS Simulator, com environment: .sandbox.

Comportamento

  1. O SDK emite eventos kernelUpdateProgress(Int) de 0 a 100 via onEvent.
  2. A sequência dura aproximadamente 8 segundos.
  3. Após a simulação, o fluxo de pagamento continua normalmente.

let request = PaymentRequest(
    amount: 601,               // R$ 6,01 — dispara kernelUpdateProgress
    paymentType: .credit,
    installments: 1
)

TapOnPhone.pay(
    payRequest: request,
    onSuccess: { _ in },
    onError: { _ in },
    onEvent: { event in
        if case .kernelUpdateProgress(let progress) = event {
            print("Kernel update:", progress, "%")
        }
    }
)

Personalize a mensagem exibida na UI com TapOnPhoneTheme, mapeando o evento .kernelUpdateProgress(0). Detalhes em 5 - Customização.


Fluxos de teste

Fluxo de pagamento aprovado

setConfig(environment: .sandbox)
  → initialize()
  → pay(amount: 1000)
  → onSuccess com transactionId

Fluxo de recusa simulada

setConfig(environment: .sandbox)
  → initialize()
  → pay(amount: 505)        // R$ 5,05
  → onError: código 6015, acquirerCode 4005

Fluxo de kernel update simulado

setConfig(environment: .sandbox)
  → initialize()
  → pay(amount: 601)        // R$ 6,01
  → onEvent: kernelUpdateProgress 0…100 (~8 s)
  → fluxo de pagamento continua




Did this page help you?