Hey there, fellow JavaScript devs! Ready to supercharge your Adobe Commerce integration with webhooks? You're in the right place. Webhooks are like your app's personal news reporters, keeping it up-to-date with real-time events in Adobe Commerce. For user-facing integrations, they're absolute gold. Let's dive in and get those webhooks up and running!
Before we jump into the code, make sure you've got:
Got those? Awesome. Let's roll!
First things first, we need to authenticate and hit the right API endpoint. Here's a quick snippet to create a webhook:
const axios = require('axios'); async function createWebhook() { try { const response = await axios.post('https://your-store.com/rest/V1/webhooks', { name: 'My Awesome Webhook', endpoint: 'https://your-app.com/webhook', topics: ['order/created'] }, { headers: { 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } }); console.log('Webhook created:', response.data); } catch (error) { console.error('Error creating webhook:', error); } } createWebhook();
Easy peasy, right? Just replace YOUR_ACCESS_TOKEN
with your actual token, and you're good to go!
Adobe Commerce offers a smorgasbord of events you can subscribe to. Some popular ones include order/created
, customer/created
, and product/updated
. Here's how you can subscribe to multiple events:
const topics = ['order/created', 'customer/created', 'product/updated']; // Use this array in your createWebhook function
When Adobe Commerce sends a webhook, you'll get a juicy payload of data. Here's how you can handle it:
const express = require('express'); const app = express(); app.post('/webhook', express.json(), (req, res) => { const { topic, data } = req.body; switch(topic) { case 'order/created': handleNewOrder(data); break; case 'customer/created': welcomeNewCustomer(data); break; // Add more cases as needed } res.sendStatus(200); }); function handleNewOrder(data) { console.log('New order received:', data); // Your order processing logic here } function welcomeNewCustomer(data) { console.log('New customer signed up:', data); // Your customer welcome logic here } app.listen(3000, () => console.log('Webhook server running on port 3000'));
Security first! Always verify those webhook signatures:
const crypto = require('crypto'); function verifyWebhookSignature(payload, signature, secret) { const hmac = crypto.createHmac('sha256', secret); const digest = hmac.update(payload).digest('hex'); return crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(digest)); } app.post('/webhook', express.raw({type: 'application/json'}), (req, res) => { const signature = req.headers['x-adobe-signature']; if (!verifyWebhookSignature(req.body, signature, 'YOUR_WEBHOOK_SECRET')) { return res.sendStatus(401); } // Process the webhook... });
Sometimes things go wrong. No worries, we've got you covered:
const MAX_RETRIES = 3; async function processWebhookWithRetry(webhookData, retryCount = 0) { try { await processWebhook(webhookData); } catch (error) { if (retryCount < MAX_RETRIES) { console.log(`Retry attempt ${retryCount + 1}`); await new Promise(resolve => setTimeout(resolve, 1000 * Math.pow(2, retryCount))); await processWebhookWithRetry(webhookData, retryCount + 1); } else { console.error('Max retries reached. Webhook processing failed.'); } } }
Adobe Commerce provides tools to test your webhooks. But you can also simulate events like this:
function simulateWebhook(topic, data) { axios.post('http://localhost:3000/webhook', { topic, data }) .then(response => console.log('Webhook simulated successfully')) .catch(error => console.error('Simulation failed:', error)); } simulateWebhook('order/created', { orderId: '12345', total: 99.99 });
Keep an eye on those webhooks! Log everything:
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: 'webhook.log' }) ] }); app.post('/webhook', (req, res) => { logger.info('Webhook received', { body: req.body }); // Process webhook... });
And there you have it! You're now a webhook wizard for Adobe Commerce. Remember, webhooks are powerful tools, so use them wisely. Keep experimenting, keep coding, and most importantly, have fun with it!
Need more info? Check out the Adobe Commerce API docs for the latest and greatest.
Now go forth and webhook all the things! 🚀