=== 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.0
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 =

* Ein Konto bei EdelVerify mit einem öffentlichen und einem geheimen Schlüssel
* WooCommerce
* Kundschaft mit der swiyu-App und einer E-ID

= 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. **Plugins → Installieren → Plugin hochladen**, `edelverify-plugin.zip`
   wählen, installieren und aktivieren.
2. **WooCommerce → Einstellungen → EdelVerify** öffnen.
3. Öffentlichen und geheimen Schlüssel eintragen. Beide finden Sie im
   EdelVerify-Admin unter «Shops».
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.

   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. **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.

Wichtig zu Schritt 6: Der öffentliche Schlüssel darf nur von den Adressen aus
Prüfungen starten, die im EdelVerify-Admin 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.

== 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.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
