Signature Verification
Signature format
X-AstraPay-Signature: t=1711900000,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bdVerification steps
Code examples
const crypto = require("crypto");
function verifyWebhookSignature(rawBody, signatureHeader, secret) {
const parts = Object.fromEntries(
signatureHeader.split(",").map((p) => p.split("="))
);
const timestamp = parts["t"];
const signature = parts["v1"];
const expected = crypto
.createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
return crypto.timingSafeEqual(
Buffer.from(signature, "hex"),
Buffer.from(expected, "hex")
);
}
// Express route example
app.post("/webhooks/astrapay", express.raw({ type: "application/json" }), (req, res) => {
const sig = req.headers["x-astrapay-signature"];
if (!verifyWebhookSignature(req.body.toString(), sig, process.env.WEBHOOK_SECRET)) {
return res.status(401).send("Invalid signature");
}
const event = JSON.parse(req.body.toString());
if (event.event === "payment.completed") {
// Fulfill order using event.data
}
res.sendStatus(200);
});Last updated