Webhooks empfangen und Signatur prüfen

Lektion 4 von 5 · ca. 3 Min.

Bei jedem echten Statuswechsel schickt dmp druckraum ein Ereignis status_changed an Ihre Webhook-URL — in der richtigen Reihenfolge je Auftrag.

Schritt für Schritt

  1. Nehmen Sie POST-Anfragen an Ihrer Webhook-URL an und lesen Sie den rohen Body.
  2. Prüfen Sie x-druck-s-timestamp (höchstens 5 Minuten alt) und x-druck-s-signature (v1=HMAC-SHA256(secret, timestamp + "." + body)).
  3. Entdoppeln Sie über x-druck-s-delivery.
  4. Antworten Sie mit 2xx. Andere Antworten werden mit Backoff bis zu 10-mal wiederholt; 400, 410 und 422 gelten als endgültig.

Beispiel-Ereignis

{"event":"status_changed","partnerRef":"bestellung-2026-0042","number":"091126-004",
 "status":"SHIPPED","occurredAt":"2026-11-09T10:00:00.000Z",
 "trackingNumber":"00340434…","specialDeliveryDate":null}

Signatur prüfen (Node.js)

import { createHmac, timingSafeEqual } from "node:crypto";
function valid(secret, rawBody, ts, sig) {
  if (!/^\d{9,11}$/.test(ts ?? "") || Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false;
  const expected = Buffer.from(`v1=${createHmac("sha256", secret).update(`${ts}.${rawBody}`).digest("hex")}`);
  const got = Buffer.from(sig ?? "");
  return expected.length === got.length && timingSafeEqual(expected, got);
}