Exiba o QR Code e acompanhe
Use os dados de pixPayment para mostrar o QR Code, o código copia e cola e o prazo, e confirme o pagamento pelo servidor.
A resposta da criação traz o bloco pixPayment:
{
"id": "8b727267-bf39-48a4-91ea-eb0780cb48a9",
"object": "payment_intent",
"amount": 1990,
"currency": "BRL",
"status": "Processing",
"pixPayment": {
"qrCodeEmv": "EMV_RETORNADO_PELA_API",
"qrCodeUrl": "",
"pixCopyPaste": "CODIGO_RETORNADO_PELA_API",
"expiresAt": "2026-09-08T15:30:00Z",
"endToEndId": "",
"status": "PENDING"
}
}| Campo | Uso no checkout |
|---|---|
qrCodeEmv | Gere a imagem do QR Code a partir do conteúdo completo, sem alterá-lo. |
pixCopyPaste | Ofereça o botão de copiar com o texto completo. |
expiresAt | Mostre o prazo no fuso do comprador. Depois dele, retire a oferta de pagamento. |
endToEndId | Identificador da transferência no Banco Central. Vem vazio na criação e é preenchido na confirmação. |
qrCodeUrl | Pode vir vazio. Não dependa dele: gere a imagem a partir de qrCodeEmv. |
import QRCode from 'qrcode';
const dataUrl = await QRCode.toDataURL(pixPayment.qrCodeEmv, { errorCorrectionLevel: 'M', margin: 1 });
document.querySelector('#pix-qrcode').src = dataUrl;Antes de exibir
Confira se pixPayment e qrCodeEmv vieram preenchidos. Se a cobrança voltar Processing sem esses dados, mantenha o pedido em processamento e consulte o mesmo PaymentIntent. Se persistir, fale com a equipe de integração. Não crie outra cobrança automaticamente: isso pode gerar duas cobranças para o mesmo pedido.
Confirme o pagamento
Conclua o pedido quando o servidor receber um payment_intent.succeeded com assinatura válida, ou quando a consulta devolver status: "Succeeded". Gerar o QR Code, o clique em "copiar" e o campo confirmedAt não comprovam pagamento.
curl "$DM_API_BASE/api/v1/paymentintents/8b727267-bf39-48a4-91ea-eb0780cb48a9" \
-H "Authorization: $DM_API_KEY"Expiração e pagamento tardio
Depois de expiresAt, a cobrança passa a Canceled na consulta. Não há webhook de expiração.
Mesmo depois do prazo, continue aceitando confirmações: um Pix pago no limite do prazo pode ser confirmado depois, e a cobrança muda de Canceled para Succeeded, com webhook payment_intent.succeeded. Trate esse caso no seu pedido, por exemplo reabrindo-o ou estornando o pagamento se o produto não estiver mais disponível.
Teste no sandbox
| Cenário | Como provocar |
|---|---|
| Pix pendente | Crie com um nome comum. |
| Pix confirmado | Crie com customer.name: "APPROVED", onde a simulação estiver habilitada. |
| Pix expirado | Crie com expiresInMinutes: 1 e não pague. |
Os códigos devolvidos no sandbox são ilustrativos e não podem ser pagos em um banco real.