checkoutUrl.
Criando uma cobrança
Resposta
Guarde o
postbackSecret. Ele é retornado apenas na criação e serve
para validar a assinatura dos webhooks (postbackUrl) desta cobrança.
Veja Webhooks.Os itens
Cada item temname, quantity e unitAmountInCents. O total é a soma de
quantity × unitAmountInCents de todos os itens, e é renderizado no checkout como uma linha
de pedido:
items e enviar apenas amountInCents (cobrança sem detalhamento).
Campos da requisição
Vencimento do boleto
Quando o cliente paga a cobrança com boleto, o prazo de vencimento é resolvido nesta ordem:- O campo
dueInDaysenviado na chamada que gera o boleto (só existe para quem monta o próprio checkout). - O campo
boletoDueInDaysda cobrança, enviado noPOST /v1/charges. - O prazo configurado no produto (não se aplica à cobrança avulsa, que não tem produto).
- O padrão da loja, em Configurações da loja → Vencimento padrão dos boletos.
- 1 dia, quando nada foi configurado.
Use
boletoDueInDays se o seu cliente paga no checkout hospedado. O
checkout roda no navegador do comprador e não conhece o prazo que o seu
sistema prometeu — gravá-lo na cobrança é o que garante o vencimento certo.
Uma vez enviado, mudar a configuração da loja ou do produto no painel não
reescreve o que você pediu. O valor aceito vai de 1 a 60 dias.Pagamento transparente
Com o pagamento transparente, o comprador paga sem sair do seu site: você recebe o PIX (copia-e-cola e QR Code), o boleto (linha digitável e PDF) ou o resultado do cartão direto na resposta da API, em vez de redirecionar para acheckoutUrl.
O gateway de cada método é decidido pela Gravity Play, pela mesma regra do
checkout hospedado. Taxa da plataforma, split, parcelamento, e-mails e
webhooks são exatamente os mesmos.
1. Consulte o que a loja aceita
card.input diz como o cartão deve chegar:
A tabela de parcelas só vem quando você manda
amountInCents (sem ele,
installments é null). Esta rota também serve para validar a chave ao
salvá-la no seu sistema: 200 é chave boa, 401 é chave inválida e 403 é chave
sem o escopo charges:read.
2. Crie a cobrança e o pagamento numa chamada
Mande o campopayment no POST /v1/charges:
postbackSecret) e o pagamento:
pix.qrCodeBase64é um PNG em base64 (sem o prefixodata:), gerado a partir do copia-e-cola: renderize com<img src="data:image/png;base64,...">. Ele sai igual em qualquer gateway.payment.idé o mesmodata.iddos webhookspayment.*.totalInCentsinclui o juro do parcelamento quando o comprador paga.statusdo pagamento:pending,paidoufailed.
O corpo inteiro é validado antes de criar qualquer coisa. Se faltar um
dado, inclusive um que só o gateway da loja exige, a resposta é 400 com o
param e nenhuma cobrança nasce. Criada a cobrança, a resposta é sempre
201: se o pagamento falhar (cartão recusado, método indisponível, gateway
fora), ela vem com paymentError no lugar de payment, e a cobrança segue
pending para uma nova tentativa.Idempotency-Key devolve a cobrança e o último
pagamento dela, sem postbackSecret e sem criar outro pagamento.
3. Nova tentativa numa cobrança que já existe
payment. A resposta é 201 com o pagamento novo,
ou 200 quando já existe um PIX (com mais de 5 minutos de validade) ou um
boleto (dentro do vencimento) pendente do mesmo método nesta cobrança: ele é
devolvido de novo, e a cobrança nunca fica com dois PIX ou dois boletos
pendentes. Outro método cria um pagamento novo.
Cartão
Na loja com cartão Asaas (card.input = raw), mande o cartão aberto, o IP
do comprador e o CEP e número do endereço:
paid, a cobrança vira paid e o
postbackUrl recebe payment.paid. Na loja Pagar.me ou Efí, gere o
token no navegador e mande card.token (no Pagar.me, threedsTransactionId
opcional para o 3DS). Mandar o formato errado para o gateway (cartão aberto no
Pagar.me ou na Efí, token no Asaas, qualquer cartão no Stripe) dá 422
card_input_not_supported.
O que cada gateway exige
O documento é CPF (11 dígitos) ou CNPJ (14 dígitos), com ou sem máscara, e
precisa ter o dígito verificador certo. O telefone precisa do DDD. O nome vai
ao gateway com até 64 caracteres.
Erros
A mensagem de recusa do gateway só chega quando ele a marca como segura para o
comprador; nos outros casos, a mensagem é genérica.
Consultando uma cobrança
status evolui assim:
Você não precisa ficar consultando: assim que o pagamento confirma, enviamos um
webhook. Para listar todas as vendas, use
GET /v1/payments — veja a aba
Referência da API.
