Start · Sprachen · JavaScript · Referenz · new PaymentRequestEvent()

new PaymentRequestEvent()

Methode

Erstellt ein neues <code>PaymentRequestEvent</code>-Objekt. Das ist das Ereignis, das ein Zahlungs-Handler im Service Worker bei einer Zahlungsanfrage erhält.

seit JavaScript Experimentell: Chromium 70+ (Chrome, Edge, Opera), Kategorie: webapi

Signatur

new PaymentRequestEvent(type, options)

Beschreibung

Der Konstruktor PaymentRequestEvent() gehört zur Payment Handler API. Er erzeugt ein Ereignisobjekt vom Typ PaymentRequestEvent, das von ExtendableEvent erbt. Solche Ereignisse bekommt ein Service Worker, der sich als Zahlungs-Handler (Payment App) registriert hat, sobald eine Händlerseite über new PaymentRequest(...).show() eine Zahlung anstößt.

Im normalen Betrieb erzeugt und versendet der Browser das Ereignis selbst, und zwar als paymentrequest-Ereignis im ServiceWorkerGlobalScope. Den Konstruktor ruft man selbst fast nur für Unit-Tests, zum Simulieren von Zahlungsanfragen während der Entwicklung oder für eine eigene Ereignisverteilung innerhalb des Service Workers auf.

Im options-Objekt stehen die Daten, die später über die Eigenschaften des Ereignisses lesbar sind: unterstützte Zahlungsmethoden (methodData), Gesamtbetrag (total), Modifikatoren, Herkunft der Anfrage und die Anfrage-ID. Die wichtigen Methoden des Ereignisses sind respondWith() und openWindow(). Sie funktionieren aber nur bei Ereignissen, die der Browser vertrauenswürdig ausgelöst hat.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses. Für echte Zahlungsanfragen immer "paymentrequest".
$options object {} Initialisierungsobjekt. Es kann neben den Optionen von ExtendableEventInit diese Felder enthalten:
  • methodData (Array<PaymentMethodData>): unterstützte Zahlungsmethoden, jeweils mit supportedMethods und optional data
  • modifiers (Array<PaymentDetailsModifier>): abweichende Beträge oder Daten je nach Zahlungsmethode
  • paymentRequestId (string): ID der ursprünglichen PaymentRequest
  • paymentRequestOrigin (string): Herkunft (Origin), die die Anfrage erzeugt hat
  • topOrigin (string): Herkunft des obersten Dokuments
  • total (PaymentCurrencyAmount): Gesamtbetrag mit currency und value

Rückgabewert

Typ
PaymentRequestEvent
Beschreibung
Ein neues PaymentRequestEvent-Objekt. Seine Eigenschaften enthalten die Werte aus options.

Beispiele

Ereignis im Service Worker für einen Test erzeugen

// sw.js – nur im ServiceWorkerGlobalScope verfügbar
const testEvent = new PaymentRequestEvent('paymentrequest', {
  methodData: [{ supportedMethods: 'https://bobbucks.dev/pay' }],
  total: { currency: 'EUR', value: '19.99' },
  paymentRequestId: 'bestellung-4711',
  paymentRequestOrigin: 'https://shop.example',
  topOrigin: 'https://shop.example'
});

console.log(testEvent.type);
console.log(testEvent.total.value, testEvent.total.currency);
console.log(testEvent.methodData[0].supportedMethods);
paymentrequest 19.99 EUR https://bobbucks.dev/pay

Echtes paymentrequest-Ereignis im Zahlungs-Handler verarbeiten

// sw.js einer Payment App
self.addEventListener('paymentrequest', (event) => {
  console.log(`Zahlung über ${event.total.value} ${event.total.currency}`,
    `angefragt von ${event.paymentRequestOrigin}`);

  // Antwort als Promise liefern; der Browser wartet darauf
  event.respondWith((async () => {
    // Hier würde normalerweise eine Zahlung autorisiert werden
    return {
      methodName: event.methodData[0].supportedMethods,
      details: { token: 'demo-token-123' }
    };
  })());
});
Zahlung über 19.99 EUR angefragt von https://shop.example

Eigene Logik mit einem simulierten Ereignis testen

// sw.js – Handler-Logik als eigene Funktion, damit sie testbar ist
const beschreibeAnfrage = (event) => ({
  id: event.paymentRequestId,
  betrag: Number(event.total.value),
  methoden: event.methodData.map((m) => m.supportedMethods)
});

self.addEventListener('paymentrequest', (event) => {
  console.log(beschreibeAnfrage(event));
});

// Simulation während der Entwicklung
const simuliert = new PaymentRequestEvent('paymentrequest', {
  methodData: [{ supportedMethods: 'https://pay.example/methode' }],
  total: { currency: 'EUR', value: '5.00' },
  paymentRequestId: 'test-1'
});
console.log(beschreibeAnfrage(simuliert));
{ id: 'test-1', betrag: 5, methoden: ['https://pay.example/methode'] }

// Wichtig · Fallstricke

  • Experimentell: Die Payment Handler API gibt es nur in Chromium-Browsern (Chrome, Edge, Opera). Firefox und Safari unterstützen sie nicht. Vorher prüfen, z. B. mit 'PaymentRequestEvent' in self.
  • Nur im Service Worker: Den Konstruktor gibt es ausschließlich im ServiceWorkerGlobalScope. Im Fenster-Kontext führt der Aufruf zu einem ReferenceError.
  • Nicht vertrauenswürdig: Selbst erzeugte Ereignisse haben isTrusted === false. respondWith() und openWindow() lösen darauf keine echte Zahlung aus bzw. öffnen kein Fenster. Selbst gebaute Ereignisse eignen sich daher nur für Tests.
  • Sicherheit: Die Werte in paymentRequestOrigin, topOrigin und total niemals ungeprüft übernehmen. Beträge und Händler muss der Server des Zahlungsanbieters zusätzlich prüfen. Die API funktioniert nur in sicheren Kontexten (HTTPS).
  • total.value ist ein String (z. B. \"19.99\"). Vor Berechnungen umwandeln und Rundungsfehler bei Gleitkommazahlen beachten.