# EdelVerify für Shopify — Einbau

Altersprüfung mit der staatlichen Schweizer E-ID. Diese Anleitung führt Sie
durch die Einrichtung, auch wenn Sie mit Shopify noch nie etwas zu tun hatten.
Sie brauchen dafür keine Programmierkenntnisse, aber Zugang zum Shopify-Admin
Ihres Ladens.

Rechnen Sie mit **20 Minuten**. Der einzige Schritt, den man vergessen kann und
der dann alles Sichtbare abschaltet, ist **Schritt 5**.

---

## 0. Zuerst: Was Sie bekommen — und was nicht

Shopify betreibt die Kasse selbst. Fremder Code darf dort nur, was Shopify
vorsieht. Daraus folgen genau zwei Ausbaustufen:

| | **Ohne Shopify Plus** | **Mit Shopify Plus** |
|---|---|---|
| Hinweis und Prüffenster im Laden | ja | ja |
| Kassenknöpfe im Warenkorb gesperrt | ja (umgehbar) | ja (umgehbar) |
| Sperre **vor** dem Bestellabschluss | **nein** | ja, von Shopify erzwungen |
| Wirkt bei Apple Pay / Shop Pay / Google Pay | nein | ja |
| Jede betroffene Bestellung wird geprüft | ja | ja |
| Ohne Nachweis: Versand angehalten, Bestellung markiert | ja | ja |

### Und eine dritte Einschränkung: eine Grenze für den ganzen Laden

Die Altersprüfung kennt zwei Schwellen, 16 und 18. In WooCommerce, Shopware und
Magento lässt sich die Grenze **je Warengruppe** setzen — Bier ab 16,
Spirituosen ab 18, im selben Laden.

**In Shopify geht das nicht.** Dort ist die Sammlung die Warengruppe, und dieser
App-Block kennt genau eine. Es gilt deshalb **eine** Grenze für alles, was
geprüft wird, und sie kommt aus der Vorgabe Ihres EdelVerify-Kontos (unter
*Shops*, ab Werk 18). Im Theme lässt sie sich nicht einstellen, und das ist
Absicht: Eine Grenze im Theme könnte von der Vorgabe abweichen, gegen die der
Server den Nachweis wieder einlöst — Ihre Kundschaft sähe ein grünes
Prüffenster und danach eine Absage.

Wer beides braucht, hat zwei Wege:

1. **Auf 18 stellen** und Bier mitprüfen. Zu streng, aber nie zu lasch — und für
   die meisten Läden die richtige Antwort.
2. **Zwei Anbindungen**: zwei Schlüsselpaare, zwei EdelVerify-Konten, zwei
   Läden. Aufwändig; sagen Sie uns, wenn Sie es brauchen, dann bauen wir es.

Die Grenze, die wirklich gilt, steht im Prüffenster: Es holt sie beim Start
vom Dienst und schreibt sie hin («Über 16 bestätigt»). Sie muss dort nicht
geraten werden.

---

**Ohne Shopify Plus gibt es bei Shopify keine Altersprüfung vor dem
Bestellabschluss** — nicht von uns und nicht von einem Mitbewerber. Die Zusage
lautet dann: *Jede betroffene Bestellung wird binnen Sekunden geprüft und ohne
Nachweis vom Versand angehalten.* Die Bestellung entsteht, das Geld wird
eingezogen, nur die Ware geht nicht raus.

**Mit Shopify Plus** kommt eine echte Sperre dazu, die auch bei Apple Pay
greift. Sie prüft aber nur, **ob** ein Nachweis-Kennzeichen im Warenkorb liegt,
nicht ob es echt ist. Wer weiss, was er tut, setzt es sich selbst — und wird
dann nach der Bestellung gefasst, genau wie ohne Plus.

Alles, was mit Plus zu tun hat, steht in dieser Anleitung unter **«Nur mit
Plus»**. Ohne Plus überspringen Sie diese Abschnitte ersatzlos.

---

## 1. Was Sie bereithalten müssen

- Zugang zum Shopify-Admin Ihres Ladens (Rolle: Inhaber oder ein Mitarbeiter
  mit den Rechten «Apps und Vertriebskanäle» und «Themes»)
- Das Paket:
  <https://verify.edelbyte.ch/v1/shopify/edelverify-shopify.zip> — der
  Projektbaum für die Shopify-CLI, samt dieser Anleitung und dem Prüfplan
- Ihre beiden EdelVerify-Schlüssel — die bekommen Sie von uns, siehe unten:
  - **öffentlicher Schlüssel**, beginnt mit `pk_live_` (zum Testen: `pk_test_`)
  - **geheimer Schlüssel**, beginnt mit `sk_live_` (zum Testen: `sk_test_`)
- Ihre `myshopify.com`-Adresse — EdelByte legt den Shop damit von Hand an
  (siehe Schritt 3); einen Installationslink gibt es heute noch nicht
- ein Handy mit der **swiyu**-App und einer E-ID, um am Ende selbst zu
  probieren

> **Der geheime Schlüssel gehört nie ins Theme.** Er wird ausschliesslich im
> EdelVerify-Bereich der App eingetragen (Schritt 4) und liegt dort auf unserem
> Server. Was im Theme steht, kann jeder Besucher lesen.

### Woher Sie die Schlüssel bekommen

Einen Selbstbedienungszugang gibt es heute nicht: kein Anmeldeformular, kein
Konto, das Sie sich selbst anlegen. Wir legen Ihren Shop von Hand an und
schicken Ihnen das Paar — zum Bauen die Testschlüssel `pk_test_…` und
`sk_test_…`. Im selben Zug hinterlegen wir die erlaubte Herkunft.

* Warteliste: <https://verify.edelbyte.ch/#warteliste>
* E-Mail: info@edelbyte.ch
* Telefon: 044 500 25 04

Melden Sie uns dabei gleich Ihre `myshopify.com`-Adresse, Ihre eigene Domain
und die Altersgrenze, die Ihre Ware verlangt.

### Was es kostet

Heute nichts — weil heute nichts verkauft wird. Es gibt keinen Preis, kein
Abonnement und keine Rechnung; wir nennen bewusst auch keinen Betrag «ab»,
solange die produktive E-ID nicht steht. Was es gibt, ist ein Pilotgespräch,
Testschlüssel zum Bauen und ein Platz auf der Warteliste. Über Konditionen
sprechen wir, bevor Sie scharf schalten — nicht danach. Für Shopify kommt
hinzu, was in Abschnitt 0 steht: Der Riegel vor dem Bestellabschluss verlangt
Shopify Plus, und das ist ein Preis, den Shopify stellt, nicht wir.

Die vollständige technische Anleitung — Schnittstelle, Fehlerschlüssel,
Webhook, Testausgänge — steht unter <https://verify.edelbyte.ch/entwickler>

---

## 2. Die Artikel bestimmen, die geprüft werden sollen

Shopify braucht eine Liste, welche Artikel altersbeschränkt sind. Dafür dient
eine **Collection** (deutsch im Admin: «Kategorie» bzw. «Sammlung»).

1. Shopify-Admin → **Produkte** → **Sammlungen** → **Sammlung erstellen**
2. Titel z. B. `Altersgeprüft 18+`
3. Sammlungstyp: manuell oder automatisch, wie es Ihnen lieber ist
4. Speichern und die betroffenen Artikel hinzufügen
5. **Wichtig:** Rechts unter **Vertriebskanäle** muss **Online Store**
   angehakt sein.
6. Notieren Sie den **Handle**. Er steht ganz unten auf der Seite der Sammlung
   unter «Vorschau der Suchmaschinenliste» → **Bearbeiten** → in der URL, z. B.
   `altersgeprueft-18`.

> **Warum der Vertriebskanal wichtig ist:** Eine Sammlung, die im Online Store
> nicht verfügbar ist, sieht Ihr Theme nicht — der Hinweis im Laden bliebe dann
> aus. Geprüft würde die Bestellung trotzdem, aber der Kunde erführe erst
> hinterher davon. Das ist der ungünstigste aller Fälle.

**Lassen Sie das Feld später leer**, wenn *alles* in Ihrem Laden
altersbeschränkt ist. Leer heisst ausdrücklich **der ganze Shop**, nicht
«nichts».

---

## 3. Die App installieren

> **Diese App lässt sich heute noch nicht selbst installieren.** Es gibt keinen
> Installationslink, den Sie öffnen könnten: Der OAuth-Weg von Shopify ist bei
> uns nicht gebaut — die Rückrufadressen, die Shopify nach der Zustimmung
> anspringen würde, antworten mit **404**. Auch einen EdelVerify-Bereich im
> Shopify-Admin gibt es nicht: Unsere Seiten verbieten die Einbettung
> ausdrücklich (`X-Frame-Options: DENY`, `frame-ancestors 'none'`), ein
> eingebetteter Bereich kann dort also gar nicht erst erscheinen.
>
> **Stattdessen legt EdelByte Ihren Shop von Hand an.** Sagen Sie uns Ihre
> `myshopify.com`-Adresse; wir richten die Anbindung ein und melden uns mit den
> Angaben, die Sie für Schritt 5 brauchen. Die Berechtigungstabelle unten
> beschreibt, was die App dabei erhält — lesen Sie sie, auch wenn Sie nichts
> anzuklicken haben.

Shopify zeigt in der Zustimmung, welche Berechtigungen die App verlangt. Jede
hat genau einen Grund:

| Berechtigung | Wofür |
|---|---|
| Bestellungen lesen | die neue Bestellung überhaupt sehen |
| Bestellungen bearbeiten | Kennzeichen, Notiz und Prüfvermerk an die Bestellung schreiben |
| Produkte lesen | prüfen, ob ein Artikel aus Ihrer Sammlung bestellt wurde |
| Fulfillment (eigenes Lager und Dienstleister) | **den Versand anhalten**, wenn kein Nachweis vorliegt |
| App-Proxy | die Rückmeldung des Prüffensters unter Ihrer eigenen Domain entgegennehmen |

> Jeder Shopify-Shop braucht eine **eigene** Anbindung. Nur wenn Ihre Shops
> in derselben Plus-Organisation liegen, genügt eine.

---

## 4. Schlüssel eintragen

**Auch dieser Schritt läuft heute über uns.** Es gibt keinen
EdelVerify-Bereich im Shopify-Admin, in dem Sie etwas eintragen könnten — aus
demselben Grund wie in Schritt 3. Wir hinterlegen die folgenden Angaben für
Sie; melden Sie sie uns, dann ist der Schritt in wenigen Minuten erledigt:

1. **Geheimer Schlüssel** (`sk_live_…`). Er bleibt auf unserem Server und wird
   nie an den Browser ausgeliefert. Schicken Sie ihn uns nicht per E-Mail — wir
   erzeugen ihn ohnehin selbst und teilen ihn Ihnen mit.
2. **Sammlung** → den Handle aus Schritt 2, z. B. `altersgeprueft-18`.
3. **Nicht geprüfte Bestellungen automatisch stornieren** bleibt **aus**. Eine
   Stornierung ist bei Shopify unumkehrbar; ein angehaltener Versand ist in
   zehn Sekunden wieder freigegeben. Sagen Sie uns ausdrücklich Bescheid, wenn
   Sie das anders wollen.
4. **Verbindung prüfen.** Wir prüfen für Sie nach, ob die Prüfstelle erreichbar
   ist, ob der geheime Schlüssel angenommen wird und ob Ihr Laden als Herkunft
   zugelassen ist, und melden Ihnen das Ergebnis zurück.

Den **öffentlichen** Schlüssel (`pk_live_…`) tragen Sie im nächsten Schritt im
Theme ein — dorthin gehört er, und nur dorthin. Das ist der erste Schritt, den
Sie wirklich selbst machen.

---

## 5. Den App-Block im Theme einschalten — der Schritt, den man vergisst

Shopify schaltet Blöcke einer App **nicht** von selbst ein. Solange Sie das
nicht tun, ist im Laden nichts von der Altersprüfung zu sehen.

1. Shopify-Admin → **Onlineshop** → **Themes**
2. Beim aktiven Theme auf **Anpassen**
3. Links in der Seitenleiste ganz unten auf **App-Einbettungen**
   (englisch: *App embeds*)
4. **Altersprüfung (E-ID)** finden und den Schalter auf **ein** stellen
5. Auf den Namen klicken — jetzt erscheinen die Einstellungen:
   - **Öffentlicher Schlüssel**: `pk_live_…` einsetzen
   - **Collection der altersbeschränkten Artikel**: der Handle aus Schritt 2,
     oder leer für den ganzen Shop
   - **Kassenknöpfe ohne Nachweis sperren**: eingeschaltet lassen
   - Die technischen Einstellungen darunter bleiben, wie sie sind
6. Oben rechts **Speichern**

> ### Was passiert, wenn Sie diesen Schritt vergessen
>
> Im Laden erscheint **kein Prüffenster und kein Hinweis**. Kunden bestellen
> altersbeschränkte Ware, ohne je nach ihrem Alter gefragt worden zu sein.
>
> Die Bestellungen werden trotzdem geprüft und ohne Nachweis vom Versand
> angehalten — Sie sitzen dann also auf lauter angehaltenen Bestellungen von
> Kunden, die gar nicht wussten, dass sie etwas hätten bestätigen sollen. Jede
> einzelne müssen Sie von Hand nachfassen.
>
> **Mit Plus** kommt hinzu: Die Kasse blockt, aber im Laden gibt es keinen Weg,
> die Prüfung zu bestehen. Ihre Kunden stehen vor einer verschlossenen Tür ohne
> Klinke.
>
> Prüfen Sie es deshalb sofort nach: Schritt 7.

Wechseln Sie das Theme später (oder installieren ein neues), müssen Sie diesen
Schritt im neuen Theme **wiederholen**.

---

## 6. Der Webhook — nichts zu tun, aber gut zu wissen

Das Abonnement auf `orders/create` bringt die App mit; Sie müssen im Admin
nichts einrichten. Es ist die **verbindliche** Prüfung: Innerhalb von Sekunden
nach jeder Bestellung entscheidet unser Server, ob ein Nachweis vorliegt.

Was Sie danach an der Bestellung sehen:

| Fall | Kennzeichen | Weitere Wirkung |
|---|---|---|
| geprüft | `edelverify:geprueft` | Prüfvermerk auf der Bestellseite |
| nicht geprüft | `edelverify:ungeprueft` | **Versand angehalten**, Notiz, Risiko «hoch» |
| nichts Altersbeschränktes dabei | `edelverify:nicht-noetig` | — |
| Testbetrieb | zusätzlich `edelverify:test` | — |

Nach den Kennzeichen können Sie die Bestellliste filtern: `tag:edelverify-ungeprueft`.
Eine eigene Spalte in der Bestellliste erlaubt Shopify einer App nicht.

Reicht ein Kunde den Nachweis nach, geben Sie den Versand im EdelVerify-Bereich
wieder frei — oder in Shopify direkt beim jeweiligen Versandauftrag über
**Halten aufheben**.

---

## 7. Probekauf — bitte wirklich machen

1. Legen Sie einen altersbeschränkten Artikel in den Warenkorb.
2. Unten erscheint der Streifen «Ihr Warenkorb enthält altersbeschränkte
   Artikel …». **Erscheint er nicht, ist Schritt 5 nicht erledigt** — oder die
   Sammlung ist nicht im Online Store verfügbar (Schritt 2, Punkt 5).
3. Öffnen Sie die Warenkorbseite. Es legt sich eine Ebene darüber.
4. **Alter bestätigen** → QR-Code erscheint → mit der swiyu-App scannen →
   bestätigen.
5. Das Fenster wird grün, **danach** lädt die Seite neu, Streifen und Ebene
   sind weg.
6. Bestellen Sie zu Ende und öffnen Sie die Bestellung im Admin: Sie trägt
   `edelverify:geprueft`.

Die Reihenfolge in Punkt 5 ist wichtig. Lädt die Seite neu, **bevor** das
Fenster grün wird, ist etwas falsch eingerichtet — melden Sie es uns, statt es
zu wiederholen: Ein Nachweis wird genau einmal ausgeliefert.

---

## 8. Nur mit Plus: die erzwungene Sperre einschalten

Ohne Shopify Plus überspringen Sie diesen Abschnitt. Die Function lässt sich
dann nicht aktivieren — das ist Shopifys Tarifgrenze, kein Fehler.

1. Die App muss mit der Berechtigung **Validierungen** installiert sein. Ist
   sie erst nachträglich dazugekommen, fragt Shopify Sie erneut um Zustimmung.
2. Im EdelVerify-Bereich: **Sperre im Checkout aktivieren**.
3. Danach steht sie im Shopify-Admin unter **Einstellungen → Checkout →
   Validierungen**. Dort können Sie sie sehen, aber lassen Sie sie
   eingeschaltet.
4. Probekauf wiederholen, diesmal ohne Bestätigung: Der Checkout muss die
   Bestellung mit der Meldung «Bitte bestätigen Sie zuerst Ihr Alter …»
   verweigern — auch über Apple Pay oder Shop Pay.

Höchstens 25 solcher Validierungen sind je Shop möglich; unsere ist eine davon.

---

## 9. Wenn etwas nicht tut

| Beobachtung | Häufigste Ursache |
|---|---|
| Kein Streifen im Laden | App-Block nicht eingeschaltet (Schritt 5) oder im neuen Theme nicht wiederholt |
| Streifen erscheint bei jedem Artikel | Sammlungsfeld ist leer — das heisst «ganzer Shop» |
| Streifen erscheint nie, obwohl der Artikel in der Sammlung ist | Sammlung nicht im Vertriebskanal «Online Store» |
| Fenster öffnet nicht, Meldung «gerade nicht erreichbar» | falscher oder fehlender öffentlicher Schlüssel, oder Ihre Domain ist im EdelVerify-Admin nicht als Herkunft zugelassen |
| Alles bestätigt, Bestellung trotzdem `ungeprueft` | geheimer Schlüssel falsch (Schritt 4, «Verbindung prüfen») |
| Sperre wirkt nicht bei Apple Pay | ohne Plus so vorgesehen; mit Plus: Schritt 8 nicht ausgeführt |

---

## 10. Was Sie Ihren Kunden gegenüber sagen können

- Übermittelt wird **eine einzige Angabe**: Altersgrenze erfüllt oder nicht.
  Kein Name, kein Geburtsdatum, keine Ausweiskopie.
- An der Bestellung steht nur, **dass**, **wann** und **gegen welche Grenze**
  geprüft wurde — der Nachweis selbst wird nirgends gespeichert.
- Die Prüfung läuft über die staatliche Schweizer E-ID und die swiyu-App.
