Handling Webhook Events
Sample code for handling webhook events in Node.js.
Handling Events (Node.js)
const crypto = require('crypto');
const SECRET_KEY = ""; //Your secret key
// Handle webhook event
const handleEvent = (req, res) => {
try{
res.sendStatus(200);
let webhook_signature = req.headers['X-Terminal-Signature']; //retrieve the request signature
let {body} = req; // Retrieve the request's body
let request_validation = verifyWebhookRequest(webhook_signature, SECRET_KEY, body); //Validate webhook request
if(request_validation.status){
let {data, event} = body; //retrieve event type and data payload
switch(event){
case "shipment.created":
//Handle successful shipment creation event
break;
case "address.updated":
//Handle successful address update event
break;
default:
//Handle unknown event received
}
}else{
//request is not valid API webhook
}
}catch(e){
console.log("Error occurred - %O", e)
}
}
/**
* Verifies validity of webhook request.
* @params - signature - Signature hash received via webhook.
* @params - secret_key - API secret key.
* @params - body - Request payload received via webhook.
*/
const verifyWebhookRequest = (signature, secret_key, body={}) => {
try{
let manual_hash_signature = crypto.createHmac('sha512', secret_key).update(JSON.stringify(body)).digest('hex'); //regenerate hash using secret key and webhook payload
let request_valid = (signature === manual_hash_signature); //verify signature from webhook matches manual hash
let valid_message = (request_valid) ? "Webhook request is valid" : "Invalid webhook request received";
return {
status: request_valid,
message: valid_message
}
}catch(e){
console.log("An error occurred %O", e);
return {
status: false,
message: "Unable to verify request"
}
}
}Last updated
Was this helpful?