Author Image

walysonpatric

Apr 13, 2024

Confirmação de Pagamento via Pix

PIXconfirmaçãowebhookconsultacobrançaAPIintegração

Oi, pra confirmar se o pix foi pago seria algo assim? (não sei muito sobre isso, to aprendendo e usei o GPT pra criar o código.)

app.post('/webhook(/pix)?', async (req, res) => {

try {
// Consultar a cobrança usando o txid
const response = await axios.get(/v2/cob/:txid, {
headers: {
Authorization: 'Bearer' + process.env.GN_CLIENT_ID // Substitua pelo token de autorização correto
}
});

// Verificar o status da cobrança na resposta
if (response.status === 200 && response.data.status === 'CONCLUIDA') {

// Enviar o código de ativação para o Supabase
const { data: insertedData, error } = await supabaseClient
.from('dominios_permitidos')
.insert([{ code: generatedCode }]); // Acesse o código gerado na rota '/api/key'

// Enviar o código de ativação junto com a resposta
return res.status(200).json({ message: 'Webhook recebido com sucesso.', code: generatedCode });
} else {
// Se a cobrança não estiver concluída, retorne uma mensagem de erro
return res.status(400).json({ error: 'Cobrança não concluída.' });
}
} catch (error) {
console.error('Erro ao consultar a cobrança:', error.message);
return res.status(500).json({ error: 'Erro ao consultar a cobrança.' });
}

});

Respostas (4):
Avatar discord do usuario rubenskuhl

rubenskuhl

13/04/2024

Tem 3 jeitos de checar se o Pix foi pago:
1) Webhook (e é o recomendado)
2) GET de /cob/:txid, ver se há objeto pix (não é recomendado)
3) GET de /pix?inicio=fim=txid= (não é recomendado, mas é uma boa contingência para perda de webhook)

Avatar discord do usuario walysonpatric

walysonpatric

15/04/2024

Coloquei assim mas só funciona no localhost a confirmação de PIX (http://localhost:8000/cob/a7689c1ff5b64eeca8695e2e58c30007), no site da vercel da página não encontrada.

Já coloquei as variáveis no site e estou usando o certificado p12, o pem da erro até no localhost.

Teria que colocar algum comando no arquivo next.config.js ou vercel.json?

// Rota para consultar cobrança por txid
router.get('/cob/:txid', async (req, res) => {
const txid = req.params.txid;

try {
const reqGN = await GNRequest({
clientID: process.env.GN_CLIENT_ID,
clientSecret: process.env.GN_CLIENT_SECRET
});

// Consultar a cobrança usando o txid
const response = await reqGN.get(https://pix.api.efipay.com.br/v2/cob/${txid});

// Verificar se há um objeto PIX na resposta
if (response.status === 200 && response.data.pix) {

// Enviar o código de ativação junto com a resposta
return res.status(200).json({ message: 'PIX confirmado com sucesso.' });
} else {
// O PIX não foi pago ou não encontrado
return res.status(400).json({ error: 'PIX não encontrado ou não foi pago.' });
}
} catch (error) {
console.error('Erro ao consultar a cobrança:', error.message);
return res.status(500).json({ error: 'Erro ao consultar a cobrança.' });
}
});

Avatar discord do usuario guilherme_efi

guilherme_efi

15/04/2024

Bom dia, @walysonpatric. Parece que o problema está relacionado ao seu ambiente, onde aparentemente não está encontrando o caminho para o certificado.

Avatar discord do usuario walysonpatric

walysonpatric

15/04/2024

Coloquei assim no arquivo vercel.json e funcionou a confirmação do PIX

{
"version": 2,
"builds": [
{
"src": "api/app.js",
"use": "@vercel/node"
}
],
"routes": [
{
"src": "/cob/:txid",
"dest": "/api/app.js"
},
{
"src": "/(.)",
"dest": "/api/app.js"
}
]
}