Start · Sprachen · JavaScript · Referenz · PaymentResponse.requestId

PaymentResponse.requestId

Eigenschaft

Schreibgeschützte Eigenschaft, die den Bezeichner der ursprünglichen Zahlungsanfrage liefert, also den Wert aus <code>details.id</code> im <code>PaymentRequest()</code>-Konstruktor.

seit JavaScript Chrome/Edge 60+, Safari 11.1+; Firefox: nicht stan Kategorie: webapi

Signatur

get PaymentResponse.requestId

Beschreibung

PaymentResponse.requestId gibt einen string zurück, der die Zahlungsanfrage eindeutig kennzeichnet, aus der diese Antwort entstanden ist. Der Wert ist derselbe wie PaymentRequest.id. Du legst ihn fest, indem du beim Erzeugen der Anfrage im details-Objekt die Eigenschaft id setzt: new PaymentRequest(methods, { id: "order-4711", total: … }).

Setzt du keine id, erzeugt der Browser selbst einen eindeutigen Bezeichner, meist eine UUID. Die MDN-Formulierung „über den PaymentResponse()-Konstruktor“ ist ungenau: PaymentResponse hat keinen öffentlichen Konstruktor. Die Antwort bekommst du ausschließlich als Ergebnis von PaymentRequest.prototype.show().

Praktisch nützlich ist die Eigenschaft beim Abgleich mit dem Backend: Gib als id deine Bestell- oder Transaktionsnummer mit. Dann kannst du die Antwort samt Zahlungsdaten (details) eindeutig der richtigen Bestellung zuordnen, auch wenn mehrere Zahlungsvorgänge parallel laufen oder erneut versucht werden. Außerdem eignet sie sich für Protokollierung und Fehlersuche.

Rückgabewert

Typ
string
Beschreibung
Der Bezeichner der zugehörigen PaymentRequest, also der selbst gesetzte Wert aus details.id oder ein vom Browser erzeugter eindeutiger Bezeichner. Schreibgeschützt.

Beispiele

Eigene Bestellnummer als requestId verwenden

const methods = [{ supportedMethods: "https://google.com/pay", data: { /* Konfiguration */ } }];
const details = {
  id: "order-4711", // eigener Bezeichner
  total: { label: "Gesamt", amount: { currency: "EUR", value: "49.90" } }
};

document.querySelector("#pay").addEventListener("click", async () => {
  const request = new PaymentRequest(methods, details);
  const response = await request.show();
  console.log(response.requestId);          // "order-4711"
  console.log(response.requestId === request.id); // true
  await response.complete("success");
});
order-4711 true

Zahlung serverseitig der Bestellung zuordnen

const pay = async (orderId, amount) => {
  const request = new PaymentRequest(
    [{ supportedMethods: "https://google.com/pay", data: {} }],
    { id: orderId, total: { label: "Bestellung", amount: { currency: "EUR", value: amount } } }
  );
  const response = await request.show();
  try {
    const res = await fetch("/api/payments", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        orderId: response.requestId, // eindeutige Zuordnung
        methodName: response.methodName,
        details: response.details
      })
    });
    await response.complete(res.ok ? "success" : "fail");
  } catch {
    await response.complete("fail");
  }
};

document.querySelector("#pay").addEventListener("click", () => pay("order-4712", "19.99"));

Vom Browser erzeugte ID ohne details.id

document.querySelector("#pay").addEventListener("click", async () => {
  const request = new PaymentRequest(
    [{ supportedMethods: "https://google.com/pay", data: {} }],
    { total: { label: "Spende", amount: { currency: "EUR", value: "5.00" } } }
  );
  const response = await request.show();
  // Automatisch erzeugter Bezeichner, z. B. eine UUID
  console.log(`Zahlungsvorgang ${response.requestId}`);
  await response.complete("success");
});
Zahlungsvorgang 3f2b8c1e-9a4d-4e57-b0c2-7d1e6a9f5b21

// Wichtig · Fallstricke

  • Kein Sicherheitsmerkmal: Die requestId kommt vom Client und lässt sich manipulieren. Prüfe auf dem Server immer, ob die Bestellung existiert, und prüfe Betrag und Status gegen deine eigenen Daten.
  • Keine sensiblen Daten als id verwenden, zum Beispiel keine Kundennamen oder E-Mail-Adressen. Der Wert kann an den Zahlungsdienstleister weitergegeben werden.
  • PaymentResponse lässt sich nicht selbst per Konstruktor erzeugen. Die Instanz kommt immer von PaymentRequest.show().
  • Wird die Antwort über PaymentResponse.retry() neu angefordert, bleibt die requestId gleich.
  • Kompatibilität: Die Payment Request API gibt es nur in sicheren Kontexten (HTTPS). show() braucht eine Nutzeraktion, etwa einen Klick. Chromium-Browser und Safari unterstützen sie. In Firefox ist sie standardmäßig nicht verfügbar. Deshalb vorher mit "PaymentRequest" in window prüfen.