- From: Rouslan Solomakhin <notifications@github.com>
- Date: Thu, 27 Apr 2017 09:05:28 -0700
- To: w3c/browser-payment-api <browser-payment-api@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <w3c/browser-payment-api/issues/403/297760557@github.com>
I'm not opposed to instantiating `PaymentRequest` with dummy data to find out whether `.canMakePayment()` will return `true`.
```javascript
// The page has loaded. Should the page use PaymentRequest?
// If PaymentRequest fails, should the page fallback to manual
// web form checkout?
const supportedPaymentMethods = ...
let shouldCallPaymentRequest = true;
let fallbackToLegacyOnPaymentRequestFailure = false;
(new PaymentRequest(supportedPaymentMethods,
{total: {label: 'Stub', amount: {currency: 'USD', value: '0.01'}}})
.canMakePayment()
.then(function(result) {
shouldCallPaymentRequest = result;
}).catch(function(error) {
console.log(error);
// The user may have turned off query ability in their privacy settings.
// Let's use PaymentRequest by default and fallback to legacy
// web form based checkout.
shouldCallPaymentRequest = true;
fallbackToLegacyOnPaymentRequestFailure = true;
});
// User has clicked on the checkout button. We know
// what's in the cart, but we don't have a `Checkout` object.
function onCheckoutButtonClicked(lineItems) {
callServerToRetrieveCheckoutDetails(lineItems);
}
// The server has constructed the `Checkout` object. Now we know
// all of the prices and shipping options.
function onServerCheckoutDetailsRetrieved(checkoutObject) {
if (shouldCallPaymentRequest) {
const request = new PaymentRequest(supportedPaymentMethods, checkoutObject);
request.show().then(function(paymentResponse) {
// Post the results to the server and call `paymeResponse.complete()`.
}).catch(function(error) {
console.log(error);
if (fallbackToLegacyOnPaymentRequestFailure) {
window.location.href = '/legacy-web-form-checkout';
} else {
showCheckoutErrorToUser();
}
});
} else {
window.location.href = '/legacy-web-form-checkout';
}
}
```
If you call `.canMakePayment()` multiple times, keep in mind that the first parameter to the `PaymentRequest` constructor should contain the same data
--
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/browser-payment-api/issues/403#issuecomment-297760557
Received on Thursday, 27 April 2017 16:06:26 UTC