Widget
Stand: 18. August 2026
Das Widget zeigt in deiner Kasse eine kompakte Zeile und darin einen Knopf. Beim Klick öffnet sich ein Dialog mit QR-Code auf dem Desktop oder einem Wallet-Button auf dem Handy. Es hat keine Abhängigkeiten und keinen Build-Schritt – es muss in jeder Umgebung überleben, die ein Shop schon geladen hat.
Das Widget sieht deinen API-Schlüssel nie. Es bekommt ID und Einweg-Token.
<script src="https://api.valyda.ch/widget/v1/valyda.js"></script>
Einbinden
const handle = Valyda.mount({
el: '#valyda',
apiBase: 'https://api.valyda.ch',
profile: 'age-over-18',
createSession() {
return fetch('/meine-route/verifikation', { method: 'POST' })
.then(r => r.json()) // {id, token, deeplink}
},
onSuccess() { form.submit() },
fallback: { label: 'Ausweis hochladen', onSelect() { /* … */ } },
})
createSession wird erst aufgerufen, wenn die Kundin den Dialog öffnet. Das ist
der empfohlene Weg: Verifikationen laufen ab, und die meisten Kassenaufrufe
kommen nie bis zur Prüfung. Wer die Sitzung im Voraus erstellt, hat sie bei
einem langsam ausgefüllten Formular oft schon verloren.
Alternativ übergibst du verificationId und token direkt; die Sitzung wird
dann so verwendet, wie sie ist.
Optionen
| Option | Bedeutung |
|---|---|
el |
Zielelement oder CSS-Selektor |
apiBase |
Basis-URL der API |
createSession |
Rückruf, liefert {id, token, deeplink} – bevorzugt |
verificationId, token, deeplink |
Vorab erstellte Sitzung statt createSession |
profile |
Profilkennung, steuert die Wortwahl im Dialog |
title, intro |
Überschreiben Titel und Hinweistext der Zeile |
verified |
true zeigt sofort das Ergebnis – für bereits geprüfte Warenkörbe |
lang |
Sprache; ohne Angabe nach Dokumentsprache |
pollIntervalMs |
Abfrageabstand, Minimum 1500 ms, Standard 2500 ms |
fallback |
{label, onSelect} – alternatives Verfahren, siehe unten |
Ereignisse
Jedes Ereignis wird doppelt gemeldet: als Rückruf in den Optionen und als gepufferter DOM-Event auf dem Zielelement.
| Rückruf | Event | Wann |
|---|---|---|
onSuccess |
valyda:success |
Prüfung bestanden |
onFailure |
valyda:failure |
Prüfung abgelehnt oder nicht erfüllt |
onExpired |
valyda:expired |
Sitzung abgelaufen |
onError |
valyda:error |
Netzwerk- oder Erstellungsfehler |
onFallback |
valyda:fallback |
Kundin wählt das alternative Verfahren |
onRestart |
– | Kundin startet nach einem Fehlschlag neu |
document.querySelector('#valyda')
.addEventListener('valyda:success', () => form.submit())
Rückgabewert
mount liefert einen Griff mit open(), close(), refresh() und
destroy(). refresh() fragt den Status sofort ab, destroy() hält die
Abfrage an und räumt das Element leer – nötig, wenn deine Kasse ihr Markup neu
aufbaut.
Der Rückfallweg
Heute hat kaum jemand eine Wallet. Ohne Alternative verlierst du die Bestellung.
fallback: {
label: 'Ausweis hochladen',
onSelect() { meinBisherigesVerfahren() },
}
Der Eintrag erscheint als unauffälliger Link unter dem Dialog. Was danach
passiert, ist deine Sache – das Widget schliesst sich und meldet
valyda:fallback.
Was das Widget nicht ist
Es ist die sichtbare Hälfte. Der Erfolg im Browser ist kein Nachweis: Bevor du
die Bestellung freigibst, holt dein Server das Ergebnis selbst ab. onSuccess
ist der Auslöser dafür, nicht der Beweis.