Criar um cliente e cobrar no PIX
Nesta recipe
- Aponte para o sandbox
- Cadastre o cliente
- Crie a cobrança PIX
- Use o id e o uuid
Checkout embutido (ninepay.js)
Coloque o pagamento de uma fatura dentro da sua página, com o seu botão de pagar e o iframe da NinePay para cartão, PIX e boleto.
6 passos
Abrir recipe: Checkout embutido (ninepay.js)Cobrança no cartão de crédito
Gere um card hash com um cartão de teste do sandbox, cobre no cartão em parcelas e confira o status.
4 passos
Abrir recipe: Cobrança no cartão de créditoCriar um cliente e cobrar no PIX
Cadastre o cliente com POST /customers e gere uma cobrança PIX para ele com POST /payments.
4 passos
Abrir recipe: Criar um cliente e cobrar no PIXCriar plano e assinatura recorrente
Crie um plano mensal, assine um cliente nele e mande o cliente para o checkout ativar a assinatura.
3 passos
Abrir recipe: Criar plano e assinatura recorrenteEstornar um pagamento
Devolva ao cliente um pagamento pago no cartão ou no PIX e acompanhe o reembolso até ser concluído.
3 passos
Abrir recipe: Estornar um pagamentoReceber e validar webhooks
Receba os eventos da NinePay, responda rápido, valide a assinatura, ignore entregas repetidas e confirme o pagamento na API antes de liberar o acesso.
6 passos
Abrir recipe: Receber e validar webhooks
Checkout embutido (ninepay.js)
Coloque o pagamento de uma fatura dentro da sua página, com o seu botão de pagar e o iframe da NinePay para cartão, PIX e boleto.
Pressione Enter para destacar o código deste passo1. Crie a fatura no servidor
No seu servidor, com o token da API, crie a cobrança em aberto com
open: truee os métodos que o iframe pode oferecer. Nada é cobrado na criação. Mande para a página só opayment.uuidda resposta; o token nunca vai para o navegador.Shellcurl -X POST https://api.sandbox.cefispay.com.br/api/v1/payments \ -H "Authorization: Bearer $NINEPAY_TOKEN" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{ "customer": { "id": 123 }, "method": "credit", "open": true, "allowed_methods": ["credit", "pix", "billet"], "value": 5000, "due_date": "2026-11-10" }'Antes, cadastre no dashboard (Integrações → Checkout embutido) o endereço do site que vai abrir o checkout; sem ele, o navegador recusa o iframe.
2. Carregue o ninepay.js
Carregue o script sempre de
https://checkout.ninepay.com.br/js/v1/ninepay.js, nunca de uma cópia. Para o sandbox, passe a origem do ambiente emNinepay({ origin }). O CSP da página precisa liberarhttps://checkout.ninepay.com.bremscript-srceframe-src.3. Monte o elemento
ninepay.elementsrecebe ouuidda fatura (e, se quiser,appearancepara combinar com a sua página).elements.create('payment')cria o iframe com os métodos da fatura, emounto coloca no lugar.4. Habilite o botão
O botão de pagar é da sua página. O evento
changeavisa quando os campos do método escolhido estão completos.5. Valide e pague
elements.submit()valida e mostra os erros no iframe, sem enviar. Depois,ninepay.confirmPayment({ elements })paga e sempre resolve, com{ payment }ou{ error }. No sandbox, teste com os cartões de teste.6. Acompanhe o pagamento
O evento
paidchega quando o pagamento é feito nesta tela, inclusive o PIX ou o boleto pagos depois. Use para atualizar a tela; libere o acesso só pelo webhook, confirmando comGET /payments/{id}.
<div id="pagamento"></div>
<button id="pagar" disabled>Pagar</button>
<script src="https://checkout.ninepay.com.br/js/v1/ninepay.js"></script>
<script>
const ninepay = Ninepay()
const elements = ninepay.elements({
payment: '<uuid da fatura>', // payment.uuid, vindo do seu servidor
})
const pagamento = elements.create('payment', { layout: 'tabs' })
pagamento.mount('#pagamento')
const pagar = document.getElementById('pagar')
pagamento.on('change', event => {
pagar.disabled = !event.complete
})
pagar.addEventListener('click', async () => {
pagar.disabled = true
const { error: invalido } = await elements.submit() // valida, sem enviar
if (invalido) {
pagar.disabled = false
return
}
const { error, payment } = await ninepay.confirmPayment({ elements })
if (error) {
pagar.disabled = false // a recusa já aparece no iframe
return
}
// payment.status: 'succeeded' (cartão aprovado) ou 'requires_action' (QR do PIX ou boleto na tela)
})
pagamento.on('paid', () => {
// Atualize a tela; o acesso se libera pelo webhook
})
</script>