Express.js Handler
Codeimport express from "express"; import { SaligPay } from "saligpay-node"; const app = express(); const saligpay = new SaligPay({ clientId: process.env.SALIGPAY_CLIENT_ID, clientSecret: process.env.SALIGPAY_CLIENT_SECRET, }); // Raw body parser for signature verification (if needed in future) app.use("/webhooks/saligpay", express.raw({ type: "application/json" })); app.post("/webhooks/saligpay", async (req, res) => { await saligpay.webhooks.listen(req, res, async (payload) => { console.log("Webhook received:", payload); switch (payload.status) { case "COMPLETED": // Update your database await db.orders.update(payload.externalId, { status: "PAID", paidAt: new Date(), }); break; case "FAILED": await db.orders.update(payload.externalId, { status: "FAILED", }); break; case "PENDING": console.log("Payment pending for:", payload.externalId); break; default: console.log("Unknown status:", payload.status); } }); }); app.listen(3000, () => { console.log("Server running on port 3000"); });
Fastify Handler
Codeimport Fastify from "fastify"; import { SaligPay } from "saligpay-node"; const fastify = Fastify(); const saligpay = new SaligPay({ clientId: process.env.SALIGPAY_CLIENT_ID, clientSecret: process.env.SALIGPAY_CLIENT_SECRET, }); fastify.post("/webhooks/saligpay", async (request, reply) => { try { const payload = saligpay.webhooks.constructEvent(request.body); // Process webhook console.log("Payment:", payload.externalId, payload.status); return reply.send({ received: true }); } catch (error) { return reply.code(400).send({ error: "Invalid webhook" }); } }); fastify.listen({ port: 3000 });
Manual Webhook Processing
Code// Process webhook manually const payload = saligpay.webhooks.constructEvent(req.body); // Access webhook data console.log("External ID:", payload.externalId); console.log("Amount:", payload.amount / 100, "PHP"); console.log("Status:", payload.status); console.log("Payment Method:", payload.paymentMethod); console.log("Contact:", payload.contact); console.log("Metadata:", payload.metadata);
Webhook Payload Structure
Codeinterface SaligPayWebhookPayload { id?: string; externalId: string; amount: number; // in centavos status: "COMPLETED" | "FAILED" | "PENDING" | "CANCELLED"; paymentMethod: { id: string; type: string; }; contact?: { name: string; email: string; contact?: string; }; metadata?: Record<string, unknown>; createdAt?: string; updatedAt?: string; }
Last modified on
