Start · Sprachen · JavaScript · Referenz · PaymentManager.enableDelegations()

PaymentManager.enableDelegations()

Methode

Legt fest, dass die Zahlungs-App selbst Angaben wie Lieferadresse, Name, E-Mail oder Telefon des Zahlenden liefert, statt dass der Browser sie abfragt.

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

Signatur

PaymentManager.prototype.enableDelegations(delegations)

Beschreibung

Die Methode enableDelegations() gehört zur Schnittstelle PaymentManager der Payment Handler API. Mit ihr teilt eine webbasierte Zahlungs-App dem Browser mit, welche Teile der Zahlungsinformationen sie selbst bereitstellt. Dazu gehören die Lieferadresse und die Kontaktdaten des Zahlenden (Name, E-Mail, Telefon). Ohne Delegation fragt der Browser diese Daten in seiner eigenen Oberfläche ab, wenn ein Händler sie per PaymentRequest anfordert (zum Beispiel mit requestShipping: true oder requestPayerEmail: true).

Die Methode rufst du über die Service-Worker-Registrierung der Zahlungs-App auf: registration.paymentManager.enableDelegations([...]). Das geschieht meist direkt nach der Registrierung des Service Workers, also bei der Installation oder Einrichtung der Zahlungs-App.

Das lohnt sich vor allem bei Wallet-Diensten, die Adressen und Kontaktdaten der Nutzer ohnehin schon gespeichert haben. So muss niemand dieselben Daten zweimal eingeben, und der Bezahlvorgang geht schneller. Wer delegiert, übernimmt aber auch die Pflicht: Die App muss die zugesagten Felder in der Antwort auf das paymentrequest-Ereignis tatsächlich mitliefern.

Parameter

Name Typ Default Beschreibung
$delegations Pflicht Array<string> Liste der Angaben, die die Zahlungs-App übernimmt. Erlaubte Werte: "shippingAddress" (Lieferadresse und Versandoption), "payerName", "payerEmail", "payerPhone". Bei ungültigen Werten wird das Promise mit einem TypeError abgelehnt.

Rückgabewert

Typ
Promise<undefined>
Beschreibung
Ein Promise, das ohne Wert erfüllt wird, sobald die Delegationen gespeichert sind. Bei einem Fehler wird es abgelehnt.

Beispiele

Delegationen direkt nach der Service-Worker-Registrierung aktivieren

// Im Seitenkontext der Zahlungs-App (z. B. Einrichtungsseite)
const setupPaymentApp = async () => {
  if (!('serviceWorker' in navigator)) return;

  const registration = await navigator.serviceWorker.register('/payment-sw.js');
  await navigator.serviceWorker.ready;

  if (!registration.paymentManager?.enableDelegations) {
    console.warn('enableDelegations() wird nicht unterstützt');
    return;
  }

  await registration.paymentManager.enableDelegations([
    'shippingAddress',
    'payerName',
    'payerEmail'
  ]);
  console.log('Delegationen aktiviert');
};

setupPaymentApp().catch(console.error);
Delegationen aktiviert

Delegierte Daten im Service Worker zurückgeben

// payment-sw.js
self.addEventListener('paymentrequest', (event) => {
  event.respondWith((async () => {
    // In der Praxis: Daten aus dem Nutzerkonto der Wallet laden
    return {
      methodName: 'https://wallet.example/pay',
      details: { token: 'tok_123' },
      payerName: 'Erika Mustermann',
      payerEmail: 'erika@example.de',
      shippingAddress: {
        country: 'DE',
        addressLine: ['Hauptstraße 1'],
        city: 'Berlin',
        postalCode: '10115',
        recipient: 'Erika Mustermann',
        region: '',
        dependentLocality: '',
        sortingCode: '',
        organization: '',
        phone: ''
      },
      shippingOption: event.shippingOptions?.[0]?.id ?? 'standard'
    };
  })());
});

Fehler bei ungültigen Werten abfangen

const registration = await navigator.serviceWorker.ready;

try {
  await registration.paymentManager.enableDelegations(['billingAddress']);
} catch (err) {
  console.error(err.name, err.message);
}
TypeError ... is not a valid enum value of type PaymentDelegation

// Wichtig · Fallstricke

  • Experimentell: Die Methode gibt es nur in Chromium-Browsern, Firefox und Safari unterstützen sie nicht. Prüfe deshalb vor dem Aufruf, ob registration.paymentManager?.enableDelegations existiert.
  • Die Methode funktioniert nur in einem sicheren Kontext (HTTPS) und nur, wenn für den Scope ein Service Worker registriert ist.
  • "billingAddress" ist kein gültiger Wert. Die Rechnungsadresse gehört zu den zahlungsmethodenspezifischen details.
  • Wer etwas delegiert, muss die Daten auch liefern. Fehlt zum Beispiel shippingAddress in der Antwort, obwohl der Händler sie angefordert hat, lehnt der Browser die Zahlungsantwort ab.
  • Die Delegationen gelten für die Registrierung dauerhaft. Ein neuer Aufruf ersetzt die bisherige Liste.
  • Datenschutz: Adress- und Kontaktdaten sind personenbezogen. Gib sie nur weiter, wenn der Nutzer in der Zahlungs-App ausdrücklich zugestimmt hat.