Pular para o conteúdo
LeztyPay docs
Painel

Gatilhos

No ambiente de teste, quem decide o desfecho da cobrança são os dois últimos dígitos de amount. Você escolhe o cenário escolhendo o valor.

Isso vale apenas com chave sk_test_. Em produção o valor é só o valor.

A tabela

amount termina em O que acontece
qualquer outro Paga sozinha poucos segundos depois da criação.
01 Nunca paga. Expira em pix.expires_at.
02 A criação falha por tempo esgotado no processador: 503 acquirer_timeout.
03 A criação é recusada pelo processador: 503 acquirer_rejected.
04 Paga e entrega o mesmo evento duas vezes.
06 Paga e recebe uma contestação cerca de 10 segundos depois.
07 Paga sem entregar webhook.
08 Entrega transaction.expired e depois transaction.paid, fora de ordem.

Exemplos: R$ 100,00 são 10000, termina em 00, e paga sozinha. R$ 100,01 são 10001, termina em 01, e expira. R$ 55,04 são 5504, termina em 04, e entrega o evento duas vezes.

Esses gatilhos são contrato público: mudar o efeito de um deles entra no changelog.

O que cada um testa

Caminho feliz (qualquer outro). O seu checkout inteiro, do QR ao transaction.paid.

01, expiração. O contador da tela, o transaction.expired e, principalmente, o seu sistema não apagar o pedido ao receber esse evento. Pagamento tardio existe (Expiração).

02 e 03, falha na criação. Os dois voltam 503 e a cobrança fica sem QR. Teste que a sua tela de checkout mostra erro em vez de ficar em branco, e que a sua retentativa usa uma Idempotency-Key nova. Repetir com a mesma chave devolve o mesmo 503 (Idempotência).

04, evento duplicado. O mesmo evento, com o mesmo identificador, chega duas vezes. Se o seu receptor não deduplicar, você entrega o produto duas vezes ou credita o cliente em dobro. É o teste mais importante desta lista.

06, contestação. A cobrança paga volta contestada e o valor sai do seu saldo. Teste o que o seu sistema faz com transaction.chargeback numa venda já entregue.

07, pago sem webhook. Simula a entrega que nunca chegou, seja por queda do seu servidor, seja por falha de rede. A cobrança está paid e o seu banco de dados não sabe. É o cenário que prova que você precisa de uma rotina de reconciliação por consulta, e não só do webhook.

08, fora de ordem. transaction.expired chega antes de transaction.paid. Um receptor que aplica eventos cegamente na ordem de chegada marca a venda como perdida e nunca mais a recupera.

Como usar isso de verdade

Rode os oito no seu ambiente de testes automatizados, não à mão. São oito valores e oito asserções sobre o estado final do seu banco, e eles cobrem quase todo o suporte que você teria depois.

Os gatilhos não mudam nada além do desfecho: validação, erros, limites e assinatura de webhook continuam iguais aos de produção.

Próximo passo

Saques, para fechar o ciclo do dinheiro.

Referência: Cria uma cobrança PIX e Consulta uma cobrança.