Pagar cobrança (SDK)
POST
/api/v1/bank/public/charge/{uuid}/payEndpoint público
Este endpoint é chamado pelo A55Pay SDK a partir do navegador do pagador. Não requer Bearer token — o UUID da cobrança atua como contexto de autorização. Seu backend cria a cobrança primeiro, então o SDK no frontend chama este endpoint.
Cabeçalhos da requisição
| Cabeçalho | Valor | Obrigatório |
|---|---|---|
Content-Type | application/json | Sim |
Parâmetros de caminho
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
uuid | string (UUID) | Sim | UUID da cobrança retornado por Criar cobrança |
Corpo da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
card_number | string | Sim | PAN do cartão |
card_name | string | Sim | Nome do titular do cartão |
card_expiry_month | string | Sim | Mês de validade MM |
card_expiry_year | string | Sim | Ano de validade YYYY |
card_cvv | string | Sim | Código de verificação do cartão |
payer_tax_id | string | Sim | Documento do pagador (CPF, RFC, RUT) |
device_info | object | Não | Fingerprint do navegador para 3DS (veja Criar cobrança) |
Campos da resposta
| Campo | Tipo | Descrição |
|---|---|---|
charge_uuid | string | Identificador da cobrança |
status | string | confirmed, pending (3DS necessário) ou error |
url_3ds | string | URL de redirecionamento para desafio 3DS (quando status: "pending") |
message | array/null | Detalhes do erro quando status: "error" |
Códigos de status HTTP
| Status | Descrição |
|---|---|
| 200 | Pagamento processado ou desafio 3DS iniciado |
| 400 | Dados do cartão inválidos ou campos obrigatórios ausentes |
| 404 | Cobrança não encontrada ou expirada |
| 409 | Cobrança já paga ou cancelada |
| 422 | Erro de validação (cartão inválido, expirado) |
| 429 | Limite de requisições excedido |
| 500 | Erro interno do servidor |
Exemplos de código
- cURL
- Python
- Node.js
curl -s -X POST "https://core-manager.a55.tech/api/v1/bank/public/charge/a1b2c3d4-e5f6-7890-abcd-ef1234567890/pay" \
-H "Content-Type: application/json" \
-d '{
"card_number": "4024007153763191",
"card_name": "MARIA SILVA",
"card_expiry_month": "12",
"card_expiry_year": "2030",
"card_cvv": "123",
"payer_tax_id": "123.456.789-09"
}'
import requests
charge_uuid = "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
try:
response = requests.post(
f"https://core-manager.a55.tech/api/v1/bank/public/charge/{charge_uuid}/pay",
json={
"card_number": "4024007153763191",
"card_name": "MARIA SILVA",
"card_expiry_month": "12",
"card_expiry_year": "2030",
"card_cvv": "123",
"payer_tax_id": "123.456.789-09",
},
headers={"Content-Type": "application/json"},
)
response.raise_for_status()
result = response.json()
if result["status"] == "pending":
print(f"3DS redirect: {result['url_3ds']}")
else:
print(f"Payment: {result['status']}")
except requests.exceptions.HTTPError as e:
print(f"HTTP {e.response.status_code}: {e.response.json()}")
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
const chargeUuid = "a1b2c3d4-e5f6-7890-abcd-ef1234567890";
try {
const response = await fetch(
`https://core-manager.a55.tech/api/v1/bank/public/charge/${chargeUuid}/pay`,
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
card_number: "4024007153763191",
card_name: "MARIA SILVA",
card_expiry_month: "12",
card_expiry_year: "2030",
card_cvv: "123",
payer_tax_id: "123.456.789-09",
}),
}
);
if (!response.ok) throw new Error(`HTTP ${response.status}: ${await response.text()}`);
const result = await response.json();
if (result.status === "pending") {
console.log(`3DS redirect: ${result.url_3ds}`);
} else {
console.log(`Payment: ${result.status}`);
}
} catch (error) {
console.error("Payment failed:", error.message);
}
Exemplo de resposta de erro
{
"charge_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "error",
"message": [
{
"code": "CARD_DECLINED",
"source": "acquirer",
"description": "Transaction declined by issuing bank"
}
]
}