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:

  1. The customer makes the first payment.
  2. Solidgate tokenizes card data and returns a secure recurring token that you store.
  3. You identify your regular customers on subsequent visits and suggest paying with a previous payment method.
  4. You initialize Resign Form with the stored recurring card tokens, but Apple Pay/Google Pay tokens should not be provided.
  5. 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 Required

Description

Order ID, which must be unique, is specified in the merchant system.

Example

123456

recurring_token string Required

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

product_price_id string 36 Required*

Description

Price ID of the predefined product.

To get product_price_id, use get product prices.

Required, for the subscription workflow.

Example

faf3b86a-1fe6-4ae5-84d4-ab0651d75db2

coupon_id string 36

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.

Without a product_price_id, the coupon_id is disregarded.

Example

eb4c6e93-4c53-447a-b215-5d5786af9844

customer_account_id string 100 Required*

Description

Customer ID in the merchant’s system.

Required, for the subscription workflow.

Example

4dad42f808

amount integer >=0 Required*

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

currency string 3 Required*

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

order_description string 255 Required

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

order_items string 255

Description

Order items in UTF-8 code.

Example

item1, item2

order_date string 50

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

order_number integer int32

Description

Number of payments by the customer.

Example

1

type string Required

Description

Specifies the payment processing flow using auth for a two-step payment.

Should be provided together with settle_interval parameter.

Example


auth

settle_interval integer [0..240]

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

authorization_type string

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

Example

final

retry_attempt integer >=0

Description

Number of payment retries.

Should be provided for the subscription workflow.

Example

1

force3ds boolean

Description

Routing payments flag for 3DS flow (enabled by Solidgate account manager).

Example

true

customer_date_of_birth string <=10

Description

Customer birthdate following the date format that matches the ^\d{4}-\d{2}-\d{2} pattern.

Example

2000-11-21

customer_email string 100

Description

Customer email.

Example

test@solidgate.com

customer_first_name string 100

Description

Customer first name.

Example

John

customer_last_name string 100

Description

Customer last name.

Example

Snow

customer_phone string 18

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

ip_address string 50

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

traffic_source string 255

Description

Source of traffic.

Example

facebook

transaction_source string 255

Description

Source of transactions on the merchant site.

Example

main_menu

purchase_country string 3

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

geo_country string 3

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

geo_city string 100

Description

Customer city.

Example

New Castle

billing_address object

Description

Billing address details.

address string 100

Description

First and second line of the billing address.

Example

221B Baker Street

country string 3

Description

ISO-3166 Wiki country code of the billing address.

Example

USA

state string 10

Description

ISO 3166-2 Wiki address state code of the billing address.

Example

US-NY

city string 100

Description

City name associated with the billing address.

Example

Brooklyn

zip_code string 10

Description

Address zip/postal code.

If the field is provided, manual entry is not required for it.

Example

11201

language string [2..3]

Description

Customer language settings for the translation of Payment Form fields and the language of email receipts sent for successful payments.

Example

en

website string 255

Description

Website from which transaction took place.

Example

https://google.com

device string 50

Description

Customer’s device.

Example

iPhone 8 iOS 12.0

device_sessions array of objects

Description

Device sessions containing the unique session ID of the device and the associated third-party provider.

id string 255

Description

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

provider string 255

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

platform string 3

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

user_agent string 1000

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

order_metadata object

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"

success_url string 255

Description

URL to redirect a customer after successful payment.

Example

https://merchant.example/success

fail_url string 255

Description

URL to redirect a customer after failed payment.

Example

https://merchant.example/fail

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.

  1. Invoke the formMerchantData function within your API instance.
  2. Ensure to include the recurring_token in the resignIntent fields.

Step 2. Pass generated data to frontend

  • Pass the encrypted resignIntent string 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.

React
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 Required

Description

Unique merchant identification.

Shall be shared at the moment of registration.

Example

api_pk_7b197...ba108f842

signature string Required

Description

Signature of request.

It allows verifying whether the request from the merchant is genuine on the payment gateway server.

Example

MjNiYjVj…ZhYmMxMzNiZDY=

resignIntent string Required

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==

ResignRequest
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 object

Description

Set a custom ID for the payment form iframe and define iframe dimensions.

id string

Description

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

width string

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

appearance object

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 boolean

Description

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

submitButtonText string

Description

Override the default text of the submit button.

Example

Pay for the product

Default

not set allowSubmit boolean

Description

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

googleFontLink string

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 string

Description

Overrides the CVV label on the resign form.

Example

CVC

Default

not set resignCvvPlaceholder string

Description

Overrides the CVV placeholder on the resign form.

Example

123

Default

not set hideCvvNumbers boolean

Description

Mask the CVV number to be ••• instead of the actual CVV number.

Examples

true

Default

false

cardBrandIconStyle string

Description

Defines the appearance of the card brand icon.

  • monochrome-light
  • monochrome-dark
  • colored

Examples

colored

Default

monochrome-dark

styles object

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.

resign-form 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 object

Description

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 object

Description

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 object

Description

Add custom styles to card brand icon in the resign form associated with a tokenized card.

resign-unknown-card-icon object

Description

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 object

Description

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 object

Description

Add custom styles to last four numbers of the card in the resign form, which are associated with the tokenized card.

resign-input-block object

Description

Add custom styles to top-level containers of the input fields in the resign form.

resign-input-block object

Description

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.

resign-label object

Description

Add custom styles to labels of the input fields in the resign form.

resign-cvv object

Description

Add custom styles for the resign CVV input group (element with class resign-input-group).

resign-dotted-placeholder object

Description

Add custom styles to inputs that can have dotted placeholders, for example, CVV codes

resign-tooltip-icon object

Description

Add custom styles to elements which are tooltip icons.

resign-tooltip object

Description

Add custom styles to elements which are resign tooltips.

resign-submit-button object

Description

Add custom styles to resign submit button.

ResignFormConfig
const 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 error
interface 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 .error or .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 styles
const 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 your ResignFormConfig.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

Visible CVV styles for the column layout
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 ResignFormConfig section. Unknown top-level classnames are ignored.
  • CSS rules, selectors, and classnames nested within top-level classnames are not subject to validation.
  • The ResignFormConfig does not inherently control the UI flow (column or inline display). However, you can adjust the UI flow through the ResignFormConfig.styles object.
  • The default column layout is mobile-friendly and suitable for desktops. For an inline layout, additional styles must be added to the ResignFormConfig.styles object.
  • The resignation form currently does not support PaymentFormSdk.update and PaymentFormSdk.applyCoupon methods. Attempts to use these result in errors captured by form.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.