PaymentResponse: метод retry()
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.
Защищённый контекст: Эта функция доступна только в защищённых контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.
Метод retry() интерфейса PaymentResponse позволяет попросить пользователя повторить платеж после возникновения ошибки во время обработки.
Это позволяет вашему приложению корректно обрабатывать ситуации, такие как неверный адрес доставки или отказ по кредитной карте.
Синтаксис
retry(errorFields)
Параметры
errorFields-
Объект со следующими свойствами:
errorНеобязательно-
Общее описание ошибки платежа, из которой пользователь может попытаться восстановиться, повторно запросив платеж, возможно, после исправления ошибок в информации о платеже.
errorможет быть предоставлен сам по себе для отображения только общего сообщения об ошибке или в сочетании с другими свойствами для предоставления обзора, а значения других свойств указывают пользователю на ошибки в определённых полях платежной формы. - `paymentMethod Необязательно
-
Любые ошибки, специфичные для способа оплаты, которые могли возникнуть. Содержимое этого объекта будет отличаться в зависимости от используемого способа оплаты.
Возвращаемое значение
Объект Promise, который разрешается, когда платеж успешно завершен. Обещание отклоняется с соответствующим значением исключения, если платеж снова терпит неудачу.
Обычно вы будете использовать это, вызывая show(), а затем вводя цикл или рекурсивную функцию, которая проверяет PaymentResponse на наличие ошибок или других причин для повторного запроса платежа. Если требуется повторная попытка, цикл вызывает retry(), а затем возвращается к проверке ответа, когда он поступает. Цикл завершается только когда пользователь отменяет запрос платежа или запрос успешно выполняется.
См. пример ниже для более подробного примера, но основная концепция в виде списка пунктов:
-
Создайте новый
PaymentRequest(newPaymentRequest()) -
Отобразите запрос на оплату (
PaymentRequest.show()) -
Если
show()разрешается, возвращённыйPaymentResponseописывает запрашиваемый платеж и выбранные пользователем параметры. Продолжайте с следующих шагов:- Проверьте возвращённый ответ; если есть какие-либо поля, значения которых неприемлемы, вызовите метод
complete()ответа со значением"fail"для обозначения ошибки. - Если данные ответа действительны и приемлемы, вызовите
complete("success")для завершения платежа и его обработки.
- Проверьте возвращённый ответ; если есть какие-либо поля, значения которых неприемлемы, вызовите метод
-
Если
show()отклоняется, запрос на платеж не удался, обычно потому, что либо уже обрабатывается платеж, либо пользовательский агент не поддерживает ни один из указанных способов оплаты, или из-за проблемы безопасности. См. список исключений дляshow()для получения дополнительной информации. Вызовитеcomplete("fail")для закрытия запроса на оплату.
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 */
}
}
Примеры
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();
Спецификации
| Спецификация |
|---|
| API запроса на оплату # dom-paymentresponse-retry |
Совместимость с браузерами
| Десктоп | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
retry |
78 | 79 | 55 | 47 | 12.1 | 78 | Нет | 43 | 11.3 | 10.0 | Нет |
См. также
-
PaymentResponseинтерфейс.
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/PaymentResponse/retry