Solidgate’s introduction of a Resign Form marks a significant advancement in payment processing, offering clients the convenience of 1-click payments by securely using stored card details.
This is especially beneficial for returning customers, as it allows the reuse of card information, streamlining the payment process. After a customer’s initial transaction, their card details are securely saved. For future purchases, these details are quickly accessible, enabling effortless 1-click transactions.
This efficient approach not only saves time but also eliminates the common hassle of repeatedly entering payment information, thus enhancing the shopping experience and potentially boosting conversion rates.
It offers dynamic adaptation to card information, supports multiple languages, and is compatible with secure browser versions.Here is how the process unfolds:
- The customer makes the first payment.
- Solidgate tokenizes card data and returns a secure recurring token that you store.
- You identify your regular customers on subsequent visits and suggest paying with a previous payment method.
- You initialize Resign Form with the stored recurring card tokens, but Apple Pay/Google Pay tokens should not be provided.
- The customer fills out the Resign Form only with the CVV field.
Backend setup
Begin by ensuring that the backend is adequately prepared. In the provided example code, the function formMerchantData is called with the necessary fields.
Solidgate SDK includes an SDK method that requires a resign intent payload. This payload is similar to the payment intent but also includes a token field for the tokenized PAN number.
order_id string 255 RequiredDescription
Order ID, which must be unique, is specified in the merchant system.
Example
123456
Description
Token associated with a card method that could be used for subsequent payments.
Should be provided only for card tokens, not Apple Pay / Google Pay tokens.Example
7ats8da7sd8-a66dfa7-a9s9das89t
Description
Price ID of the predefined product.
To get product_price_id, use get product prices.
Example
faf3b86a-1fe6-4ae5-84d4-ab0651d75db2
Description
ID of the coupon which corresponds to the specific product discount, must be passed in UUID v4 format.
The coupon flow is only activated when a product_price_id is supplied of the subscription workflow.
product_price_id, the coupon_id is disregarded.
Example
eb4c6e93-4c53-447a-b215-5d5786af9844
Description
Customer ID in the merchant’s system.
Required, for the subscription workflow.Example
4dad42f808
Description
Order amount - integer without fractional component like cents. For instance, 1020 means 10 USD and 20 cents.
However, amount can be 0, for zero-amount authorization flow.
Required, for one-time payment workflow.
Example
1020
Description
Currency amount is represented in a three-letter currency code as per the ISO-4217 Wiki standard.
Required, for one-time payment workflow.Example
USD
Description
Order description in your system and for bank processing.
Highly recommended to keep the description brief to improve the clarity of payment processing, ideally not exceeding 100 characters.Example
Premium package
Description
Order items in UTF-8 code.
Example
item1, item2
Description
Date of order creation following the ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$ pattern.
Example
2025-12-21 11:21:30
Description
Number of payments by the customer.
Example
1
Description
Specifies the payment processing flow using auth for a two-step payment.
settle_interval parameter.
Example
auth
Description
Delay before transaction settlement in hours:
- Visa customer-initiated payments: 240 hours = 10 days
- Visa merchant-initiated payments: 120 hours = 5 days
- All other card brands: 144 hours = 6 days
PSP limits:
- Stripe: 113 hours
- Bamboo: 96 hours
- Ebanx: 95 hours
- Razorpay: 72 hours
- Braintree: 72 hours
Required if
type
auth
is provided.
Example
48
Description
Authorization type that defines the transaction flow and capabilities.
- final - standard authorization, no increments allowed Default value.
- estimated - initial authorization with possible amount changes
Unavailable if estimated is provided
- Auto-settle flow type auth with settle_interval
- Zero-amount authorization type auth with amount 0
- One-time product and subscription payment flow
Example
final
Description
Number of payment retries.
Should be provided for the subscription workflow.Example
1
Description
Routing payments flag for 3DS flow (enabled by Solidgate account manager).
Example
true
Description
Customer birthdate following the date format that matches the ^\d{4}-\d{2}-\d{2} pattern.
Example
2000-11-21
Description
Customer email.
Example
customer_first_name string 100Description
Customer first name.
Example
John
Description
Customer last name.
Example
Snow
Description
Customer’s phone number.
Should be provided in international format E.164 Wiki , starting with the plus + sign.
Recommended format ^\+[1-9]\d{1,14}$
Example
+14155552671
Description
The public IP address of the customer. Both IPv4 and IPv6 are supported.
Private IPs (10.0.0.0-10.255.255.255, 172.16.0.0-172.31.255.255, 192.168.0.0-192.168.255.255) result in an ‘Invalid IP’ error.Example
8.8.8.8
Description
Source of traffic.
Example
facebook
Description
Source of transactions on the merchant site.
Example
main_menu
Description
Country where the goods are purchased or where the seller is based is identified using the ISO-3166 Wiki alpha-3 country code.
Required if you are registered with international payment systems as a marketplace. Being registered as a marketplace, in the context of international payment systems, typically implies that you operate a platform where numerous sellers can offer their goods or services.Example
CHN
Description
Customer country subject to ISO-3166 Wiki alpha-3.
If this parameter is not provided, it is automatically inferred.
In cases where it fails to provide this information, Apple and Google Pay methods are not displayed.Example
GBR
Description
Customer city.
Example
New Castle
Description
Billing address details.
address string 100Description
First and second line of the billing address.
Example
221B Baker Street
Description
ISO-3166 Wiki country code of the billing address.
Example
USA
Description
ISO 3166-2 Wiki address state code of the billing address.
Example
US-NY
Description
City name associated with the billing address.
Example
Brooklyn
Description
Address zip/postal code.
If the field is provided, manual entry is not required for it.Example
11201
Description
Customer language settings for the translation of Payment Form fields and the language of email receipts sent for successful payments.
Example
en
Description
Website from which transaction took place.
Example
device string 50Description
Customer’s device.
Example
iPhone 8 iOS 12.0
device_sessions array of objectsDescription
Device sessions containing the unique session ID of the device and the associated third-party provider.
id string 255Description
Unique session identifier generated by the application.
Parameter for tracking customer sessions in payments and for risk analytics. Ensure that you handle this field in compliance with regional data privacy regulations (for example, GDPR Reference in the EU).
Example
dsid_3a20_f9c1_4cd8_89d3_1c5
Description
Specifies the third-party provider associated with the device session.
Identifies the integration type for the merchant, allowing multiple such integrations if needed.
Example
checkout
Description
Customer platform at the moment of payment.
- WEB - desktop
- MOB - mobile version
- APP - application
If this parameter is not provided, it is automatically inferred from the header.
Example
WEB
Description
Customer’s browser identifier.
Example
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (HTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36
Description
Metadata is useful for storing additional, structured information about an object, consisting of up to 10 key-value pairs with a validation limit of 380 characters per field.
The callback notification returns an order_metadata from the order in each state.
Example
“coupon_code”: “NY2025", “partner_id”: “123989"
Description
URL to redirect a customer after successful payment.
Example
https://merchant.example/success
fail_url string 255Description
URL to redirect a customer after failed payment.
Example
Payment{
"order_id": "123456",
"recurring_token": "7ats8da7sd8-a66dfa7-a9s9das89t",
"amount": 1020,
"currency": "USD",
"order_description": "Premium package",
"order_items": "item1, item2",
"order_date": "2025-12-21 11:21:30",
"order_number": 1,
"type": "auth",
"settle_interval": 48,
"authorization_type": "final",
"retry_attempt": 1,
"force3ds": true,
"customer_date_of_birth": "2000-11-21",
"customer_email": "test@solidgate.com",
"customer_first_name": "John",
"customer_last_name": "Snow",
"customer_phone": "+14155552671",
"ip_address": "8.8.8.8",
"traffic_source": "Instagram",
"transaction_source": "main_menu",
"purchase_country": "CHN",
"geo_country": "GBR",
"geo_city": "New Castle",
"billing_address": {
"address": "Street 3D, Apartment 343",
"country": "United States",
"state": "Delaware",
"city": "New Castle",
"zip_code": "03127"
},
"language": "en",
"website": "https://google.com",
"device": "iPhone 8 iOS 12.0",
"device_sessions": [
{
"id": "dsid_3a20_f9c1_4cd8_89d3_1c5",
"provider": "checkout"
},
{
"id": "a0d24c8a-2b67-4b4b-bd39-d2efbe92a7f0",
"provider": "adyen"
}
],
"platform": "WEB",
"user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (HTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
"order_metadata": {
"coupon_code": "NY2025",
"partner_id": "123989"
},
"success_url": "https://merchant.example/success",
"fail_url": "https://merchant.example/fail"
}
Subscription payment
{
"order_id": "123456",
"recurring_token": "7ats8da7sd8-a66dfa7-a9s9das89t",
"product_price_id": "faf3b86a-1fe6-4ae5-84d4-ab0651d75db2",
"coupon_id": "eb4c6e93-4c53-447a-b215-5d5786af9844",
"customer_account_id": "4dad42f808",
"currency": "USD",
"order_description": "Premium package",
"order_items": "item1, item2",
"order_date": "2025-12-21 11:21:30",
"order_number": 1,
"type": "auth",
"settle_interval": 48,
"authorization_type": "final",
"retry_attempt": 1,
"force3ds": true,
"customer_date_of_birth": "2000-11-21",
"customer_email": "test@solidgate.com",
"customer_first_name": "John",
"customer_last_name": "Snow",
"customer_phone": "+14155552671",
"ip_address": "8.8.8.8",
"traffic_source": "Instagram",
"transaction_source": "main_menu",
"purchase_country": "CHN",
"geo_country": "GBR",
"geo_city": "New Castle",
"billing_address": {
"address": "Street 3D, Apartment 343",
"country": "United States",
"state": "Delaware",
"city": "New Castle",
"zip_code": "03127"
},
"language": "en",
"website": "https://google.com",
"device": "iPhone 8 iOS 12.0",
"device_sessions": [
{
"id": "dsid_3a20_f9c1_4cd8_89d3_1c5",
"provider": "checkout"
},
{
"id": "a0d24c8a-2b67-4b4b-bd39-d2efbe92a7f0",
"provider": "adyen"
}
],
"platform": "WEB",
"user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (HTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36",
"order_metadata": {
"coupon_code": "NY2025",
"partner_id": "123989"
},
"success_url": "https://merchant.example/success",
"fail_url": "https://merchant.example/fail"
}
Additionally, when setting up the resignIntent object for the resign process, an extra parameter recurring_token is sent.
Step 1. Form resign intent data
Start by generating the resign intent data, incorporating the previously obtained payment token. This is a crucial step in preparing for the transaction.
- Invoke the
formMerchantDatafunction within your API instance. - Ensure to include the
recurring_tokenin theresignIntentfields.
Step 2. Pass generated data to frontend
- Pass the encrypted
resignIntentstring to your frontend. This is typically done during the form initialization step.
This action creates the FormInitDTO object, which is key for the charge creation. The recurring_token is instrumental in associating this new transaction with the payment method used previously.
Resign form initialization
After completing all necessary steps and adjusting the required parameters for the Resign Form, you can initiate the Solidgate SDK in a manner similar to the regular payment setup, but tailored for the resign process.
To create Resign Form, you need to call the PaymentFormSdk.resign(resignRequest: ResignRequest, formConfig?: ResignFormConfig) method from the PaymentFormSdk.
import { Resign, ResignFormConfig, ResignRequest, ClientSdkInstance } from '@solidgate/react-sdk'
function CheckoutPage() {
const resignRequest: ResignRequest = {
merchant: '<--YOUR DATA-->',
signature: '<--YOUR DATA-->',
resignIntent: '<--YOUR DATA-->'
}
const appearance: ResignFormConfig["appearance"] = {
submitButtonText: "Pay",
allowSubmit: true,
resignCvvLabel: "CVV",
resignCvvPlaceholder: "123",
hideCvvNumbers: true
}
const container: ResignFormConfig["container"] = {
width: "500px"
}
const styles: ResignFormConfig["styles"] = {
"resign-submit-button": {
'background-color': 'green',
'font-size': '16px',
'font-weight': 'bold',
':hover': {
'background-color': 'green'
},
}
}
const handleInitFailed = (error: Error) => {
// you can handle init failure here
}
const handleReadyResignInstance = (formInstance: ClientSdkInstance) => {
// you can receive ClientSDKInstance here to perform additional actions such as manual form submission, form updates, and others.
}
const handleSuccess = () => {
// you can handle successful payment here
// complete list of the available events can be found in the 'Form Events' section of this documentation
}
return (
<Resign
resignRequest={resignRequest}
appearance={appearance}
container={container}
styles={styles}
onReadyResignInstance={handleReadyResignInstance}
onResignInitFailed={handleInitFailed}
onSuccess={handleSuccess}
/>
)
}
Vanilla JS
const setupResignPaymentForm = async () => {
try {
const form = await PaymentFormSdk.resign(resignRequest, formConfig);
// Now you can call payment form methods such as form.on, form.submit and more...
} catch (error) {
// Error will be thrown if payment form initialization fails.
// You can handle it here.
}
};
Vue
<script setup lang="ts">
import { Resign, ResignRequest, ResignFormConfig, ClientSdkInstance } from "@solidgate/vue-sdk";
const resignRequest: ResignRequest = {
merchant: '<--YOUR DATA-->',
signature: '<--YOUR DATA-->',
resignIntent: '<--YOUR DATA-->',
}
const appearance: ResignFormConfig["appearance"] = {
submitButtonText: "Pay",
allowSubmit: true,
resignCvvLabel: "CVV",
resignCvvPlaceholder: "123",
hideCvvNumbers: true
}
const container: ResignFormConfig["container"] = {
width: "500px"
}
const styles: ResignFormConfig["styles"] = {
"resign-submit-button": {
'background-color': 'green',
'font-size': '16px',
'font-weight': 'bold',
':hover': {
'background-color': 'green'
},
}
}
function handleReadyResignInstance(formInstance: ClientSdkInstance) {
// you can receive ClientSDKInstance here to perform additional actions such as manual form submission, form updates, and more.
}
function handleInitFailed(error: Error) {
// you can handle init failure here
}
function handleSuccess() {
// you can handle successful payment here
// complete list of the available events can be found in the 'Form Events' section of this documentation
}
</script>
<template>
<Resign
:resign-request="resignRequest"
:appearance="appearance"
:container="container"
:styles="styles"
@readyResignInstance="handleReadyResignInstance"
@resignInitFailed="handleInitFailed"
@success="handleSuccess"
/>
</template>
Angular
//app.component.ts
import { Component } from '@angular/core';
import { ClientSdkInstance, ResignFormConfig, ResignRequest, SolidResignModule } from '@solidgate/angular-sdk'
@Component({
selector: 'app-root',
standalone: true,
imports: [SolidResignModule],
template: `
<ngx-solid-resign
[resignRequest]="resignRequest"
[appearance]="appearance"
[container]="container"
[styles]="styles"
(readyResignInstance)="handleReadyResignInstance($event)"
(resignInitFailed)="handleInitFailed($event)"
(success)="handleSuccess()"
></ngx-solid-resign>
`
})
export class AppComponent {
resignRequest: ResignRequest = {
merchant: '<--YOUR DATA-->',
signature: '<--YOUR DATA-->',
resignIntent: '<--YOUR DATA-->',
}
appearance: ResignFormConfig["appearance"] = {
submitButtonText: "Pay",
allowSubmit: true,
resignCvvLabel: "CVV",
resignCvvPlaceholder: "123",
hideCvvNumbers: true
}
container: ResignFormConfig["container"] = {
width: "500px"
}
styles: ResignFormConfig["styles"] = {
"resign-submit-button": {
'background-color': 'green',
'font-size': '16px',
'font-weight': 'bold',
':hover': {
'background-color': 'green'
},
}
}
resignFormConfig: ResignFormConfig = {
appearance: {
submitButtonText: "Pay",
allowSubmit: true,
googleFontLink: "https://fonts.googleapis.com/css2?family=Roboto:wght@300&display=swap",
resignCvvLabel: "CVV",
resignCvvPlaceholder: "123",
hideCvvNumbers: true
},
container: {
width: "500px"
},
}
handleReadyResignInstance(formInstance: ClientSdkInstance) {
// you can receive ClientSDKInstance here to perform additional actions such as manual form submission, form updates, and more.
}
handleInitFailed(error: Error) {
// you can handle init failure here
}
handleSuccess() {
// you can handle successful payment here
// complete list of the available events can be found in the 'Form Events' section of this documentation
}
}
The resignRequest: ResignRequest object contains all the necessary information for the resign initialization.
It is required and should contain the:
merchant string RequiredDescription
Unique merchant identification.
Shall be shared at the moment of registration.
Example
api_pk_7b197...ba108f842
Description
Signature of request.
It allows verifying whether the request from the merchant is genuine on the payment gateway server.
Example
MjNiYjVj…ZhYmMxMzNiZDY=
Description
Encrypted aes-cbc-256 string of JSON request data with random IV (16bytes) and secret key is first 32bytes of merchant secret key.
Example
E5FKjxw5vRjjIZ….vmG2YFjg5xcvuedQ==
const resignRequest = {
merchant: 'api_pk_7b197...ba108f842',
signature: 'MjliMzU4ODE3ZDVlM2E1YWZmYzI1NmU4MzU3YjhlODRkMTJmZTk1NjIxOWNiYzFmNDk0N2NkNjk5YTA5Y2Q4NzIzOWIwMTgxZTQwOGExZjFmYWQ1NzQyYjc3ZGRjMzE0MTczYTQ2OGEyMTlmNGI4YzA5ZmNhMTczZDI0ZDBkZmM=',
resignIntent: 'E5FKjxw5vRjjIZBKtH_Q9oN1Wmn5icMn720prO4nPB3cYpzC9wLAHwq9IwstmD-YFLFPsdq2Rk9YzRJhxdPEq2KI19fFt1QotX-smH5_xWxGfYcv9rf2Y4v4KWgbjzJylHTDM6eCXVvbdZyVU54vD3sxntN3gFiyuhEzMn8mKoDV0UdIqLN_VsTAdehBUrqk7aPNzXCfSqpy9pCBlpdFNCfgOyHoDXGGS_Z9fK3gCw7usF2v0IU96mQGzdtyEUs1Z2MJYwle7sjEkWNEb9SkpW1zUXEZCFMF8Cu-dn6fWe4cVE2Ok1MDeTE43dySgw9e8GzMxgPmG2YFjg5xcvuedQ=='
}
The formConfig: ResignFormConfig object allows you to customize the resign form.
It is optional and can contain the:
container objectDescription
Set a custom ID for the payment form iframe and define iframe dimensions.
id stringDescription
Custom id of the iframe where the resign form is rendered. If not set, form is displayed in element with id solid-payment-form-container.
Example
resign-payment-form-container
Description
Parameter that overrides the width of the resign form’s iframe. You can set the value in either percentage like 100% or pixels such as 320px.
Examples
500px
Description
Customize the resign form elements, such as CVV label and placeholder texts, and decide whether to autofocus the form on show, and more.
autoFocus booleanDescription
If set to true, the resign form automatically focuses on an unfilled form field after the form is rendered.
When the focus of the tab containing a resign form changes, the resign form refocuses on the unfilled field.Examples
true
Default
true
Description
Override the default text of the submit button.
Example
Pay for the product
Default
not set allowSubmit booleanDescription
Determines whether the submit button is shown and whether it is possible to submit the card form using the Enter key press or submit button click.
Usefully for implementing custom submit flow.
Examples
true
Default
true
Description
Link to the Google Fonts.
Avoid using large font sets to keep the form loading faster.
Example
https://fonts.googleapis.com/css2?family=Roboto:wght@400;500&display=swap
Default
not set resignCvvLabel stringDescription
Overrides the CVV label on the resign form.
Example
CVC
Default
not set resignCvvPlaceholder stringDescription
Overrides the CVV placeholder on the resign form.
Example
123
Default
not set hideCvvNumbers booleanDescription
Mask the CVV number to be ••• instead of the actual CVV number.
Examples
true
Default
false
Description
Defines the appearance of the card brand icon.
monochrome-lightmonochrome-darkcolored
Examples
colored
Default
monochrome-dark
Description
Manage the styles of your payment form.
The key is the classname of the corresponding resign form element or container, and the value is its styles object.
Description
Add custom styles to the top-level resign form container, including the submit button.
Tip
Here, you can specify form paddings.
resign-form-content objectDescription
Add custom styles to the resign form content container, including the card brand, masked card number, card brand icon, and input fields.
Tip
Here, you can specify flexbox flow types - columns or rows - to create inlined or columned resign forms.
resign-card-preview objectDescription
Add custom styles to resign form content container, including the card brand, card last four numbers, card brand icon, and input fields.
resign-card-brand-icon objectDescription
Add custom styles to card brand icon in the resign form associated with a tokenized card.
resign-unknown-card-icon objectDescription
Add custom styles to resign form unknown card brand icon in case Solidgate cannot map the card brand to a known one.
resign-card-preview-content objectDescription
Add custom styles to resign form card preview container that includes the card brand name and the last four numbers associated with the tokenized card.
resign-card-last-four objectDescription
Add custom styles to last four numbers of the card in the resign form, which are associated with the tokenized card.
resign-input-block objectDescription
Add custom styles to top-level containers of the input fields in the resign form.
resign-input-block objectDescription
Add custom styles to resign form inputs containers that includes inputs itself, errors labels and input labels.
Additionally, this container has the additional class error when the field has an error, the class not-empty when the field is not empty, and the class valid when the field is filled correctly.
Description
Add custom styles to labels of the input fields in the resign form.
resign-cvv objectDescription
Add custom styles for the resign CVV input group (element with class resign-input-group).
Description
Add custom styles to inputs that can have dotted placeholders, for example, CVV codes
resign-tooltip-icon objectDescription
Add custom styles to elements which are tooltip icons.
resign-tooltip objectDescription
Add custom styles to elements which are resign tooltips.
resign-submit-button objectDescription
Add custom styles to resign submit button.
ResignFormConfigconst formConfig = {
container: {
id: "resign-form-iframe",
width: "700px"
},
appearance: {
autoFocus: false,
submitButtonText: "Buy",
allowSubmit: true,
googleFontLink: "https://fonts.googleapis.com/css2?family=Crimson+Pro:wght@200&display=swap",
resignCvvLabel: "CVV",
resignCvvPlaceholder: "CVV",
hideCvvNumbers: true,
cardBrandIconStyle: "colored"
},
styles: {
"resign-input-group": {
".valid": {
"input": {
"background-color": "#e2ffe8"
}
},
".error": {
"input": {
"background-color": "#ff8686"
}
}
}
}
}
In the case of failed initialization, there is an error with the following schema:
SDK Resign initialization errorinterface InitResignError extends Error {}
Customization
To tailor your resignation form, implement custom styles within ResignFormConfig.styles. This is done by supplying an object-like structure, where each top-level key corresponds to a form element’s classname, and its value comprises an object with specific styling rules.
The value can include:
- classnames, like
.erroror.not-empty, with each holding a distinct styles object. - CSS selectors, for instance,
.error > input, also each possessing a unique styles object. - direct CSS style rule names along with their respective values, such as
"color": "purple".
This structure ensures a coherent and logical approach to customizing the resignation form, providing flexibility in styling while maintaining technical accuracy.
The complete list of permitted top-level classnames is provided above in the ResignFormConfig section.
Note that unknown top-level classnames are ignored. Refer to the supported list in the ResignFormConfig section for valid classnames.
Be aware that all CSS rules, selectors, and classnames nested within top-level classnames do not undergo validation.
ResignFormConfig stylesconst formConfig = {
styles: {
"resign-input-group": { // top-level classname for an form elements
".valid": { //
"input": {
"background-color": "#e2ffe8"
}
},
".error": {
"input": { // more fine-grain styling with nesting
"background-color": "#ff8686"
}
}
},
"resign-submit-button": {
"background-color": "#5b7742"
},
"resign-cvv": {
" input::placeholder": { // pseudo-class selectors
"color": "#000"
}
}
}
}
UI flow
A specific parameter to control the UI flow (column or inline) is not provided within ResignFormConfig.
However, the UI flow can be manipulated via the ResignFormConfig.styles object. For instance, setting "flex-direction": "row" for the resign-form-content element alters the default column layout, but this can be counterbalanced by styling additional form elements to achieve the desired appearance.
For those seeking immediate application with minimal customization, two default styling options are available for both column and inline layouts.
The column layout is embedded in the build. To make the form look inline, please include styles from the section below to yourResignFormConfig.styles object.
Column layout
By default, Solidgate provides the most mobile-friendly form layout variant - the column layout - which is also suitable for desktop integrations.
If you want to set the CVV label to be visible (it is hidden by default), you can add the following styles to your ResignFormConfig.styles
const formConfig = {
styles: {
"resign-label": {
"display": "block"
},
"resign-input-block": {
"flex-direction": "row-reverse",
"align-items": "center"
}
}
}
Inline layout
If you want to make inline form, add the following styles to your ResignFormConfig.styles object:
Row variant styles
const formConfig = {
styles: {
"resign-form-content": {
"padding": "1em 0.75em",
"background-color": "#f5f5f5",
"border-radius": "6px",
"align-items": "center",
"flex-direction": "row"
},
"resign-input-group": {
"margin": "0",
"flex": "1"
},
"resign-card-preview": {
"margin": "0"
},
"resign-label": {
"display": "block"
},
"resign-input-block": {
"flex-direction": "row-reverse",
"flex-wrap": "wrap",
"align-items": "center",
"input": {
"width": "auto"
}
}
}
}
Note that the optimal width for the inline form starts from 500px. It is better to set this size or higher inside ResignFormConfig.container.width.
Limitations
- The complete list of allowed top-level classnames is available in the
ResignFormConfigsection. Unknown top-level classnames are ignored. - CSS rules, selectors, and classnames nested within top-level classnames are not subject to validation.
- The
ResignFormConfigdoes not inherently control the UI flow (column or inline display). However, you can adjust the UI flow through theResignFormConfig.stylesobject. - The default column layout is mobile-friendly and suitable for desktops. For an inline layout, additional styles must be added to the
ResignFormConfig.stylesobject. - The resignation form currently does not support
PaymentFormSdk.updateandPaymentFormSdk.applyCouponmethods. Attempts to use these result in errors captured byform.on("error", (err) => { ... }).
Error insights
These insights help merchants understand common issues and optimize their strategies for successful resign transactions, enhancing customer experience and potentially boosting conversion rates.
Top errors for successful resigns:
- Errors like 2.01 (Invalid data) and 3.01 (Card is blocked) are common and relate to incorrect card data entry.
- Errors 2.10 (Invalid 3DS flow on merchant side), 2.11 (Invalid 3DS flow on bank side), and 5.01 (3D Secure verification failed) refer to issues with 3D Secure authentication.
Enhanced success rate in resigns:
- Resigns are frequently successful following a 3.02 (Insufficient funds) error.
- Errors like 3.08 (Do not honor) and 3.10 (Suspected fraud) often lead to successful resigns as well.