=== EdelVerify — Altersprüfung mit der E-ID === Contributors: edelbyte Tags: woocommerce, alterspruefung, age-verification, e-id, swiyu Requires at least: 6.4 Tested up to: 7.0 Requires PHP: 8.1 Stable tag: 1.1.1 License: GPL-2.0-or-later License URI: https://www.gnu.org/licenses/gpl-2.0.html Sperrt den Checkout für altersbeschränkte Produkte, bis das Alter über die staatliche Schweizer E-ID bestätigt wurde. Die Grenze ist je Kategorie einstellbar — 16 oder 18. == Beschreibung == Ihre Kundschaft bestätigt das Alter in der swiyu-App des Bundes. Übermittelt wird eine einzige Angabe: Grenze erfüllt, ja oder nein. Kein Name, kein Geburtsdatum, keine Ausweiskopie — es gibt in Ihrem Shop also auch nichts, was Sie speichern, schützen oder löschen müssten. Die Grenze bestimmen Sie: 16 oder 18, je Kategorie, mit einer Vorgabe für den ganzen Shop. Bier ab 16 neben Spirituosen ab 18 ist damit ein Eintrag und kein zweiter Shop. Liegt Gemischtes im Warenkorb, gilt die strengste Grenze. Der Riegel sitzt auf dem Server. Alles, was im Browser zu sehen ist, ist Anzeige: Wer das Prüffenster mit den Entwicklerwerkzeugen wegräumt, kommt trotzdem nicht an der Bestellung vorbei. Das Plugin hängt an beiden Kassenwegen — am klassischen Checkout und am Block-Checkout, den WooCommerce heute standardmässig ausliefert. Ist EdelVerify nicht erreichbar, wird die Bestellung **abgewiesen**, nicht durchgelassen. Bei einer Altersprüfung ist die sichere Richtung die unbequeme. = Was Sie brauchen = * Das Plugin-Archiv: https://verify.edelbyte.ch/v1/woocommerce/edelverify-plugin.zip * Ein Schlüsselpaar von uns — einen öffentlichen (`pk_test_…`) und einen geheimen (`sk_test_…`). Wie Sie es bekommen, steht gleich darunter. * WooCommerce * Kundschaft mit der swiyu-App und einer E-ID (für den Testbetrieb nicht nötig) = Woher Sie die Schlüssel bekommen = Einen Selbstbedienungszugang gibt es heute **nicht**. Es gibt kein Anmeldeformular, in dem Sie sich selbst ein Konto anlegen und Schlüssel abholen; wir legen Ihren Shop von Hand an und schicken Ihnen das Paar. Der Weg dorthin ist ein kurzes Gespräch: * Warteliste: https://verify.edelbyte.ch/#warteliste * E-Mail: info@edelbyte.ch * Telefon: 044 500 25 04 Sagen Sie uns dabei gleich die **Adressen Ihres Shops** (mit und ohne `www`, dazu Ihr Testsystem) und die **Altersgrenze**, die Ihre Ware verlangt. Beides tragen wir ein — auch das ist heute nichts, was Sie selbst einstellen können. = Was es kostet = Heute nichts, weil heute nichts verkauft wird. Es gibt keinen Preis, kein Abo und keine Rechnung: Wir nennen keinen Betrag, den wir nicht halten können, solange die produktive E-ID nicht steht. Was es gibt, ist die Warteliste, ein Pilotgespräch und Testschlüssel zum Bauen. Über Konditionen sprechen wir, bevor Sie scharf schalten — nicht danach. = Stand = EdelVerify läuft zurzeit gegen die **Testumgebung** des Bundes. Vorführen und einbauen geht jederzeit; für echte Kundschaft fehlt die produktive Umgebung, die der Bund noch nicht geöffnet hat. == Installation == 1. Archiv herunterladen: https://verify.edelbyte.ch/v1/woocommerce/edelverify-plugin.zip Dann **Plugins → Installieren → Plugin hochladen**, diese Datei wählen, installieren und aktivieren. 2. **WooCommerce → Einstellungen → EdelVerify** öffnen. 3. Öffentlichen und geheimen Schlüssel eintragen — das Paar, das wir Ihnen geschickt haben (siehe «Woher Sie die Schlüssel bekommen»). Fangen Sie mit den Testschlüsseln an: `pk_test_…` und `sk_test_…`. 4. Unter **Altersgrenze (Vorgabe)** wählen, was gilt, wo keine Kategorie etwas anderes sagt. Ab Werk 18. 5. Unter **Betroffene Kategorien** die Slugs der altersbeschränkten Warengruppen eintragen, mit Komma getrennt, zum Beispiel `vape,tabak,spirituosen`. Bleibt das Feld leer, wird der ganze Shop geprüft — für einen Laden, der auch Zubehör ohne Altersgrenze führt, ist das meist zu weit. Den Slug einer Kategorie finden Sie unter **Produkte → Kategorien** in der Spalte «Slug» (ältere deutsche Installationen nennen sie «Titelform»). Es ist derselbe Text, der in der Adresse der Kategorieseite steht: `.../produkt-kategorie/vape/` → `vape`. Nehmen Sie ihn genau so, wie er dort steht — nicht den angezeigten Namen: «Vape & Zubehör» ist kein Slug, und ein Slug, den es nicht gibt, trifft nie etwas. Eine eigene Grenze hängen Sie mit Doppelpunkt an den Slug: bier:16,wein:16,spirituosen:18,vape Ein Slug ohne Zusatz bekommt die Vorgabe aus Schritt 4. Ein Zusatz, den es nicht gibt (`:17`), wird auf 18 angehoben und ins WooCommerce-Log geschrieben — nie auf 16 gesenkt. 6. Uns die **Adressen Ihres Shops** melden, damit wir sie als erlaubte Herkunft hinterlegen (info@edelbyte.ch). Das ist kein Feld im Plugin: Die Liste liegt bei uns, und solange für Ihren Shop keine Adresse darin steht, darf jede beliebige Seite Prüfungen auf Ihren öffentlichen Schlüssel starten. Vor dem Kundenbetrieb gehört sie deshalb gefüllt. 7. **Verbindung prüfen** anklicken. Der Test sagt Ihnen in vier Zeilen, ob der Dienst erreichbar ist, ob beide Schlüssel angenommen werden, welche Grenzen gelten und ob Ihre Adresse als Herkunft freigegeben ist. 8. **Probekauf machen** — bitte wirklich. Der beiliegende `PRUEFPLAN.md` führt Sie in zehn Minuten durch alles, was zählt: die gesperrte Kasse ohne Nachweis, die vollständige Prüfung bis zur durchgegangenen Bestellung, die Ablehnung einer zu jungen Person, die beiden Grenzen 16 und 18 und das Verhalten bei einer Störung. Ein Einbau, den niemand nachgemessen hat, ist eine Vermutung. Wichtig zu Schritt 6 und 7: Der öffentliche Schlüssel darf nur von den Adressen aus Prüfungen starten, die bei uns hinterlegt sind. Läuft Ihr Shop unter mehreren Adressen — mit und ohne `www`, dazu eine Testumgebung — gehören alle dort hinein, sonst schlägt die Prüfung genau auf einer davon fehl. == Testbetrieb ohne Wallet == Die produktive E-ID des Bundes startet voraussichtlich Ende 2026. Bis dahin hat Ihre Kundschaft nichts vorzuzeigen — bauen und prüfen lässt sich trotzdem heute, mit den Testschlüsseln. Ein Schlüssel, der mit `pk_test_` beziehungsweise `sk_test_` beginnt, spricht den Prüfdienst des Bundes gar nicht erst an. Die Prüfung steht vier Sekunden auf `PENDING` — damit die Abfrage im Shop wirklich einmal durchläuft — und geht dann durch. Im Shop sehen Sie damit den vollständigen Ablauf bis zur abgeschickten Bestellung, ohne dass jemand eine Wallet zückt. Zwei Dinge, die Sie dabei wissen müssen: * **Ohne weitere Angabe nimmt eine Testprüfung immer den glücklichen Ausgang.** Der Fall, den Ihr Shop am seltensten sieht und am dringendsten können muss, ist der andere: zu jung. Ihn bestellen Sie mit `test_outcome` — im Shop selbst gibt es dafür kein Feld, wohl aber in Abschnitt 5 des beiliegenden `PRUEFPLAN.md`, samt fertigem `curl`-Aufruf. * **Test- und Livebetrieb berühren sich nie.** Ein Nachweis aus dem Testbetrieb lässt sich mit einem Live-Schlüssel nicht einlösen und umgekehrt. Entschieden wird das ausschliesslich am Schlüssel. Am Tag der Umstellung tauschen Sie zwei Zeichenfolgen aus, sonst nichts. Die vollständige technische Anleitung — Schnittstelle, Fehlerschlüssel, Webhook, Testausgänge — steht unter https://verify.edelbyte.ch/entwickler == Häufige Fragen == = Sieht mein Shop das Geburtsdatum? = Nein. Die Wallet gibt ausschliesslich die Angabe frei, ob die verlangte Grenze erfüllt ist. Weder Ihr Shop noch EdelVerify erfährt Name, Geburtsdatum oder Ausweisnummer. = Welche Altersgrenzen gibt es? = 16 und 18. Mehr belegt die staatliche E-ID nicht. Ein Feld, in das man 21 eintragen könnte, ohne dass es wirkt, wäre schlimmer als keines. = Wie wirkt sich ein gemischter Warenkorb aus? = Es gilt die strengste Grenze. Ein Sixpack neben einer Flasche Gin macht den ganzen Warenkorb zu einem 18er-Warenkorb — die Alternative wäre, die Bestellung aufzuteilen, und das kann eine Kasse nicht. = Muss die Kundschaft nach jeder Warenkorbänderung neu prüfen? = Nein, solange die Grenze nicht steigt. Ein Nachweis ab 18 löst auch Ware ab 16 ein. Umgekehrt nicht: Wer sich für Bier ausgewiesen hat und dann eine Flasche Gin dazulegt, wird erneut gefragt. = Wie lange gilt eine bestätigte Prüfung? = So lange, wie es im EdelVerify-Admin für Ihren Shop eingestellt ist, standardmässig dreissig Tage. Danach fragt der Shop erneut. Der Nachweis liegt in der WooCommerce-Sitzung und wird bei jedem Bestellabschluss frisch gegen EdelVerify geprüft — ein zurückgezogener Nachweis fällt damit sofort auf. = Was passiert bei einer Störung? = Die Bestellung wird abgewiesen. Ein Ausfall darf keine ungeprüfte Bestellung durchlassen. = Funktioniert es mit dem Block-Checkout? = Ja. Das Plugin hängt an `woocommerce_checkout_process` für den klassischen Weg und an den Store-API-Haken für den Block-Checkout. Beide Wege treffen dieselbe Entscheidung an derselben Stelle im Code. = Und wenn jemand die Store-API direkt anspricht? = Dann greift derselbe Riegel. Das ist genau der Fall, für den die serverseitige Prüfung da ist. = Ich baue eine eigene Oberfläche. Woran erkenne ich die Schranke? = Am Feld `extensions.edelverify` in den Antworten von `/wp-json/wc/store/v1/cart` und `/wp-json/wc/store/v1/checkout`: "extensions": { "edelverify": { "pruefung_noetig": true, "grenze": 16, "erfuellt": false } } `grenze` ist die echte Grenze dieses Warenkorbs — bei gemischtem Inhalt die strengste, bei leerem Warenkorb die Vorgabe des Shops. Damit lässt sich die Prüfung anbieten, sobald der erste altersbeschränkte Artikel im Warenkorb liegt — und nicht erst, wenn die Kundschaft die ganze Adresse eingetippt hat und die Bestellung mit einem 409 abgewiesen wird. Drei Angaben, mehr steht dort nicht: keine Kennung, kein Nachweis, kein Nonce. Diese Antwort ist für jeden lesbar, der den Warenkorb-Token hat. `erfuellt` ist **Anzeige, nicht Erlaubnis**. Wer den Wert im Browser umbiegt, biegt seine eigene Bildschirmanzeige um; die Bestellung wird trotzdem am Server geprüft. == Changelog == = 1.1.1 = * Nach bestandener Prüfung steht in Warenkorb und Kasse eine grüne Zeile «Alter bestätigt: über 16/18» — vorher lud die Kasse neu und zeigte nichts * Anleitung ergänzt: Bezugsort des Archivs, Weg zu den Schlüsseln, wo die Kategorie-Slugs stehen, die Meldung der erlaubten Herkunft, der Testbetrieb und der Probekauf zum Schluss = 1.1.0 = * Altersgrenze einstellbar: 16 oder 18, je Kategorie, mit Vorgabe für den Shop * Bei gemischtem Warenkorb gilt die strengste Grenze * Der Beleg an der Bestellung hält die tatsächlich geprüfte Grenze fest * `extensions.edelverify.grenze` meldet die echte Grenze statt pauschal 18 * Ein Shop, der nichts umstellt, prüft unverändert alles gegen 18 = 1.0.0 = * Riegel für klassischen Checkout und Block-Checkout * Einstellungsseite unter WooCommerce → Einstellungen → EdelVerify * Verbindungstest für Erreichbarkeit, beide Schlüssel und Herkunft * Hinweis im Backend, solange die Schlüssel fehlen