Signatur
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
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);
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);
}
// 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?.enableDelegationsexistiert. - 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 zahlungsmethodenspezifischendetails.- Wer etwas delegiert, muss die Daten auch liefern. Fehlt zum Beispiel
shippingAddressin 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.