vcard4reseller/docs/WALLET-SETUP.md
Thomas Peterson b316d0baf8 Docs: Wallet-Setup-Anleitung (Apple & Google) per OpenSSL
Schritt-für-Schritt zum Erzeugen der Zugangsdaten (Pass Type ID + Cert/Key/WWDR
als PEM via CSR; Google Issuer + Service-Account + Freigabe) und Eintragen der
Env-Variablen. Verlinkt aus deploy/README.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 22:33:22 +02:00

113 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Wallet-Pässe einrichten (Apple & Google)
Schritt-für-Schritt, um die „Zur Wallet hinzufügen"-Funktion scharf zu schalten.
Ohne diese Zugangsdaten bleibt das Feature ausgeblendet. Ein Mac ist **nicht** nötig
alles geht per OpenSSL.
Die fertigen Dateien und Werte trägst du am Ende als **Environment-Variablen** ein:
- **Lokal (Docker):** Dateien nach `backend/var/wallet/` legen (ist gitignored), Werte in `backend/.env.local`. Pfade sind Container-Pfade `/app/var/wallet/...`.
- **Produktiv:** Dateien außerhalb des Webroots auf den Server, Werte in der Server-Env / `.env.prod.local`.
---
## A) Apple Wallet (PassKit)
Voraussetzung: kostenpflichtiger **Apple Developer**-Account.
### 1. Pass Type ID anlegen
1. https://developer.apple.com/account → **Certificates, Identifiers & Profiles****Identifiers****+**.
2. Typ **Pass Type IDs** wählen → Beschreibung + Identifier vergeben, z. B. `pass.de.vcard4reseller.card`.
3. Dieser Identifier ist später `APPLE_WALLET_PASS_TYPE_ID`.
### 2. Privatschlüssel + CSR erzeugen (per OpenSSL)
```bash
mkdir -p backend/var/wallet && cd backend/var/wallet
openssl genrsa -out key.pem 2048
openssl req -new -key key.pem -out request.csr \
-subj "/emailAddress=DEINE@MAIL.de/CN=vcard4reseller Pass/O=vcard4reseller/C=DE"
```
`key.pem` ist dein **unverschlüsselter** Privatschlüssel (→ `APPLE_WALLET_KEY_PASSWORD` bleibt leer).
### 3. Zertifikat erstellen & als PEM speichern
1. Im Apple-Portal beim Pass Type ID → **Create Certificate** → die eben erzeugte `request.csr` hochladen.
2. Das resultierende `pass.cer` (DER) herunterladen → nach `backend/var/wallet/` legen → umwandeln:
```bash
openssl x509 -inform DER -in pass.cer -out cert.pem
```
`cert.pem` = `APPLE_WALLET_CERT_PATH`.
### 4. Apple-WWDR-Zwischenzertifikat
1. https://www.apple.com/certificateauthority/ → **Worldwide Developer Relations** Intermediate Certificate (aktuell **G4**) herunterladen (`AppleWWDRCAG4.cer`).
2. Umwandeln:
```bash
openssl x509 -inform DER -in AppleWWDRCAG4.cer -out wwdr.pem
```
`wwdr.pem` = `APPLE_WALLET_WWDR_PATH`.
### 5. Team ID
https://developer.apple.com/account → **Membership****Team ID** (10 Zeichen) = `APPLE_WALLET_TEAM_ID`.
### Ergebnis (Env)
```dotenv
APPLE_WALLET_PASS_TYPE_ID=pass.de.vcard4reseller.card
APPLE_WALLET_TEAM_ID=ABCDE12345
APPLE_WALLET_ORG_NAME=vcard4reseller
APPLE_WALLET_CERT_PATH=/app/var/wallet/cert.pem
APPLE_WALLET_KEY_PATH=/app/var/wallet/key.pem
APPLE_WALLET_KEY_PASSWORD=
APPLE_WALLET_WWDR_PATH=/app/var/wallet/wwdr.pem
```
> Falls du das Zertifikat als `.p12` aus dem Keychain exportierst statt per CSR:
> `openssl pkcs12 -legacy -in Cert.p12 -clcerts -nokeys -out cert.pem` und
> `openssl pkcs12 -legacy -in Cert.p12 -nocerts -nodes -out key.pem`.
---
## B) Google Wallet
Voraussetzung: Google-Konto + Google Cloud (kostenlos).
### 1. Wallet API aktivieren
https://console.cloud.google.com → Projekt wählen/anlegen → **APIs & Dienste****Google Wallet API** suchen → **Aktivieren**.
### 2. Issuer-Account anlegen
1. https://pay.google.com/business/console → **Google Wallet API** → Issuer-Profil anlegen.
2. Die **Issuer ID** (Zahl) = `GOOGLE_WALLET_ISSUER_ID`.
### 3. Service-Account + JSON-Key
1. Cloud Console → **IAM & Verwaltung****Dienstkonten****Dienstkonto erstellen**.
2. Anlegen, dann **Schlüssel****Neuen Schlüssel****JSON** → herunterladen.
3. JSON nach `backend/var/wallet/google-sa.json` legen → `GOOGLE_WALLET_SERVICE_ACCOUNT`.
### 4. Service-Account dem Issuer freigeben
Im **Google Pay & Wallet Console** → Issuer → **Users / Nutzer** → die **E-Mail des Dienstkontos**
(`...iam.gserviceaccount.com`) mit Rolle **Developer** hinzufügen. Sonst → 403 beim Speichern.
### Ergebnis (Env)
```dotenv
GOOGLE_WALLET_ISSUER_ID=3388000000000000000
GOOGLE_WALLET_SERVICE_ACCOUNT=/app/var/wallet/google-sa.json
GOOGLE_WALLET_CLASS_SUFFIX=vcard_generic
```
> **Demo-Modus:** Solange der Issuer noch nicht von Google freigegeben ist, können nur
> **Test-Nutzer** (im Pay & Wallet Console unter dem Issuer hinzugefügt) Pässe speichern.
> Für die Veröffentlichung muss der Issuer den Google-Freigabeprozess durchlaufen.
> Logos erscheinen nur, wenn das Firmen-Branding eine **öffentliche https-Logo-URL** hat.
---
## Aktivieren & testen
1. Werte in `backend/.env.local` (lokal) bzw. Server-Env eintragen.
2. Cache leeren: `docker compose exec php php bin/console cache:clear`.
3. Ein Mitarbeiter mit `shortCode` → öffentliche Profilseite zeigt jetzt den QR **„Zur Wallet hinzufügen"**.
Direktlinks: `/w/{shortCode}` (Landing), `/w/{shortCode}/apple.pkpass`, `/w/{shortCode}/google`.
4. Auf dem Smartphone scannen/öffnen → „Zu Apple/Google Wallet".
**Hinweis:** Self-signed Test-Zertifikate erzeugen technisch valide Pässe, werden aber von
Apple/Google **nicht akzeptiert** für echte Pässe sind die obigen echten Zugangsdaten nötig.
Der automatische Over-the-air-Sync (Apple APNs / Google Objekt-Patch bei Datenänderung) ist
noch nicht umgesetzt; bisher wird der Pass beim Hinzufügen erzeugt.