Implementation
Code examples and best practices for implementing webhook handlers.
Framework Examples
Node.js (Express)
import express from 'express';
import crypto from 'crypto';
const app = express();
// Capture raw body for signature verification
app.use(express.json({
verify: (req: any, _res, buf) => { req.rawBody = buf; }
}));
function isValidSignature(rawBody: Buffer, signature: string, secret: string) {
const computed = crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
return (
computed.length === (signature || '').length &&
crypto.timingSafeEqual(Buffer.from(computed, 'hex'), Buffer.from(signature || '', 'hex'))
);
}
app.post('/webhooks', async (req: any, res) => {
const signature = req.header('X-Zellify-Signature') || '';
const secret = process.env.ZELLIFY_WEBHOOK_SECRET || '';
if (!isValidSignature(req.rawBody, signature, secret)) {
return res.status(401).json({ error: 'Invalid signature' });
}
const event = req.body;
// Acknowledge quickly
res.status(200).json({ received: true });
// Process asynchronously
process.nextTick(async () => {
try {
await WebhookHandler.processEvent(event);
} catch (err) {
console.error('Webhook processing error:', err);
}
});
});
app.listen(3000, () => console.log('Webhook server running on 3000'));Python (Flask)
PHP (Laravel-style controller)
Java (Spring Boot)
Go (net/http)
Last updated