51 lines
1.8 KiB
JavaScript
51 lines
1.8 KiB
JavaScript
const express = require("express");
|
|
const router = express.Router();
|
|
const { getOrderById } = require("../services/tray_service");
|
|
|
|
/**
|
|
* Webhook de notificações de pedidos da Tray
|
|
* URL: POST /webhooks/tray/orders
|
|
*/
|
|
router.post("/tray/orders", async (req, res) => {
|
|
try {
|
|
const payload = req.body;
|
|
console.log("📩 Webhook Tray recebido:", JSON.stringify(payload, null, 2));
|
|
|
|
// Aqui depende de como a Tray manda o payload:
|
|
// vamos supor que venha algo como:
|
|
// { order_id: 123, status: 'paid', ... }
|
|
|
|
const orderId = payload.order_id || payload.id || null;
|
|
|
|
if (!orderId) {
|
|
console.warn("Webhook Tray sem order_id identificável");
|
|
// Mesmo assim respondemos 200 pra não gerar reenvio infinito
|
|
return res.status(200).json({ received: true, ignored: true });
|
|
}
|
|
|
|
// (Opcional) Buscar detalhes do pedido na Tray pra ter certeza do status atual
|
|
try {
|
|
const orderData = await getOrderById(orderId);
|
|
console.log("🔍 Detalhes do pedido na Tray:", JSON.stringify(orderData, null, 2));
|
|
|
|
// Aqui você decide o que fazer:
|
|
// - Se status for pago -> mandar e-mail
|
|
// - Gravar log em arquivo
|
|
// - No futuro: salvar em banco, liberar curso, etc.
|
|
|
|
} catch (err) {
|
|
console.error("Erro ao buscar pedido na Tray:", err.response?.data || err.message);
|
|
// Mesmo assim, respondemos 200 pra não ficar em loop de reenvio
|
|
}
|
|
|
|
// Sempre responde 200 pra dizer "recebido"
|
|
return res.status(200).json({ received: true });
|
|
} catch (err) {
|
|
console.error("Erro no webhook /webhooks/tray/orders:", err);
|
|
// Em webhook, na maioria dos casos ainda é melhor responder 200
|
|
// para não causar reenvios em massa
|
|
return res.status(200).json({ received: true, error: "internal error" });
|
|
}
|
|
});
|
|
|
|
module.exports = router; |