On This Page
Handle Errors
The
Unified Checkout
SDK uses a structured error object for all error
scenarios. Errors are returned as exceptions from asynchronous methods and are also
returned as events for centralized handling.UnifiedCheckoutError
All SDK errors are instances of
UnifiedCheckoutError
with these
properties:Property | Type | Description |
|---|---|---|
correlationId | string? | The correlation ID from an underlying API call, when
applicable. |
details | unknown? | Additional error-specific information. This is often an array of
objects. |
informationLink | string? | The URL linked to the online documentation for this
error. |
message | string | This property is a human-readable description of the
error. |
name | string | The value is always
"UnifiedCheckoutError" . |
reason | string | This property is a machine-readable error code, such as
"CAPTURE_CONTEXT_INVALID" . |
Detect Errors
Errors may be serialized through
postMessage
. Barclays
recommends that you use the name
property
instead of
instanceof
:try { const result = await checkout.mount('#buttons'); } catch (error) { if (error.name === 'UnifiedCheckoutError') { // Access error.reason, error.message, error.details } }
You can also write a helper function that can be
reused:
function isUnifiedCheckoutError(obj) { return ( obj !== null && typeof obj === 'object' && obj.name === 'UnifiedCheckoutError' && typeof obj.reason === 'string' && typeof obj.message === 'string' ); }
Error Handling Patterns
Try/Catch
try { const client = await VAS.UnifiedCheckout(sessionJWT); const checkout = await client.createCheckout(); const result = await checkout.mount('#buttons'); } catch (error) { console.error(error.reason, error.message); }
Promise .catch()
VAS.UnifiedCheckout(sessionJWT) .then(client => client.createCheckout()) .then(checkout => checkout.mount('#buttons')) .catch(error => console.error(error.reason, error.message));
Centralized Error Logging via Events
Errors from all integrations are applicable up to the client level. Use
client.on('error')
for centralized
logging:const client = await VAS.UnifiedCheckout(sessionJWT); client.on('error', (err) => { errorReporter.send({ source: err.source, // "checkout", "trigger", "button", or "client" code: err.code, message: err.message }); });
Barclays
recommends that you do this as it catches errors from all
checkouts, triggers, and buttons created from this client instance.Error Codes
Initialization Errors
These errors are returned during
VAS.UnifiedCheckout(sessionJWT)
:Reason | Description |
|---|---|
CAPTURE_CONTEXT_EXPIRED | The supplied JWT has expired. Generate a new session. |
CAPTURE_CONTEXT_INVALID | The session JWT is not valid. For example, it has a bad signature
or is malformed. |
UNUSED_TARGET_ORIGINS | One or more targetOrigins in the session do not
match the current page origin. The details array
lists the unused origins. |
Mount Errors
These errors are returned during
checkout.mount()
or
trigger.mount()
:Reason | Description |
|---|---|
CHECKOUT_ALREADY_MOUNTED | The checkout or trigger is already mounted. Call
unmount() first, or create a new
instance. |
MOUNT_CONTAINER_SELECTOR | The CSS selector does not match any Document Object Model (DOM)
element. Check that the container exists before calling
mount() . |
MOUNT_ERROR | A problem occurred loading the payment iframe. |
MOUNT_INVALID_CONTAINER | The supplied container parameter is not a valid CSS selector
string or HTMLElement . |
MOUNT_PAYMENT_TIMEOUT | A payment method timed out during initialization. |
MOUNT_PAYMENT_UNAVAILABLE | No payment types could be presented to the customer. This may be
due to browser or device support, or errors during checkout
initialization. |
MOUNT_SIDEBAR_OPTIONS | The supplied container parameter is invalid for sidebar
mode. |
MOUNT_TOKEN_TIMEOUT | Token creation timed out during mount. This may indicate a
network issue. |
MOUNT_TOKEN_XHR_ERROR | A network error occurred during token creation. Check the
customer’s connectivity. |
Complete Errors
These errors are returned during
checkout.complete()
or
trigger.complete()
:Reason | Description |
|---|---|
COMPLETE_AUTHENTICATION_CANCELED | The customer cancelled the 3-D Secure authentication
step-up. |
COMPLETE_AUTHENTICATION_FAILED | The 3-D Secure authentication step-up
failed. |
COMPLETE_ERROR | A general error occurred during transaction completion. |
COMPLETE_IN_PROGRESS | complete() has already been called and has not
yet finished. Wait for the current call to resolve. |
COMPLETE_NOT_ALLOWED | Complete is not allowed for this transaction, such as when
autoProcessing is set to
true . |
COMPLETE_TRANSACTION_CANCELLED | The customer cancelled the transaction. |
COMPLETE_TRANSACTION_FAILED | The transaction failed during processing. |
COMPLETE_VALIDATION_ERROR | The parameters supplied to complete() have a
validation error. Check the details for
specifics |
Checkout Errors
Reason | Description |
|---|---|
CHECKOUT_ERROR | A general checkout error occurred. |
CHECKOUT_PAYMENT_PARAMETERS | One or more payment parameters have a validation error. |
CHECKOUT_VALIDATION_PARAMS | One or more checkout parameters have a validation error. |
Trigger Errors
Reason | Description |
|---|---|
TRIGGER_PAYMENT_TYPE_NOT_SUPPORTED | The specified payment type cannot be used with a trigger. Only
PANENTRY and CLICKTOPAY values
are supported. |
Payment-Specific Errors
Payment-Specific Errors
Reason | Description |
|---|---|
CLICK_TO_PAY_SDK_LOAD_ERROR | The Click to Pay SDK failed to
load. |
ENCRYPT_CARD_FOR_SRC_ENROLMENT_ERROR | Card encryption for Click to Pay
enrollment failed. |
GOOGLEPAY_CHECKOUT_ERROR | A Google Pay checkout error occurred. |
LAUNCH_SRC_CHECKOUT_ERROR | Launching the Click to Pay checkout
failed. |
TRIGGER_PAYMENT_TYPE_NOT_SUPPORTED | The payment type is not supported for triggers. |
General Errors
Reason Code | Description |
|---|---|
UNKNOWN_ERROR | An unknown error has occurred. |