Re: [w3c/payment-request] Retrying a payment (#705)

async function doPaymentRequest() {
  const request = new PaymentRequest(methodData, details, options);
  const response = await request.show();
  const validator = new Validator(); // user code
  // collect any errors from response
  const {
    shippingAddressErrors,
    payerErrors,
    paymentMethodErrors, // <- needs exploration.
  } = await validator.validateResponse(response);
  // Ok, we got bad input... let's get the user to fix those!
  if (shippingAddressErrors || payerErrors || paymentMethodErrors) {
    const promisesToFixThings = [];
    // let's make sure the shipping address is fixed
    if (shippingAddressErrors) {
      const promiseToFixAddress = new Promise(resolve => {
        // Browser keeps calling this until promise resolves.
        response.onpaymentaddresschange = async ev => {
          const promiseToValidate = validator.validateShippingAddress(response);
          ev.updateWith(promiseToValidate);
          // we could abort here via try/catch
          const errors = await promiseToValidate;
          if (!errors) {
            resolve(); // yay! Address is fixed!
          }
        };
      });
      promisesToFixThings.push(promiseToFixAddress);
    }
    if (payerErrors) {
      // As above for payer errors
    }
    response.retry({ shippingAddressErrors, payerErrors });
    await Promise.all(promisesToFixThings);
  }
  await response.complete("success");
}
- [x] - doPaymentRequest();[
async function doPaymentRequest() {
  const request = new PaymentRequest(methodData, details, options);
  const response = await request.show();
  const validator = new Validator(); // user code
  // collect any errors from response
  const {
    shippingAddressErrors,
    payerErrors,
    paymentMethodErrors, // <- needs exploration.
  } = await validator.validateResponse(response);
  // Ok, we got bad input... let's get the user to fix those!
  if (shippingAddressErrors || payerErrors || paymentMethodErrors) {
    const promisesToFixThings = [];
    // let's make sure the shipping address is fixed
    if (shippingAddressErrors) {
      const promiseToFixAddress = new Promise(resolve => {
        // Browser keeps calling this until promise resolves.
        response.onpaymentaddresschange = async ev => {
          const promiseToValidate = validator.validateShippingAddress(response);
          ev.updateWith(promiseToValidate);
          // we could abort here via try/catch
          const errors = await promiseToValidate;
          if (!errors) {
            resolve(); // yay! Address is fixed!
          }
        };
      });
      promisesToFixThings.push(promiseToFixAddress);
    }
    if (payerErrors) {
      // As above for payer errors
    }
    response.retry({ shippingAddressErrors, payerErrors });
    await Promise.all(promisesToFixThings);
  }
  await response.complete("success");
}
doPaymentRequest();]()

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/w3c/payment-request/issues/705#issuecomment-861444937

Received on Tuesday, 15 June 2021 12:11:41 UTC