Docs  /  Produktbild & Designer  /  Eigene Druckdatenprüfung

Eigene Druckdatenprüfung

Zuletzt aktualisiert: 12. November 2026

Der Produktdesigner prüft schon von sich aus Auflösung, Kontrast, Sicherheitsabstand, Überlappung und die Zahl der Druckfarben. Hat deine Produktion weitere Regeln, etwa „ein Logo muss mindestens 15 mm breit sein“ oder „auf Heißfolie keine Schrift unter 6 mm“, ergänzt du eigene Prüfungen: im Browser mit JavaScript oder auf deinem Server per Webhook.

Weg Wofür Grenze
Im Browser (registerDesignCheck) Sofortiger Hinweis am Feld, während dein Kunde gestaltet Lässt sich mit einer präparierten Anfrage umgehen
Auf dem Server (Webhook) Verbindliche Regeln, die keine Bestellung umgehen darf Wirkt nur, wenn dein Shop-Plugin die Preisprüfung erzwingt

Für eine Regel, die gelten muss, nimmst du den Webhook. Am besten kombinierst du beide: Der Browser zeigt den Hinweis sofort, der Server sichert ab.

Prüfung im Browser

Du meldest eine Prüfung über die JavaScript-Schnittstelle an:

Configento.registerDesignCheck('logo-mindestbreite', (ctx) =>
    ctx.placement && ctx.placement.widthMm < 15
        ? { level: 'block', message: 'Das Logo muss mindestens 15 mm breit sein.' }
        : null,
    { appliesTo: ['logo'] });
  • Der Name besteht aus Kleinbuchstaben, Ziffern und Bindestrichen.
  • appliesTo nennt die Internen Namen (ID) der Merkmale, für die die Prüfung gilt. Ohne appliesTo läuft sie für jeden eigenen Text und jedes eigene Bild.
  • registerDesignCheck gibt eine Funktion zurück, die die Prüfung wieder abmeldet.

Läuft dein Skript, bevor configento.js geladen ist, legst du die Prüfungen vorab an:

window.ConfigentoDesignChecks = {
    'logo-mindestbreite': [check, { appliesTo: ['logo'] }],
};

Was die Prüfung bekommt

Die Prüfung läuft bei jeder Änderung und bekommt ein Objekt ctx:

Feld Inhalt
characteristic id, key (Interner Name), type (customtext oder customimage), title
locale Sprache des Konfigurators, z. B. de_DE
zone widthMm, heightMm, dazu background und safeMm, wenn gesetzt
box Die Fläche, die Text oder Bild tatsächlich belegt, in mm von links oben; null, wenn nichts zu sehen ist
values Die übrigen Merkmale nach Internem Namen, so wie Formeln sie sehen: eine Auswahl liefert ihren Wert, Zahlen bleiben Zahlen
text, lines Beim eigenen Text: der Text und seine Zeilen
design Beim eigenen Text: font, sizeMm, drawnSizeMm, color, colorName, align, valign und finish, wenn eine Veredelung gilt
image Beim eigenen Bild: file, type, width, height in Pixeln, vector bei SVG
placement Beim eigenen Bild: widthMm, heightMm, dpi, rotation, flipX, centerXMm, centerYMm

Was die Prüfung antwortet

  • null: alles in Ordnung.
  • { level: 'warn', message: '…' }: Der Hinweis steht am Feld, bestellt werden kann trotzdem.
  • { level: 'block', message: '…' }: Der Hinweis steht am Feld, und der Konfigurator hält den Warenkorb zurück.
  • Eine Liste solcher Ergebnisse, wenn mehrere Dinge nicht passen.

Den Hinweis gestaltest du über die Klasse .cfg-design__check; data-configento-level sagt, ob es eine Warnung oder eine Sperre ist, data-configento-check nennt den Namen deiner Prüfung. Siehe Design anpassen. Wirft eine Prüfung einen Fehler, ignoriert der Konfigurator sie und schreibt den Fehler in die Browser-Konsole.

Prüfung auf deinem Server

Mit einem Webhook prüft dein Server jede Gestaltung, bevor sie in den Warenkorb kommt. So hält die Regel auch dann, wenn jemand den Browser umgeht.

Einrichten

  1. Öffne im Admin Einstellungen → API und dort Druckdatenprüfung per Webhook.
  2. Trage die Webhook-URL ein. Erlaubt ist nur https an eine öffentliche Adresse.
  3. configento.app erzeugt einen Signatur-Schlüssel (dcw_…). Hinterlege ihn auf deinem Server. Neuer Schlüssel ersetzt ihn.
  4. Klicke auf Testaufruf senden. Antwortet dein Server, erscheint „Der Webhook hat geantwortet.“
  5. Entscheide, ob Warenkorb ablehnen, wenn der Webhook nicht antwortet gelten soll (siehe unten).

Die Anfrage

Beim Hinzufügen zum Warenkorb rechnet configento.app den Preis nach und schickt dabei alle sichtbaren, ausgefüllten eigenen Texte und Bilder per POST an deine URL:

{
  "event": "design_check",
  "component_id": "10000021",
  "locale": "de_DE",
  "fields": [ { "characteristic": { "key": "logo", "type": "customimage" }, "placement": { "widthMm": 12.4, "dpi": 310 } } ]
}

Jedes Element in fields hat denselben Aufbau wie ctx im Browser (gekürzt dargestellt). Nur box ist auf dem Server immer null.

Die Kopfzeilen:

Kopfzeile Inhalt
X-Configento-Event design_check, beim Testaufruf test (dann ist fields leer)
X-Configento-Timestamp Zeitpunkt in Unix-Sekunden
X-Configento-Signature sha256= und der Hex-Wert von HMAC-SHA256 mit deinem Schlüssel über Zeitpunkt + . + Rohtext der Anfrage

Prüfe die Signatur, bevor du der Anfrage traust, z. B. in Node.js:

const crypto = require('crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', process.env.CONFIGENTO_DCW_SECRET)
    .update(req.headers['x-configento-timestamp'] + '.' + rawBody).digest('hex');
const ok = crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(req.headers['x-configento-signature'] || ''));

Verwirf außerdem Anfragen mit einem Zeitpunkt, der mehr als ein paar Minuten zurückliegt.

Die Antwort

Dein Server antwortet mit Status 2xx und:

{ "findings": [ { "field": "logo", "level": "block", "message": "Das Logo muss mindestens 15 mm breit sein." } ] }

field ist der Interne Name des Merkmals. Eine leere Liste heißt: alles in Ordnung.

Ergebnis Wirkung
Ein Fund mit block Die Preisprüfung lehnt ab (Fehler design_check_failed mit deiner Meldung). Die Konfiguration kommt nicht in den Warenkorb.
Nur Funde mit warn Der Preis gilt; die Hinweise gehen als design_checks mit.
Keine verwertbare Antwort Der Warenkorb geht durch. Mit Warenkorb ablehnen, wenn der Webhook nicht antwortet lehnt die Preisprüfung stattdessen ab (design_check_unavailable).

Dein Server hat 2 Sekunden Zeit; Weiterleitungen folgt configento.app nicht. Das Ergebnis gilt zusammen mit dem Preis 5 Minuten, eine gleiche Konfiguration fragt in dieser Zeit nicht noch einmal an.

Voraussetzung im Shop

Der Webhook läuft in der Preisprüfung. Sperrt er, kommt die Konfiguration nicht in den Warenkorb, und dein Kunde sieht dort deine Meldung, ab diesen Plugin-Versionen:

Shop Plugin ab Sperre wirkt
Shopware 5.3.9 immer, das Plugin prüft Konfigurationen mit Produktdesigner stets verbindlich
Magento 5.1.14 mit Preisprüfung auf Erzwingen; bei Beobachten geht die Konfiguration durch, die Sperre steht nur im Log
PrestaShop 0.6.10 immer
WooCommerce/WordPress 0.6.5 immer

Mit älteren Plugin-Versionen wirkt die Sperre ebenso, dein Kunde sieht aber nur die allgemeine Meldung, dass die Konfiguration nicht mehr gültig ist oder der Preis nicht bestätigt werden konnte.

Gib deine Meldung deshalb auch über eine Prüfung im Browser aus, dann sieht dein Kunde sie schon beim Gestalten.

Fehlersuche

  1. Die Prüfung im Browser greift nicht: Stimmt der Interne Name in appliesTo? Ist das Skript nach configento.js geladen, oder nutzt du window.ConfigentoDesignChecks? Fehler der Prüfung stehen in der Browser-Konsole.
  2. „Der Webhook hat nicht verwertbar geantwortet“: Dein Server antwortet nicht innerhalb von 2 Sekunden, leitet weiter, antwortet ohne 2xx oder ohne gültiges JSON.
  3. Die Sperre wirkt nicht im Shop: In Magento steht die Preisprüfung nicht auf Erzwingen. Dein Kunde sieht nur eine allgemeine Meldung: Das Plugin ist älter als die Versionen oben.
  4. Die Signatur stimmt nicht: Rechne über den unveränderten Rohtext der Anfrage, nicht über ein neu erzeugtes JSON, und prüfe, ob du nach Neuer Schlüssel den neuen Schlüssel hinterlegt hast.

Nächste Schritte


← Alle Artikel 14 Tage kostenlos testen