Cartões de Teste
Quick Reference
WhatComportamento e simulação de cartões de teste em sandbox
WhyTeste todos os cenários de pagamento — aprovação, recusa, timeout — sem dinheiro real
Reading Time5 min
DifficultyBeginner
PrerequisitesAutenticação → Ambientes
Por que cartões de teste importam
| Sem testes sistemáticos | Com cartões de teste da A55 |
|---|---|
| Você descobre recusas em produção, com clientes reais | Você simula todos os resultados em sandbox antes do go-live |
| Cenários específicos (timeout, cartão expirado, cartão bloqueado) ficam sem teste | Uma mudança de dígito exercita qualquer cenário |
| QA leva dias de testes manuais com cartões | Teste em lote 9 cenários em uma única execução de script |
| Você não sabe como sua UI lida com falhas | Você vê exatamente como suas telas de erro se comportam |
Como o simulador funciona
Em sandbox, apenas o último dígito do número do cartão controla o resultado da transação. Os primeiros 15 dígitos podem ser quaisquer.
Regras:
- Use qualquer número de cartão plausível com 16 dígitos — apenas o último dígito importa.
- CVV: quaisquer 3 dígitos (ex.:
123). - Validade: qualquer data futura no formato
MM/AAAA(ex.:12/2030).
Resultados por último dígito
| Último dígito | Status | Código de retorno | Mensagem | Caso de uso |
|---|---|---|---|---|
| 0, 1, 4 | Autorizado | 4 ou 6 | Operação concluída com sucesso | Caminho feliz — teste pagamentos bem-sucedidos |
| 2 | Não autorizado | 05 | Não autorizado | Recusa genérica — teste tratamento de erros |
| 3 | Não autorizado | 57 | Cartão expirado | Teste a UX de cartão expirado |
| 5 | Não autorizado | 78 | Cartão bloqueado | Teste cartão bloqueado/sinalizado por fraude |
| 6 | Não autorizado | 99 | Timeout | Teste tratamento de timeout e retentativas |
| 7 | Não autorizado | 77 | Cartão cancelado | Teste a UX de cartão cancelado |
| 8 | Não autorizado | 70 | Problemas com cartão de crédito | Teste erro genérico de cartão |
| 9 | Aleatório | 4–99 | Sucesso ou timeout (aleatório) | Teste de caos — verifique a resiliência |
Cartões de referência rápida
Use estes números prontos — altere apenas o último dígito:
| Cenário | Número do cartão |
|---|---|
| Confirmado | 4024 0071 5376 3191 |
| Recusado | 4024 0071 5376 3192 |
| Expirado | 4024 0071 5376 3193 |
| Bloqueado | 4024 0071 5376 3195 |
| Timeout | 4024 0071 5376 3196 |
Passo a passo: teste cada cenário
1. Teste um pagamento bem-sucedido
- cURL
- Python
- JavaScript
curl -s -X POST https://core-manager.a55.tech/api/v1/bank/wallet/charge/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"wallet_uuid": "YOUR_WALLET_UUID",
"merchant_id": "YOUR_MERCHANT_UUID",
"payer_name": "Test User",
"payer_email": "test@example.com",
"payer_tax_id": "12345678909",
"payer_cell_phone": "+5511999999999",
"installment_value": 100.00,
"currency": "BRL",
"due_date": "2026-12-31",
"description": "Sandbox test — confirmed",
"type_charge": "credit_card",
"card": {
"number": "4024007153763191",
"holder_name": "TEST USER",
"expiration_month": "12",
"expiration_year": "2030",
"cvv": "123"
}
}'
import requests
API_BASE = "https://core-manager.a55.tech/api/v1"
def create_test_charge(token: str, card_number: str, description: str):
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
}
payload = {
"wallet_uuid": "YOUR_WALLET_UUID",
"merchant_id": "YOUR_MERCHANT_UUID",
"payer_name": "Test User",
"payer_email": "test@example.com",
"payer_tax_id": "12345678909",
"payer_cell_phone": "+5511999999999",
"installment_value": 100.00,
"currency": "BRL",
"due_date": "2026-12-31",
"description": description,
"type_charge": "credit_card",
"card": {
"number": card_number,
"holder_name": "TEST USER",
"expiration_month": "12",
"expiration_year": "2030",
"cvv": "123",
},
}
resp = requests.post(f"{API_BASE}/bank/wallet/charge/", json=payload, headers=headers)
return resp.json()
result = create_test_charge(token, "4024007153763191", "Sandbox test — confirmed")
print(f"Status: {result['status']}")
const API_BASE = "https://core-manager.a55.tech/api/v1";
async function createTestCharge(token, cardNumber, description) {
const resp = await fetch(`${API_BASE}/bank/wallet/charge/`, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
wallet_uuid: "YOUR_WALLET_UUID",
merchant_id: "YOUR_MERCHANT_UUID",
payer_name: "Test User",
payer_email: "test@example.com",
payer_tax_id: "12345678909",
payer_cell_phone: "+5511999999999",
installment_value: 100.0,
currency: "BRL",
due_date: "2026-12-31",
description,
type_charge: "credit_card",
card: {
number: cardNumber,
holder_name: "TEST USER",
expiration_month: "12",
expiration_year: "2030",
cvv: "123",
},
}),
});
return resp.json();
}
const result = await createTestCharge(token, "4024007153763191", "Sandbox test — confirmed");
console.log(`Status: ${result.status}`);
2. Teste um pagamento recusado
Altere apenas o último dígito para 2:
Cartão: 4024007153763192 → Código de retorno 05 (Não autorizado)
Sua aplicação deve exibir uma mensagem de erro adequada e permitir que o usuário tente novamente com outro cartão.
3. Teste um timeout
Altere o último dígito para 6:
Cartão: 4024007153763196 → Código de retorno 99 (Timeout)
Sua aplicação deve implementar lógica de retentativa com backoff exponencial e exibir um estado "aguarde".
Teste em lote de todos os cenários
Execute todos os 9 cenários em um único script para validar seu tratamento de erros.
- Python
- JavaScript
scenarios = [
("4024007153763190", "Confirmado (0)"),
("4024007153763191", "Confirmado (1)"),
("4024007153763192", "Recusado (2)"),
("4024007153763193", "Cartão expirado (3)"),
("4024007153763194", "Confirmado (4)"),
("4024007153763195", "Cartão bloqueado (5)"),
("4024007153763196", "Timeout (6)"),
("4024007153763197", "Cartão cancelado (7)"),
("4024007153763198", "Problemas no cartão (8)"),
("4024007153763199", "Aleatório (9)"),
]
for card_number, label in scenarios:
result = create_test_charge(token, card_number, f"Teste em lote — {label}")
print(f"{label:25s} → status={result.get('status', 'N/A'):15s} code={result.get('return_code', 'N/A')}")
const scenarios = [
["4024007153763190", "Confirmado (0)"],
["4024007153763191", "Confirmado (1)"],
["4024007153763192", "Recusado (2)"],
["4024007153763193", "Cartão expirado (3)"],
["4024007153763194", "Confirmado (4)"],
["4024007153763195", "Cartão bloqueado (5)"],
["4024007153763196", "Timeout (6)"],
["4024007153763197", "Cartão cancelado (7)"],
["4024007153763198", "Problemas no cartão (8)"],
["4024007153763199", "Aleatório (9)"],
];
for (const [cardNumber, label] of scenarios) {
const result = await createTestCharge(token, cardNumber, `Teste em lote — ${label}`);
console.log(`${label.padEnd(25)} → status=${(result.status || "N/A").padEnd(15)} code=${result.return_code || "N/A"}`);
}
Limitações importantes
Sandbox ≠ comportamento de produção
- Os códigos de retorno e mensagens do sandbox são simulados. As respostas em produção vêm de emissores e bandeiras reais — os códigos e mensagens serão diferentes.
- Nunca use números de cartão reais em sandbox. O simulador sobrescreve os resultados com base no último dígito, independentemente da validade do PAN.
- Se o seu gateway exige um formato de cartão específico (ex.: prefixo BIN), mantenha o último dígito conforme a tabela acima e ajuste os demais dígitos para atender ao gateway.
Fluxos suportados em sandbox
O simulador suporta autorização, captura (total e parcial), cancelamento e consulta de status. Todos seguem as mesmas regras do último dígito.