fiz uma api pra cancelara nota mais mando o pst ele da ok 200 mais nao cancela e nao retorna nada
app.post('/api/nfe/cancelar', async (req, res) => {
try {
const { cnpj, senha_pfx, chave, justificativa, nProt, tpAmb } = req.body;
if (!cnpj || !senha_pfx || !chave || !justificativa || !nProt || !tpAmb) {
return res.status(400).json({ erro: "Campos obrigatórios não informados." });
}
if (justificativa.length < 15) {
return res.status(400).json({ erro: "Justificativa deve ter no mínimo 15 caracteres." });
}
const cnpjLimpo = cnpj.replace(/\D/g, '');
const pfxPath = path.join(certDir, `${cnpjLimpo}.pfx`);
if (!fs.existsSync(pfxPath)) {
return res.status(404).json({ erro: "Certificado não encontrado." });
}
// 🔹 Extrai cUF da chave (2 primeiros dígitos)
const cUF = chave.substring(0, 2);
const UF = mapaUF[cUF];
if (!UF) {
return res.status(400).json({ erro: "UF inválida na chave da NFe." });
}
//console.log("BODY:", req.body);
//console.log("CHAVE:", chave);
const tools = new Tools(
{
mod: '55',
versao: '4.00',
tpAmb: Number(tpAmb),
cUF: Number(cUF),
UF: UF,
CNPJ: cnpjLimpo
},
{
pfx: fs.readFileSync(pfxPath),
senha: senha_pfx
}
);
const agora = new Date();
const dhEvento =
agora.getFullYear() + '-' +
String(agora.getMonth() + 1).padStart(2, '0') + '-' +
String(agora.getDate()).padStart(2, '0') + 'T' +
String(agora.getHours()).padStart(2, '0') + ':' +
String(agora.getMinutes()).padStart(2, '0') + ':' +
String(agora.getSeconds()).padStart(2, '0') +
'-03:00';
console.log("URL EVENTO:", tools.urls?.recepcaoEvento);
const retorno = await tools.sefazEvento({
chNFe: chave,
tpEvento: '110111',
nProt: nProt,
xJust: justificativa,
sequencial: 1
});
console.log("RETORNO EVENTO:", retorno);
return res.json({
status: "sucesso",
retorno_sefaz: retorno
});
} catch (error) {
console.error("Erro no cancelamento:", error);
return res.status(500).json({
erro: "Falha ao processar cancelamento",
detalhes: error.message || error
});
}
});