Webhook Integration Automatisierung
Webhooks: Automatisierung zwischen Diensten
Webhooks sind HTTP-Callbacks, die automatisch ausgelöst werden, wenn ein Event eintritt. Statt regelmäßig nach Updates zu fragen (Polling), werden Sie aktiv benachrichtigt.
Wie funktionieren Webhooks?
- Sie registrieren eine URL bei einem Dienst
- Bei einem Event sendet der Dienst einen HTTP POST an Ihre URL
- Ihr Server verarbeitet die Daten
Webhook-Empfänger (PHP)
<?php
// webhook.php
// Nur POST erlauben
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
http_response_code(405);
exit('Method not allowed');
}
// JSON-Payload lesen
$payload = file_get_contents('php://input');
$data = json_decode($payload, true);
// Logging
file_put_contents('webhook.log', date('Y-m-d H:i:s') . ': ' . $payload . "\n", FILE_APPEND);
// Verarbeitung je nach Event
if (isset($data['event'])) {
switch ($data['event']) {
case 'payment.completed':
processPayment($data);
break;
case 'user.created':
sendWelcomeEmail($data);
break;
}
}
// Erfolg bestätigen
http_response_code(200);
echo json_encode(['status' => 'ok']);
?>
Webhook-Empfänger (Node.js)
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook', (req, res) => {
const event = req.body;
console.log('Webhook received:', event);
// Event verarbeiten
switch (event.type) {
case 'order.created':
handleNewOrder(event.data);
break;
case 'order.shipped':
sendShippingNotification(event.data);
break;
}
res.status(200).json({ received: true });
});
app.listen(3000);
Webhook-Sender
<?php
function sendWebhook($url, $data) {
$payload = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-Webhook-Signature: ' . hash_hmac('sha256', $payload, 'secret')
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $httpCode === 200;
}
// Beispiel
sendWebhook('https://example.com/webhook', [
'event' => 'order.created',
'data' => ['order_id' => 123, 'total' => 99.99]
]);
?>
Signatur-Verifizierung
<?php
// Webhook mit Signatur verifizieren
$secret = 'mein_webhook_secret';
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $payload, $secret);
if (!hash_equals($expected, $signature)) {
http_response_code(401);
exit('Invalid signature');
}
// Signatur gültig - weiter verarbeiten
?>
Retry-Logik
async function sendWithRetry(url, data, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
const response = await fetch(url, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
if (response.ok) return true;
} catch (error) {
console.log(`Attempt ${i + 1} failed`);
}
// Exponential Backoff
await new Promise(r => setTimeout(r, Math.pow(2, i) * 1000));
}
return false;
}
Typische Anwendungen
- 💳 Zahlungsanbieter (Stripe, PayPal)
- 📧 E-Mail-Dienste (Bounces, Opens)
- 🔔 Chat-Notifications (Slack, Discord)
- 🚀 CI/CD (GitHub, GitLab)
- 📦 Versand-Updates
Best Practices
- Signatur immer verifizieren
- Schnell antworten (< 5 Sek)
- Async verarbeiten (Queue)
- Idempotent implementieren
- Logging für Debugging
Weitere Hilfe
- 🔧 Webhook.site - Testen
- 📧 E-Mail: support@enjyn.de