The Card Element is a single-line multi-input field that allows you to securely collect card details and submit these details to Airwallex to make a payment.
This page describes how to embed a Card Element on your payment page to accept payments.
How it works
The diagram below depicts the information flow in a Card Element integration.
Before you begin
Before you implement the integration, consider the following:
Contact your Airwallex Account Manager to enable payment acceptance using Embedded Elements for your merchant account.
Obtain your access token API by authenticating to Airwallex using your unique Client ID and API key. You will need the access token to make API calls.
airwallex-payment-elementspackage using Yarn or NPM
yarn add airwallex-payment-elements
npm install airwallex-payment-elements
Create a PaymentConsent if you want to save payment details for future payments.
Step 1: Set up the server to create a PaymentIntent
When the shopper begins the checkout process, you will need to create a PaymentIntent object to indicate your intent to collect payment from the shopper.
When the checkout page loads, on your server, call Create a PaymentIntent API API with an amount and currency. Always decide how much to charge on the server side, a trusted environment, as opposed to the client. This prevents malicious shoppers from being able to alter the payment amount.
return_url in Create a PaymentIntent API to indicate where Airwallex should redirect the shopper after completing the payment, whether successful or otherwise.
client_secret are returned in the response — these parameters let you confirm the payment and update card details on the client, without allowing manipulation of sensitive information, like payment amount.
Step 2: Initialize Airwallex on your checkout page
First, you will need to import the
airwallex-payment-elements SDK and then initialize the package. For details, see Initialize Airwallex JS.
Step 3: Add the Card Element to your checkout page
To embed the Card Element into your checkout page, you will need to create an empty container, create the Element and then mount the Element to the container.
Define the payment form
First, create an empty container
div with a unique id in your payment form and a Submit button to trigger the payment request. Ensure that the payment form only contains one Element with this unique id. Airwallex inserts an iframe into this
div that securely collects card information.
Create the Card Element
When the payment form has loaded, call
createElement(type, options) by specifying the Element type as
card to create the Element. Ensure that the payment form only contains one Element with
Mount the Card Element
mount() with the id of the
div to mount the Element to the DOM. The Element should only be mounted once in a single payment flow.
You can also pass options in
createElement() to overwrite styles and other functions as shown in the following table. All properties are optional. For details, see card props JS.
Step 4: Confirm the PaymentIntent
When the shopper clicks the Submit button, call
confirmPaymentIntent() by passing the Element,
client_secret returned in Create a PaymentIntent, to complete the payment.
You can also pass
confirmPaymentIntent() depending on your payment flow. For details, see confirmPaymentIntent props JS.
Handle the submit event
Add an event handler to the Submit button and listen to the form’s submit event to know when to confirm the payment.
onReady event listener to ensure the Elements are mounted. Use this event to prepare and load the checkout page.
onChange event listener to help your shopper catch mistakes in the input fields. Use this to validate the fields and display errors before the shopper clicks the Submit button.
Step 5: Handle the response
onError event listeners to handle error and success events received from Airwallex.
If no error occurred, display a message that the payment was successful. If payment fails with an error, display the appropriate message to your shopper so they can take action and try again.
Retrieve the payment result
For any actions subsequent to the payment such as shipping goods or sending email receipts, you can retrieve the payment result using the following options:
Set up webhooks to receive notifications on whether the payment has succeeded. Airwallex sends
payment_intent.succeededevent when a payment succeeds. Listen to these events rather than waiting on a callback from the client. On the client, the shopper could close the browser window or quit the app before the callback executes. For information on how to set up webhooks and listen to events, see Getting started with webhooks
On your server, call Retrieve a PaymentIntent API to check the PaymentIntent status.
Check Payment Activity screen on your Airwallex web app.
Test your integration
Use test card numbers and the test and go-live checklist to test your integration for various success and error scenarios in the demo environment and then go live in the production environment.
Explore a full, working code sample of an integration built using various web frameworks JS.
You can add the following features to your Embedded Element integration.
You can configure the Element to display localized text of the payment fields based on the
locale set in
loadAirwallex( ). Supported locales are:
Save card details for future payments
Airwallex allows you to create a PaymentConsent with the shopper to initiate future payments using shopper’s saved card details. For more information, see Save payment details for future payments .
3D Secure authentication
Airwallex automatically handles 3D Secure authentication offering either frictionless or challenge flow depending on the card issuer’s requirements. You can optionally pass the following fields in
createElement( ) to support 3DS:
authFormContainer: A container for the authentication form. If a challenge flow is required to authenticate the shopper, an iframe will be rendered in this container to display the authentication page provided by the issuing bank. If not provided, Airwallex will create a
bodytag and use it as the container.
withBilling: If applicable set this to
trueto collect billing information from the shopper, which increases the likelihood of frictionless checkout.
Device fingerprinting uniquely tracks and identifies devices used for transacting on your shopping site, increasing your protection from fraud. The
What are the common error scenarios with Embedded Elements integration?
Some common scenarios include :
|Airwallex is not defined||Check if you have initialized Airwallex (Step 2) before using Airwallex functions. If you are using CDN, check if you have changed the bundle version from x.x.x to the latest version in the |
|Access denied, authentication failed||Check if you have replaced your intent |
|The PaymentIntent with ID int_xxxxxxxxx cannot be found||Check if the environment you initialized Airwallex in, for example, demo or prod, matches the environment you retrieved your intent |
|InvalidAccessError: Page already has an active payment session||ApplePay doesn't allow duplicate sessions in the same page. However, you may create the apple pay element multiple times, please follow either of the options listed to address the error: 1) Call the destroy function to destroy old element before you create the new element. 2) Call the update function to update the old element with new intentId.|
How do I customize the Embedded Element?
You can provide the
fonts[ ] option in
init( ) or
loadAirwallex( ) when you initialize Airwallex to customize the font styles of payment Elements. Airwallex supports two font weights: regular (400) and bold (700). You can specify font options using
You can also customize styles for the
fullFeaturedCard Element using
style. With Split Card, you can also customize
What card schemes can I accept using Card Element/Split Card/Full Featured Card Element?
You can accept credit and debit cards from Mastercard, Visa, and UnionPay using Card Element/Split Card Elements integration. For UnionPay, make sure you provide the UnionPay logo alongside Mastercard and Visa.
How do I display the cardholder name field for a Card/Split Card Element?
You can render a Cardholder Name input field on your checkout page alongside the Card/Split Card Elements. The cardholder name is not mandatory to confirm and complete a payment.