Start · Sprachen · JavaScript · Referenz · PaymentAddress.toJSON()

PaymentAddress.toJSON()

Methode

Gibt ein einfaches Objekt mit allen Eigenschaften einer <code>PaymentAddress</code> zurück, das sich mit <code>JSON.stringify()</code> in JSON umwandeln lässt.

seit JavaScript Veraltet: nur Chromium-Browser und Safari, aus der deprecated seit ja Kategorie: webapi

Signatur

PaymentAddress.prototype.toJSON()

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

Typ
Object
Beschreibung
Ein einfaches Objekt mit den aktuellen Werten aller Adresseigenschaften. 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.' }
  );
});
DE 10115 Berlin

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));
[] {} ["addressLine", "city", "country", "dependentLocality", "organization", "phone", "postalCode", "recipient", "region", "sortingCode"]

// 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 shippingaddresschange werden aus Datenschutzgründen oft Felder wie addressLine, recipient oder phone gekürzt oder leer gelassen. Die vollständige Adresse gibt es erst in der PaymentResponse.
  • Adressdaten sind personenbezogen. Übertragen Sie sie nur verschlüsselt, prüfen Sie sie auf dem Server und speichern Sie sie entsprechend der DSGVO.