v149 · Web APIs · Payments

Error Log Replay

Select a payment scenario to run the full promise chain — from PaymentRequest.show() to the catch block — and see exactly which DOMException.name lands. Chrome 149 makes AbortError (user cancelled) distinct from OperationError (internal app failure) so merchant code can react correctly to each.

Payment handler setup

Install the handler, then select a scenario. Each scenario invokes a real PaymentRequest from that button click.
0runs
0AbortError
0OperationError
0other names
Promise trace
Select a scenario above to invoke PaymentRequest.show().
Awaiting scenario…
Run a scenario to inspect raw err.message and the parsed payload.
Merchant catch block — what you should write
try { const response = await request.show(); await response.complete('success'); } catch (err) { if (err.name === 'AbortError') { // User pressed Cancel — respect the decision, show "Continue shopping" showContinueShopping(); } else if (err.name === 'OperationError') { // Internal payment app failure — retry or offer an alternative method offerAlternativePayment(); } else { // NotSupportedError, SecurityError, etc. — not payment-handler specific showGenericError(err.message); } }

see also