Signatur
Beschreibung
Die Methode toJSON() der Schnittstelle PaymentAddress ist der eingebaute Serialisierer der Adresse. Sie liefert ein einfaches JavaScript-Objekt (keinen JSON-String), das die Werte aller lesbaren Eigenschaften der Adresse enthält, z. B. country, addressLine, region, city, dependentLocality, postalCode, sortingCode, organization, recipient und phone.
Wichtig ist das, weil die Eigenschaften einer PaymentAddress als Getter am Prototyp liegen und nicht direkt am Objekt. Object.keys() oder der Spread-Operator finden deshalb nichts. JSON.stringify() ruft toJSON() automatisch auf, sodass Sie die Liefer- oder Rechnungsadresse direkt serialisieren und z. B. per fetch() an Ihren Server schicken können.
Solche Objekte bekommen Sie über die Payment Request API: über PaymentRequest.shippingAddress (etwa im Ereignis shippingaddresschange), über PaymentResponse.shippingAddress oder über PaymentMethodChangeEvent/billingAddress je nach Zahlungsart.
Rückgabewert
addressLine ist ein Array aus Strings, die übrigen Felder sind Strings. Nicht angegebene Felder sind leere Strings.Beispiele
Lieferadresse nach dem Bezahlen an den Server senden
const request = new PaymentRequest(
[{ supportedMethods: 'https://example.com/pay' }],
{
total: { label: 'Summe', amount: { currency: 'EUR', value: '49.90' } },
shippingOptions: [{
id: 'standard', label: 'Standardversand', selected: true,
amount: { currency: 'EUR', value: '0.00' }
}]
},
{ requestShipping: true }
);
const checkout = async () => {
const response = await request.show();
// JSON.stringify ruft toJSON() automatisch auf
const res = await fetch('/api/orders', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ shipping: response.shippingAddress })
});
await response.complete(res.ok ? 'success' : 'fail');
};
document.querySelector('#buy').addEventListener('click', checkout);
Adresse im shippingaddresschange-Ereignis prüfen
request.addEventListener('shippingaddresschange', (event) => {
const address = request.shippingAddress.toJSON();
console.log(address.country, address.postalCode, address.city);
event.updateWith(
address.country === 'DE'
? { total: { label: 'Summe', amount: { currency: 'EUR', value: '49.90' } } }
: { error: 'Wir liefern leider nur innerhalb Deutschlands.' }
);
});
Warum toJSON() statt Spread nötig ist
const addr = response.shippingAddress;
console.log(Object.keys(addr)); // Getter liegen am Prototyp
console.log({ ...addr }); // leeres Objekt
const plain = addr.toJSON();
console.log(Object.keys(plain));
// Wichtig · Fallstricke
Veraltet: PaymentAddress wurde aus der Payment-Request-Spezifikation entfernt und in ContactAddress umbenannt. Die Funktionen für Liefer- und Rechnungsadressen gelten als veraltet. Firefox hat sie nie standardmäßig aktiviert. In neuem Code sollten Sie deshalb eine Funktionsprüfung einbauen, z. B. typeof addr?.toJSON === 'function', und notfalls ein eigenes Adressformular anbieten.
- Die Methode liefert ein Objekt, keinen String. Einen JSON-String bekommen Sie erst mit
JSON.stringify(). - Die Payment Request API funktioniert nur in einem sicheren Kontext (HTTPS), und
show()muss durch eine Nutzeraktion ausgelöst werden. - Im Ereignis
shippingaddresschangewerden aus Datenschutzgründen oft Felder wieaddressLine,recipientoderphonegekürzt oder leer gelassen. Die vollständige Adresse gibt es erst in derPaymentResponse. - Adressdaten sind personenbezogen. Übertragen Sie sie nur verschlüsselt, prüfen Sie sie auf dem Server und speichern Sie sie entsprechend der DSGVO.