Spec-Zone.ru › Web APIs

PaymentResponse: метод retry()

Ограниченная доступность

Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Защищённый контекст: Эта функция доступна только в защищённых контекстах (HTTPS), в некоторых или во всех поддерживающих браузерах.

Метод retry() интерфейса PaymentResponse позволяет попросить пользователя повторить платеж после возникновения ошибки во время обработки.

Это позволяет вашему приложению корректно обрабатывать ситуации, такие как неверный адрес доставки или отказ по кредитной карте.

Синтаксис

retry(errorFields)

Параметры

errorFields

Объект со следующими свойствами:

error Необязательно

Общее описание ошибки платежа, из которой пользователь может попытаться восстановиться, повторно запросив платеж, возможно, после исправления ошибок в информации о платеже. error может быть предоставлен сам по себе для отображения только общего сообщения об ошибке или в сочетании с другими свойствами для предоставления обзора, а значения других свойств указывают пользователю на ошибки в определённых полях платежной формы.

`paymentMethod Необязательно

Любые ошибки, специфичные для способа оплаты, которые могли возникнуть. Содержимое этого объекта будет отличаться в зависимости от используемого способа оплаты.

Возвращаемое значение

Объект Promise, который разрешается, когда платеж успешно завершен. Обещание отклоняется с соответствующим значением исключения, если платеж снова терпит неудачу.

Обычно вы будете использовать это, вызывая show(), а затем вводя цикл или рекурсивную функцию, которая проверяет PaymentResponse на наличие ошибок или других причин для повторного запроса платежа. Если требуется повторная попытка, цикл вызывает retry(), а затем возвращается к проверке ответа, когда он поступает. Цикл завершается только когда пользователь отменяет запрос платежа или запрос успешно выполняется.

См. пример ниже для более подробного примера, но основная концепция в виде списка пунктов:

  1. Создайте новый PaymentRequest (new PaymentRequest())

  2. Отобразите запрос на оплату (PaymentRequest.show())

  3. Если show() разрешается, возвращённый PaymentResponse описывает запрашиваемый платеж и выбранные пользователем параметры. Продолжайте с следующих шагов:

    1. Проверьте возвращённый ответ; если есть какие-либо поля, значения которых неприемлемы, вызовите метод complete() ответа со значением "fail" для обозначения ошибки.
    2. Если данные ответа действительны и приемлемы, вызовите complete("success") для завершения платежа и его обработки.
  4. Если 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API