PaymentResponse: retry()-Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Die Methode retry() des Interfaces PaymentResponse ermöglicht es, den Benutzer nach einem Fehler bei der Verarbeitung aufzufordern, eine Zahlung erneut zu versuchen.
So kann Ihre Anwendung mit Situationen wie ungültigen Lieferadressen oder abgelehnten Kreditkarten umgehen.
Syntax
retry(errorFields)
Parameter
errorFields-
Ein Objekt mit den folgenden Eigenschaften:
errorOptional-
Eine allgemeine Beschreibung eines Zahlungsfehlers, den der Benutzer möglicherweise durch einen erneuten Zahlungsversuch beheben kann, gegebenenfalls nachdem er Fehler in den Zahlungsinformationen korrigiert hat.
errorkann allein angegeben werden, um nur eine allgemeine Fehlermeldung anzuzeigen, oder zusammen mit den anderen Eigenschaften als Überblick dienen, während deren Werte den Benutzer auf Fehler in bestimmten Feldern des Zahlungsformulars hinweisen. paymentMethodOptional-
Etwaige Fehler, die für die verwendete Zahlungsmethode spezifisch sind. Der Inhalt dieses Objekts hängt von der verwendeten Zahlungsmethode ab.
Rückgabewert
Ein Promise, das erfüllt wird, wenn die Zahlung erfolgreich abgeschlossen wurde. Schlägt die Zahlung erneut fehl, wird das Promise mit einem entsprechenden Fehlerwert zurückgewiesen.
Üblicherweise rufen Sie dazu zunächst show() auf und prüfen dann in einer Schleife oder rekursiven Funktion die PaymentResponse auf Fehler oder andere Gründe, die Zahlungsanforderung erneut zu versuchen. Ist ein erneuter Versuch nötig, ruft die Schleife retry() auf und prüft die eingehende Antwort erneut. Die Schleife endet erst, wenn der Benutzer die Zahlungsanforderung abbricht oder die Anforderung erfolgreich ist.
Ein ausführliches Beispiel finden Sie unter Beispiele. Der grundlegende Ablauf ist:
-
Erstellen Sie eine neue
PaymentRequest(newPaymentRequest()). -
Zeigen Sie die Zahlungsanforderung an (
PaymentRequest.show()). -
Wenn
show()erfüllt wird, beschreibt die zurückgegebenePaymentResponsedie angeforderte Zahlung und die vom Benutzer gewählten Optionen. Fahren Sie wie folgt fort:- Validieren Sie die zurückgegebene Antwort. Wenn Werte in einem oder mehreren Feldern nicht akzeptabel sind, rufen Sie die Methode
complete()der Antwort mit dem Wert"fail"auf, um einen Fehlschlag anzuzeigen. - Wenn die Daten der Antwort gültig und akzeptabel sind, rufen Sie
complete("success")auf, um die Zahlung abzuschließen und zu verarbeiten.
- Validieren Sie die zurückgegebene Antwort. Wenn Werte in einem oder mehreren Feldern nicht akzeptabel sind, rufen Sie die Methode
-
Wenn
show()zurückgewiesen wird, ist die Zahlungsanforderung fehlgeschlagen. Dies liegt meist daran, dass bereits eine Zahlungsanforderung verarbeitet wird, der User-Agent keine der angegebenen Zahlungsmethoden unterstützt oder ein Sicherheitsproblem vorliegt. Weitere Einzelheiten finden Sie in der Liste der Ausnahmen fürshow(). Rufen Siecomplete("fail")auf, um die Zahlungsanforderung zu schließen.
async function handlePayment() {
const payRequest = new PaymentRequest(methodData, details, options);
try {
let payResponse = await payRequest.show();
while (validate(payResponse)) {
/* let the user edit the payment information,
wait until they submit */
await response.retry();
}
await payResponse.complete("success");
} catch (err) {
/* handle the exception */
}
}
Beispiele
async function doPaymentRequest() {
const request = new PaymentRequest(methodData, details, options);
const response = await request.show();
await recursiveValidate(request, response);
await response.complete("success");
}
// Keep validating until the data looks good!
async function recursiveValidate(request, response) {
const promisesToFixThings = [];
const errors = await validate(request, response);
if (!errors) {
return;
}
if (errors.shippingAddress) {
// "shippingaddresschange" fired at request object
const promise = fixField(
request,
"shippingaddresschange",
shippingValidator,
);
promisesToFixThings.push(promise);
}
if (errors.payer) {
// "payerdetailchange" fired at response object
const promise = fixField(response, "payerdetailchange", payerValidator);
promisesToFixThings.push(promise);
}
await Promise.all([response.retry(errors), ...promisesToFixThings]);
await recursiveValidate(request, response);
}
function fixField(requestOrResponse, event, validator) {
return new Promise((resolve) => {
// Browser keeps calling this until promise resolves.
requestOrResponse.addEventListener(event, async function listener(ev) {
const promiseToValidate = validator(requestOrResponse);
ev.updateWith(promiseToValidate);
const errors = await promiseToValidate;
if (!errors) {
// yay! fixed!
event.removeEventListener(event, listener);
resolve();
}
});
});
}
doPaymentRequest();
Spezifikationen
| Spezifikation |
|---|
| Payment Request API> # dom-paymentresponse-retry> |
Browser-Kompatibilität
Siehe auch
- Interface
PaymentResponse.