# Como testar

> Testar sem ambiente de testes: valor baixo, idioma do checkout e erros provocados de propósito.

Fonte: https://app.thronecorporate.com/docs/testar

## Não existe ambiente de testes separado

> [!WARNING]
> As chaves `pk_test_` funcionam como as de produção. Um checkout de cartão pago cobra o cartão de verdade, um Pix pago cai na sua conta e um saque transfere dinheiro de verdade.

Criar uma cobrança ou um checkout não cobra nada. Só o pagamento cobra. Um checkout que ninguém paga vira `expired` em 24 horas, sem custo.

## Pagar com valor baixo

- **Pix**: a partir de R$ 1,00, pago com a sua própria conta.
- **Cartão**: um valor pouco acima do mínimo, com o seu próprio cartão. O mínimo varia com a moeda e com a cotação do dia; algumas adquirentes têm mínimo maior. Na dúvida, mande menos de propósito: a resposta diz o mínimo na sua moeda.
- **Estorno do teste**: não é feito pela API. Fale com o suporte do Throne.

Não faça testes de recusa em série, com vários cartões inventados no mesmo checkout. Isso parece teste de cartão e pode bloquear as tentativas daquele comprador.

## Ver o checkout em outro idioma

O checkout sai no idioma do país do comprador, identificado pelo IP. Na NovaCorp, na Eminence, na Apex, na ShadowBank e na Vortex, para ver como um comprador de outro país enxerga a página, abra o `checkout_url` da resposta com `?nl=` e o código do idioma:

```text
<checkout_url>?nl=de
```

Se o endereço já tiver `?`, use `&nl=de`. O formulário, os números e as telas de espera saem nesse idioma; a tela do próprio banco, quando ele pede verificação, segue o banco. Códigos aceitos: `en`, `pt`, `es`, `fr`, `de`, `it`, `nl`, `pl`, `sv`, `da`, `no`, `fi`, `cs`, `sk`, `ro`, `hu`, `el`, `tr`, `ru`, `uk`, `bg`, `hr`, `ja`, `ko`, `zh`, `ar`, `he`, `th`, `id` e `vi`.

Na Sterling e na Imperium o idioma segue só o IP. Para conferir, use uma conexão do país do comprador.

No Checkout Brasil, a página sai sempre em português, e o `?nl=` não muda isso.

## Ver o Checkout Brasil sem pagar

Abra no navegador o `checkout_url` da resposta do `POST /elements/checkout/br` para ver a página como o comprador vê: em português, com o campo CPF e com o botão e a moldura que você pediu em `appearance`. Nada é cobrado enquanto ninguém clica em pagar.

## Provocar erros de propósito

Todos os casos abaixo voltam sem criar nada e sem cobrar. Use para conferir se a sua integração mostra a mensagem certa e não fica repetindo a chamada.

| Para ver | Envie em `POST /elements/checkout` | Resposta |
|---|---|---|
| Valor abaixo do mínimo | `"amount_cents": 50, "currency": "usd"` | `422 invalid_amount`, com o mínimo na sua moeda |
| Valor acima do máximo | Um valor acima do `max_amount_cents` que `GET /elements/acquirers?currency=...` mostra, com o `acquirer` dessa adquirente | `422 invalid_amount`, com `max_amount_cents` e `alternatives` |
| Moeda fora da lista | `"currency": "xyz"` | `422 currency_not_supported` |
| Adquirente desconhecida | `"acquirer": "teste"` | `422 invalid_acquirer` |
| Adquirente não habilitada | `acquirer` com uma adquirente que não aparece em `GET /elements/acquirers` | `422 acquirer_not_enabled` |
| Nome ou e-mail do comprador faltando (ShadowBank) | `"acquirer": "shadowbank"` sem `customer`, com a ShadowBank habilitada na conta | `422 customer_required_for_shadowbank` |
| Nome ou e-mail do comprador faltando (Vortex) | `"acquirer": "vortex"` sem `customer`, com a Vortex habilitada na conta | `422 customer_required_for_vortex` |
| Falta da chave de idempotência | A chamada sem o header `Idempotency-Key` | `400 idempotency_key_required` |
| Chave de API errada | `Authorization: Bearer pk_x:sk_x` | `401 unauthorized` |
| Corpo trocado | A mesma `Idempotency-Key` de uma chamada anterior, com outro corpo | `422 idempotency_key_mismatch` |

No `POST /elements/checkout/br`, também sem custo:

| Para ver | Envie | Resposta |
|---|---|---|
| Campo que não existe no Checkout Brasil | `"one_click_from": "a1b2c3d4-e5f6-4789-abcd-ef0123456789"` | `422 field_not_supported` |
| Aparência fora da regra | `"appearance": { "button": { "text": "Pague R$ 9,90" } }` | `422 invalid_appearance`, com `field` |

E um caso que dá certo, para ver a repetição segura: mande a mesma criação duas vezes, com a mesma `Idempotency-Key` e o mesmo corpo. A segunda resposta é igual à primeira e traz o header `Idempotent-Replay: true`. Só um checkout existe.

Exemplo do valor abaixo do mínimo:

```bash
curl -X POST https://app.thronecorporate.com/api/v1/elements/checkout \
  -H "Authorization: Bearer $THRONE_PK:$THRONE_SK" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{ "amount_cents": 50, "currency": "usd" }'
```

```json
{ "error": "invalid_amount", "message": "Valor abaixo do mínimo aceito: $ 0,95." }
```

O valor do mínimo muda com a cotação do dia.

## Testar o webhook

- No painel, em [Webhooks](https://app.thronecorporate.com/painel/webhook-settings), o botão de teste envia um `test.ping` assinado, igual aos eventos de verdade.
- O histórico fica em [Entregas de webhook](https://app.thronecorporate.com/painel/webhook-deliveries), com o status que o seu servidor respondeu.
- Para ver um `transaction.paid` de verdade, pague um valor baixo. Confira a assinatura como em [Webhooks](/docs/webhooks#validar-a-assinatura).

## Conferir as chamadas no painel

No painel, em **Documentação da API**, a lista **Últimas chamadas da API** mostra as criações de cobrança e de checkout que chegaram ao endpoint, com sucesso ou com falha, com o status e, no cartão, o código de erro.

Nem toda resposta entra na lista. Os erros de autenticação (`401`), de permissão (`403 scope_required`), de limite de requisições (`429`) e os da `Idempotency-Key` que o Throne confere antes do endpoint (`400 idempotency_key_required`, `422 idempotency_key_mismatch`, `409 idempotency_key_processing` e `409 idempotency_key_race`) não aparecem. No Pix, os erros de validação do corpo também não. Por isso, três casos da tabela acima (sem `Idempotency-Key`, chave de API errada e corpo trocado) não aparecem no painel: confira esses pela resposta que o seu servidor recebeu.

## Próximo passo

Siga o [Checklist de verificação](/docs/checklist) antes de abrir as vendas.
