Frames reference
Our Frames reference outlines all possible configuration options so you can tailor your customers' experience.
Supported browsers
Frames is a critical payment service, which requires up-to-date security. For this reason, we support all major browsers that are still officially maintained and receiving security updates.
We support:
- Internet Explorer (IE11+) and Edge
- Chrome, Safari and Firefox on all devices
If you discover any issues with the supported browsers, or would like to report a bug, please get in touch.
Required configurations
Here's a complete list of Frames configuration options.
You can only create charges in currencies that have been enabled for your account. Please contact your Customer Success manager if you need to process payments in additional currencies.
Javascript key | Description |
---|---|
| Bearer public API key. |
Optional configurations
Javascript key | Description | Default |
---|---|---|
| Allows you to provide the card schemes you accept to perform validation against the card number provided by customers. Accepted properties include: 1 2 3 4 5 6 7 8 9 10
|
|
| Set to |
|
| The | none |
| Allows you to use one of the supported languages or a custom object. Refer to the Frames customization guide for more information. |
|
| Customize the default Frames namespace. |
|
| Allows you to customize the look and feel of Frames' controlled fields. Refer to the Frames customization guide for more information. |
|
Turn on optional modes
When you initialize Frames, you can use the modes
array to customize the way Frames works and what is displayed.
Right-to-left
Configure Frames to support right-to-left languages by specifying RIGHT_TO_LEFT
in the modes array in the Frames.init
object.
Frames.init({publicKey: "pk_sbox_XXXXXX",modes: [ Frames.modes.RIGHT_TO_LEFT]});
Hide the CVV field
When paying out to a card, the CVV field is not mandatory, so you can initialize Frames with CVV_HIDDEN
or CVV_OPTIONAL
.
Frames.init({publicKey: "pk_sbox_XXXXXX",modes: [ Frames.modes.CVV_HIDDEN]});
Please note that either the CVV_HIDDEN
or CVV_OPTIONAL
can be used. You cannot incorporate both.
Additional security
To prevent copy pasting of card details within the iframe, you can use DISABLE_COPY_PASTE
.
Frames.init({publicKey: "pk_sbox_XXXX",modes: [ Frames.modes.DISABLE_COPY_PASTE ]});
Customer details
Javascript key | Description | Default |
---|---|---|
| The customer's name. | none |
| Transaction billing address: 1 2 3 4 5 6 7 8
| none |
| The customer's phone number. | none |
Localization options
Arabic language and right-to-left mode
When you enable Arabic as a locale, then right-to-left mode is activated by default.
Javascript key | Description | Default |
---|---|---|
| Sets the language of the text used. The available options are:
|
|
Events
Event name | Javascript constant | Description |
---|---|---|
|
| Triggered when the user inputs or changes the first 8 digits of a card. The event will contain data similar to the following example: 1 2
|
|
| Triggered when the card form has been submitted. |
|
| Triggered after a card is tokenized. The event will contain data following the example below. To view the full response schema:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
|
| Triggered if the card tokenization fails. |
|
| Triggered when the state of the card validation changes. This will return: |
|
| Triggered when the form is rendered. |
|
| Triggered when an input field receives focus. Use it to check the validation status and apply the wanted UI changes. |
|
| Triggered after an input field loses focus. Use it to check the validation status and apply the wanted UI changes. |
|
| Triggered when a field's validation status has changed. Use it to show error messages or update the UI. |
|
| Triggered when a valid payment method is detected based on the card number being entered. Use this event to change the card icon or validate the input against accepted card schemes, similar to the following example: 1 2 3
|
|
| Triggered when Frames is registered on the global namespace and safe to use. |
Adding an event handler
There are two ways to add an event handler: using the standard approach or using configuration options.
Frames.addEventHandler(Frames.Events.EVENT_NAME, handler);
Actions
Signature | Description | Returns |
---|---|---|
| Initializes (or re-initializes) Frames. Examples:
|
|
| Returns the state of the card form validation.
Example:
| boolean |
| Submits the card form if all form values are valid.
Example:
| Promise |
| Adds a handler that is called when the specified event is triggered. Call the |
|
| Removes a previously added handler from an event by providing the event name and handler as arguments in the method.
Example:
|
|
removeAllEventHandlers(event) | Removes all handlers added to the event specified.
Example:
|
|
| Retains the entered card details and allows you to resubmit the payment form. |
|
Functions
Getter | Setter | Description |
---|---|---|
|
| Bearer public API key. |
| N/A | Returns |
| N/A | Returns |
| N/A | Returns the Frames version number. |
|
| The customer's name, billing details and phone number. |
| N/A | Returns the selected language or the path to the localization file. |
| N/A | Returns the configuration of Frames. |
Examples
Using the submitCard Promise
This example uses a JavaScript Promise to tokenize a customer's payment details. The card token will be posted via the URL specified in the form's action
attribute.
<body><!-- add frames script --><script src="https://cdn.checkout.com/js/framesv2.min.js"></script><form id="payment-form" method="POST" action="https://merchant.com/charge-card"><div class="card-frame"><!-- form will be added here --></div><!-- add submit button --><button id="pay-button" disabled>PAY GBP 24.99</button></form><script>var payButton = document.getElementById("pay-button");var form = document.getElementById("payment-form");Frames.init("pk_sbox_6ff46046-30af-41d9-bf58-929022d2cd14");Frames.addEventHandler(Frames.Events.CARD_VALIDATION_CHANGED,function (event) {console.log("CARD_VALIDATION_CHANGED: %o", event);payButton.disabled = !Frames.isCardValid();});form.addEventListener("submit", function (event) {event.preventDefault();Frames.submitCard().then(function (data) {Frames.addCardToken(form, data.token);form.submit();}).catch(function (error) {// handle error});});</script></body>
Using the cardTokenized handler
This example uses cardTokenized
handler to gain a payment token for your customers' card details.
<body><!-- add frames script --><script src="https://cdn.checkout.com/js/framesv2.min.js"></script><form id="payment-form" method="POST" action="https://merchant.com/charge-card"><div class="card-frame"><!-- form will be added here --></div><!-- add submit button --><button id="pay-button" disabled>PAY GBP 24.99</button></form><script>var payButton = document.getElementById("pay-button");var form = document.getElementById("payment-form");Frames.init({publicKey: 'pk_sbox_6ff46046-30af-41d9-bf58-929022d2cd14',cardValidationChanged: function () {// if all fields contain valid information, the Pay now// button will be enabled and the form can be submittedpayButton.disabled = !Frames.isCardValid();},cardSubmitted: function () {form.disabled = true;// display loader},cardTokenized: function (data) {Frames.addCardToken(form, data.token)form.submit()},cardTokenizationFailed: function (event) {// catch the error}});form.addEventListener('submit', function (event) {event.preventDefault();Frames.submitCard();});</script></body>
Loading Frames asynchronously
If you load Frames asynchronously, you can change the namespace to a name other than Frames
. The example below uses Checkout
as the namespace.
Use window.CKOConfig
to change the namespace, or to load Frames asynchronously.
<body><!-- add frames script --><script async src="https://cdn.checkout.com/js/framesv2.min.js"></script><form id="payment-form" method="POST" action="https://merchant.com/charge-card"><div class="card-frame"><!-- form will be added here --></div><!-- add submit button --><button id="pay-button" disabled>PAY GBP 24.99</button></form><script>var payButton = document.getElementById("pay-button");var form = document.getElementById("payment-form");window.CKOConfig = {publicKey: "pk_sbox_6ff46046-30af-41d9-bf58-929022d2cd14",namespace: "Checkout",ready: function () {// Frames is registered on the global namespace and safe to useform.addEventListener("submit", function (event) {event.preventDefault();Checkout.submitCard();});},cardValidationChanged: function (event) {console.log("CARD_VALIDATION_CHANGED: %o", event);// if all fields contain valid information, the Pay now// button will be enabled and the form can be submittedpayButton.disabled = !Checkout.isCardValid();},cardSubmitted: function () {payButton.disabled = true;// display loader},cardTokenized: function (data) {console.log("CARD_TOKENIZED: %o", event);// add card token to the formCheckout.addCardToken(form, data.token);// submit the formform.submit();}};</script></body>
Including billing details
Use cardholder and billingAddress
attributes to send the customer's details. In the example, we have added the customer's billing details to a Frames form.
<body><!-- add frames script --><script src="https://cdn.checkout.com/js/framesv2.min.js"></script><form id="payment-form" method="POST" action="https://merchant.com/charge-card"><div class="card-frame"><!-- form will be added here --></div><!-- add submit button --><button id="pay-button" disabled>PAY GBP 24.99</button></form><script>var payButton = document.getElementById("pay-button");var form = document.getElementById("payment-form");Frames.init("pk_sbox_6ff46046-30af-41d9-bf58-929022d2cd14");Frames.addEventHandler(Frames.Events.CARD_VALIDATION_CHANGED,function (event) {console.log("CARD_VALIDATION_CHANGED: %o", event);payButton.disabled = !Frames.isCardValid();});Frames.addEventHandler(Frames.Events.CARD_SUBMITTED,function () {payButton.disabled = true;// display loader});Frames.addEventHandler(Frames.Events.CARD_TOKENIZED,function (data) {Frames.addCardToken(form, data.token);form.submit();});Frames.addEventHandler(Frames.Events.CARD_TOKENIZATION_FAILED,function (error) {// catch the error});form.addEventListener("submit", function (event) {event.preventDefault();Frames.cardholder = {name: "John Smith",billingAddress: {addressLine1: "623 Slade Street",addressLine2: "Apartment 8",zip: "31313",city: "Hinesville",state: "Georgia",country: "US",},phone: "9125084652"};Frames.submitCard();});</script></body>