Use Stored Credit
Overview
The Stored Credit payment method allows merchants to process payments without requiring payment details from the shopper. Instead, the shopper's credit balance is pre-stored and managed within your system (NOT stored by 2Checkout). When using this payment method via API, it is the merchant's responsibility to validate that the shopper has sufficient credits to complete the transaction. This method allows you to accept payments using pre-purchased credits systems such as proprietary gift vouchers.
Availability
This payment method is exclusive to the API and is not available on any of 2Checkout's hosted shopping carts.
Supported currencies
Stored Credit is at the moment available only in USD. Contact 2Checkout to ask about availability in other currencies.
Workflow
- Distribute the credits to your customers using your desired process, outside of the 2Checkout platform.
- Validate that the customer who intends to initiate the order has enough credits available.
-
Create the order object. Use STORED_CREDIT as the type in PaymentDetails object.
It is not recommended that you use the PaymentMethod object for Stored Credit, the only parameter supported is RecurringEnabled = false which is also the default value, true is not supported and will return an error. - Place the order.
Request parameters
Parameters | Type/Description |
---|---|
sessionID |
Required (string) Session identifier, the output of the Login method. Include sessionID into all your requests. 2Checkout throws an exception if the values are incorrect. The sessionID expires in 10 minutes. |
Order |
Required (object) Object designed to collect all data necessary for an order, including billing, product/subscription plan and payment details. See code sample for more details. |
Request example
<?php
declare(strict_types=1);
class Configuration
{
public const MERCHANT_CODE = 'MERCHANT';
public const MERCHANT_KEY = 'SECRET_KEY';
public const URL = 'https://api.2checkout.com/soap/6.0';
public const ACTION = 'placeOrder';
public const PAYLOAD = <<<JSON
{
"Currency": "USD",
"Language": "EN",
"Country": "us",
"CustomerIP": "91.220.121.21",
"Source": "sourceAPI.net",
"LocalTime": "2022-01-13 09:41:59",
"CustomerReference": 421820775,
"Items": [
{
"Code": "TA-TuneUp-M-RENEW"
}
],
"BillingDetails": {
"Address1": "Test Address",
"City": "LA",
"State": "California",
"CountryCode": "US",
"Email": "testcustomer@2Checkout.com",
"FirstName": "Customer",
"LastName": "2Checkout",
"Zip": "12345"
},
"PaymentDetails": {
"Type": "STORED_CREDIT",
"Currency": "USD",
"CustomerIP": "91.220.121.21"
}
}
JSON;
}
class Client
{
public function call(
string $url = Configuration::URL,
$payload = Configuration::PAYLOAD,
string $action = Configuration::ACTION
): ?object {
if (is_array($payload)) {
$payload = json_encode($payload);
}
if (!empty($payload)) {
// SoapClient works with objects(StdClass)
$payload = json_decode($payload);
}
$soapClient = $this->getClient($url);
$sessionId = $this->getSession($soapClient);
$args = array_filter([$sessionId, $payload]);
return $soapClient->$action(...$args);
}
public function getClient(string $url): SoapClient
{
return new SoapClient(
$url.'?wsdl',
[
'location' => $url,
'cache_wsdl' => WSDL_CACHE_NONE,
]
);
}
public function getSession(SoapClient $client)
{
$date = gmdate('Y-m-d H:i:s');
$merchantCode = Configuration::MERCHANT_CODE;
$key = Configuration::MERCHANT_KEY;
$string = strlen($merchantCode).$merchantCode.strlen($date).$date;
$algo = 'sha256';
$hash = hash_hmac($algo, $string, $key);
$client->__setCookie('XDEBUG_SESSION', 'PHPSTORM');
return $client->login($merchantCode, $date, $hash, $algo);
}
}
try {
$client = new Client();
var_dump($client->call());
} catch (Exception $ex) {
var_dump($ex);
}
Response parameters
Parameter | Type/Description |
---|---|
Order information | Object Object containing order information. |
Use Stored Credit
Overview
The Stored Credit payment method allows merchants to process payments without requiring payment details from the shopper. Instead, the shopper's credit balance is pre-stored and managed within your system (NOT stored by 2Checkout). When using this payment method via API, it is the merchant's responsibility to validate that the shopper has sufficient credits to complete the transaction. This method allows you to accept payments using pre-purchased credits systems such as proprietary gift vouchers.
Availability
This payment method is exclusive to the API and is not available on any of 2Checkout's hosted shopping carts.
Supported currencies
Stored Credit is at the moment available only in USD. Contact 2Checkout to ask about availability in other currencies.
Workflow
- Distribute the credits to your customers using your desired process, outside of the 2Checkout platform.
- Validate that the customer who intends to initiate the order has enough credits available.
-
Create the order object. Use STORED_CREDIT as the type in PaymentDetails object.
It is not recommended that you use the PaymentMethod object for Stored Credit, the only parameter supported is RecurringEnabled = false which is also the default value, true is not supported and will return an error. - Place the order.
Request parameters
Parameters | Type/Description |
---|---|
sessionID |
Required (string) Session identifier, the output of the Login method. Include sessionID into all your requests. 2Checkout throws an exception if the values are incorrect. The sessionID expires in 10 minutes. |
Order |
Required (object) Object designed to collect all data necessary for an order, including billing, products/subscription plan and payment details. See code sample for more details. |
Request example
<?php
declare(strict_types=1);
class Configuration
{
public const MERCHANT_CODE = 'MERCHANT';
public const MERCHANT_KEY = 'SECRET_KEY';
public const URL = 'https://api.2checkout.com/rpc/6.0';
public const ACTION = 'placeOrder';
//array or JSON
public const PAYLOAD = <<<JSON
{
"Currency": "USD",
"Language": "EN",
"Country": "us",
"CustomerIP": "91.220.121.21",
"Source": "sourceAPI.net",
"LocalTime": "2022-01-13 09:41:59",
"CustomerReference": 421820775,
"Items": [
{
"Code": "TA-TuneUp-M-RENEW"
}
],
"BillingDetails": {
"Address1": "Test Address",
"City": "LA",
"State": "California",
"CountryCode": "US",
"Email": "testcustomer@2Checkout.com",
"FirstName": "Customer",
"LastName": "2Checkout",
"Zip": "12345"
},
"PaymentDetails": {
"Type": "STORED_CREDIT",
"Currency": "USD",
"CustomerIP": "91.220.121.21"
}
}
JSON;
}
class Client
{
private const LOGIN_METHOD = 'login';
private $calls = 1;
private $sessionId;
private function generateAuth(): array
{
$merchantCode = Configuration::MERCHANT_CODE;
$key = Configuration::MERCHANT_KEY;
$date = gmdate('Y-m-d H:i:s');
$string = strlen($merchantCode) . $merchantCode . strlen($date) . $date;
$algo = 'sha256';
$hash = hash_hmac($algo, $string, $key);
return compact('merchantCode', 'date', 'hash', 'algo');
}
public function login(string $url)
{
$payload = $this->generateAuth();
$response = $this->call($url, array_values($payload), self::LOGIN_METHOD);
$this->sessionId = $response['result'];
}
public function call(
string $url = Configuration::URL,
$payload = Configuration::PAYLOAD,
string $action = Configuration::ACTION
): ?array {
if (empty($this->sessionId) && $action !== self::LOGIN_METHOD) {
$this->login($url);
}
if (is_string($payload)) {
$payload = json_decode($payload, true);
}
if (!empty($this->sessionId)) {
$payload = [$this->sessionId, $payload];
}
$payload = array_filter($payload);
$request = json_encode([
'jsonrpc' => '2.0',
'method' => $action,
'params' => $payload,
'id' => $this->calls++,
]);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSLVERSION, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$curl,
CURLOPT_HTTPHEADER,
['Content-Type: application/json', 'Accept: application/json', 'Cookie: XDEBUG_SESSION=PHPSTORM']
);
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($curl);
if (empty($response)) {
die('Server unavailable');
}
echo $response . '</br>';
return json_decode($response, true);;
}
}
$client = new Client();
$result = $client->call();
var_dump($result);
Response parameters
Parameter | Type/Description |
---|---|
Order information |
Object Object containing order information. |
Compliance subscription / trial
Use the variables in the list below to customize the Compliance subscription email and Compliance trial email according to your needs.
Variable name | Email type | Mandatory | Test value | Description | |
---|---|---|---|---|---|
FIRST_NAME_BILLING |
Compliance subscription email Compliance trial email |
No | John | Shopper's first name used on the billing information. | |
LAST_NAME_BILLING |
Compliance subscription email Compliance trial email |
No | Doe | Shopper's last name used on the billing information. | |
LICENCES | |||||
LICENCES[index1].BILLING_CYCLE_DURATION | Compliance subscription email | Yes | 1 Month | The billing recurrence. | |
LICENCES[index1].LICENCE_CODE |
Compliance subscription email Compliance trial email |
No | 7Q47P6Y84Q | Subscription code. | |
LICENCES[index1].NEXT_BILLING_DATE |
Compliance subscription email Compliance trial email |
Yes | Mar 14th 2020 | The date for the next billing. | |
LICENCES[index1].NEXT_BILLING_PRICE |
Compliance subscription email Compliance trial email |
Yes | 100.00 EUR | The price for the next billing. | |
LICENCES[index1].NEXT_BILLING_PRICE_TYPE |
Compliance subscription email Compliance trial email |
No | NET | Specifies if the price is GROSS or NET. | |
LICENCES[index1].PRODUCT_NAME |
Compliance subscription email Compliance trial email |
No | Product name | The name of the product. | |
LICENCES[index1].PRODUCT_QUANTITY |
Compliance subscription email Compliance trial email |
No | 1 | The quantity of the product(s). | |
LICENCES[index1].RENEWAL_TYPE | Compliance subscription email | No | Automatic | Specifies if subscription renews manually or automatically. | |
LICENCES[index1].TRIAL_DURATION | Compliance trial email | Yes | 1 Month | The duration of the trial. | |
LICENCES[index1].TRIAL_EXPIRATION | Compliance trial email | Yes | Mar 14th 2021 | The expiration date of the trial. | |
MERCHANT_COMMERCIAL_NAME |
Compliance subscription email Compliance trial email |
No | Some company | Merchant's commercial name. | |
MERCHANT_SUPPORT_EMAIL |
Compliance subscription email Compliance trial email |
No | support@domain.com | Merchant support email address. | |
MERCHANT_SUPPORT_PHONE |
Compliance subscription email Compliance trial email |
No | +01 234 56 78 90 | Merchant support phone number. | |
MY_ACCOUNT_LOGIN_EMAIL |
Compliance subscription email Compliance trial email |
No | john.doe@domain.com | Email address used by shopper to login/signup to myAccount. | |
MY_ACCOUNT_LOGIN_URL |
Compliance subscription email Compliance trial email |
No | https://www.2checkout.com/myaccount | 2Checkout myAccount login/signup URL. | |
MY_ACCOUNT_LOGO |
Compliance subscription email Compliance trial email |
No | https://secure.2checkout.com/ | URL to the MyAccount logo. | |
PAYMENT_PARTNER |
Compliance subscription email Compliance trial email |
Yes | 2Checkout | The name of the Merchant of Record. Always set to "2checkout". | |
PLATFORM_WEBSITE |
Compliance subscription email Compliance trial email |
No | https://www.2checkout.com | 2Checkout's website. | |
REFNO |
Compliance subscription email Compliance trial email |
No | 1234567890 | Order reference number. | |
RENEWAL_PRODUCT_NAME |
Compliance subscription email Compliance trial email |
No | Product name | The name of the renewal product. | |
RENEWAL_PRODUCT_QUANTITY |
Compliance subscription email Compliance trial email |
No | 1 | The quantity that will be used at renewal. |
Google Pay
Overview
Google Pay is a digital wallet and online payment method developed by Google. It's one of the most popular digital wallets, offering a fast and simple way to pay.
Availability
Supported countries: worldwide upon Google Pay local availability.
Supported currencies: EUR, USD, GBP, CHF, DKK, NOK, and SEK.
Supporting recurring payments: yes
Benefits
- Merchants offer shoppers safe payments with their preferred localized payment methods.
- Increased conversion and authorization rates, as Google Pay is used by over 150 million customers across 42 global markets.
- Simplified payment acceptance across different sales channels for Verifone Merchants.
Activate Google Pay
Please contact your account representative and request the activation of Google Pay.
Shopper flow
- The shopper initiates an online purchase.
- Once the products for purchase are selected, the 2Checkout checkout page will be displayed.
- The shopper selects Google Pay as a payment method and continues the checkout process.
4. On the confirmation page, the shopper clicks the Buy with GPay button.
5. The shopper is redirected to the Google Pay payment flow. If the shopper is already logged into their Google Account, they are prompted with a pop-up where they can select their desired saved card, to be used for finalizing this purchase.
If the shopper is not yet logged into their Google Account at this step they will be asked to log in, and then they can select their desired card.
6. Additional authentication via 3DS might be required in the countries where SCA and 3DS are mandatory.
7. Once all steps are completed, the Finish page is displayed, as the order is confirmed.
IPN read receipt response for 2Checkout
Overview
To validate the success of the notification process insert an inline response in the script output of your IPN listener. Once 2Checkout validates the response it considers the IPN successful. Otherwise, 2Checkout sends notifications per the failure recovery process until you provide a valid response.
Read receipt response from 2Checkout
The read receipt response is required in the IPN response body, unlike the previous hash string which is optional, with the EPAYMENT tag. We use this hash as a method of security.
To validate the success of the notification process, insert an inline response in the script output of your IPN listener. 2Checkout expects the following format:
<sig algo="sha256" date="DATE">HASH</sig>
Once 2Checkout validates that the above format is part of the response it considers the IPN successful. Otherwise, 2Checkout continues to send notifications per the failure recovery process until you provide a valid response.
DATE | Datetime stamp. YmdHis. (20081117145935) |
---|---|
HASH |
Calculate the HMAC_SHA signature using:
HASH fields values are case insensitive. |
The fields used in the HMAC_SHA signature are captured from the IPN payload just received, in the same order:
Field name | Description |
---|---|
IPN_PID[0] | First product ID from the IPN_PID[] array. |
IPN_PNAME[0] | First product name from the IPN_PNAME[] array. |
IPN_DATE | IPN date in the YmdHis format (ex: 20081117145935) |
DATE | Response issuing date (server time) in the YmdHis format (ex: 20081117145935) |
For the example parameters included in this article, build the response using shorter data formats for date values. Use only the following values, in the same order, for the HMAC source string:
Field name | Length | Field value |
---|---|---|
IPN_PID[0] | 1 | 1 |
IPN_PNAME[0] | 16 | Software program |
IPN_DATE | 14 | 20050303123434 |
DATE | 14 | 20050303123434 |
Therefore, the HMAC source string is:
1116Software program14200503031234341420050303123434
while the HMAC SHA-2 string is:
ea6f44c39b3d204b59500998fcb9221c92744d9721a94b45fc6d5cda99980176
and the HMAC SHA-3 string is:
85180497aaaa4844a278b52b1ce257d2820dbf5857470a5f678fef2266d0d4a8
Configure the response to output anywhere on the page defined as the IPN URL for:
- SHA-2:
<sig algo="sha256" date="20050303123434">ea6f44c39b3d204b59500998fcb9221c92744d9721a94b45fc6d5cda99980176</sig>
- SHA-3:
<sig algo="sha3-256" date="20050303123434">85180497aaaa4844a278b52b1ce257d2820dbf5857470a5f678fef2266d0d4a8</sig>
2Checkout checks the string’s validity and marks notifications as "successfully sent" in the 2Checkout system. Otherwise, 2Checkout resends the IPN notifications at specific time intervals described in the failure recovery process section, until successfully confirmed. Also, 2Checkout displays an error notification in the Dashboard area of your Merchant Control Panel.
Use ApplePay
Overview
Place an order using catalog products defined in your Control Panel, and collect the payment using ApplePay.
Currency support
Check with 2Checkout support for a list of currencies available for ApplePay.
Activation
For activation, you need to have Apple Pay enabled on your 2Checkout account. Contact the Merchant Support team in order to enable this. After 2Checkout sets up our domain, we will provide you with a domain verification file.
Host your domain verification file at the following path on our server: https://[DOMAIN_NAME]/.well-known/apple-developer-merchantid-domain-association.
Workflow
- Initialize an ApplePay session using our API.
- Collect the "ApplePayDataToken" provided by Apple Pay client side and pass it server side to make the placeOrder API call.
- Create the order object. Use APPLE_PAY as the type in the PaymentDetails object and pass the "ApplePayDataToken" through the "ApplePayToken" property in the PaymentMethod object. Place the order.
Parameters
Parameters | Type/Description |
---|---|
sessionID | Required (string) |
Session identifier, the output of the Login method. Include sessionID into all your requests. 2Checkout throws an exception if the values are incorrect. The sessionID expires in 10 minutes. | |
Order | Required (Object) |
Object designed to collect all data necessary for an order, including billing, product/subscription plan and payment details. |
Response parameters
Parameters | Type/Description |
---|---|
Order information | Object |
Object containing order information. |
Request
<?php
declare(strict_types=1);
class Configuration
{
public const MERCHANT_CODE = 'MERCHANT_CODE';
public const MERCHANT_KEY = 'SECRET_KEY';
public const URL = 'http://api.avangate.local/rpc/6.0';
public const ACTION = 'placeOrder';
//array or JSON
public const PAYLOAD = <<<JSON
{
"Currency": "usd",
"Language": "en",
"Country": "us",
"Source": "API",
"Affiliate": {
"AffiliateCode": "ABCDE1234"
},
"Items": [
{
"Code": "K6DHJXGULK",
"Quantity": 2
}
],
"BillingDetails": {
"Address1": "Test Address",
"City": "LA",
"State": "California",
"CountryCode": "US",
"Email": "testcustomer@2Checkout.com",
"FirstName": "Customer",
"LastName": "2Checkout",
"Zip": "12345"
},
"PaymentDetails":{
"Type":"APPLE_PAY",
"Currency":"USD",
"CustomerIP":"10.10.10.10",
"PaymentMethod":{
"ApplePayToken":"ApplePayDataToken"
}
}
}
JSON;
}
class Client
{
private const LOGIN_METHOD = 'login';
private $calls = 1;
private $sessionId;
private function generateAuth(): array
{
$merchantCode = Configuration::MERCHANT_CODE;
$key = Configuration::MERCHANT_KEY;
$date = gmdate('Y-m-d H:i:s');
$string = strlen($merchantCode) . $merchantCode . strlen($date) . $date;
$algo = 'sha256';
$hash = hash_hmac($algo, $string, $key);
return compact('merchantCode', 'date', 'hash', 'algo');
}
public function login(string $url)
{
$payload = $this->generateAuth();
$response = $this->call($url, array_values($payload), self::LOGIN_METHOD);
$this->sessionId = $response['result'];
}
public function call(
string $url = Configuration::URL,
$payload = Configuration::PAYLOAD,
string $action = Configuration::ACTION
): ?array {
if (empty($this->sessionId) && $action !== self::LOGIN_METHOD) {
$this->login($url);
}
if(is_string($payload)) {
$payload = json_decode($payload, true);
}
if (!empty($this->sessionId)) {
$payload = [$this->sessionId, $payload];
}
$payload = array_filter($payload);
$request = json_encode([
'jsonrpc' => '2.0',
'method' => $action,
'params' => $payload,
'id' => $this->calls++,
]);
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSLVERSION, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Accept: application/json', 'Cookie: XDEBUG_SESSION=PHPSTORM'));
curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
$response = curl_exec($curl);
if(empty($response)) {
die('Server unavailable');
}
echo $response . '</br>';
return json_decode($response, true);;
}
}
$client = new Client();
$result = $client->call();
var_dump($result);
Use ApplePay
Overview
Place an order using catalog products defined in your Control Panel, and collect the payment using ApplePay.
Currency support
Check with 2Checkout support for a list of currencies available for ApplePay.
Activation
For activation, you need to have Apple Pay enabled on your 2Checkout account. Contact the Merchant Support team in order to enable this. After 2Checkout sets up our domain, we will provide you with a domain verification file.
Host your domain verification file at the following path on our server: https://[DOMAIN_NAME]/.well-known/apple-developer-merchantid-domain-association.
Workflow
- Initialize an ApplePay session using our API.
- Collect the "ApplePayDataToken" provided by Apple Pay client side and pass it server side to make the placeOrder API call.
- Create the order object. Use APPLE_PAY as the type in the PaymentDetails object and pass the "ApplePayDataToken" through the "ApplePayToken" property in the PaymentMethod object. Place the order.
Parameters
Parameters | Type/Description |
---|---|
sessionID | Required (string) |
Session identifier, the output of the Login method. Include sessionID into all your requests. 2Checkout throws an exception if the values are incorrect. The sessionID expires in 10 minutes. | |
Order | Required (Object) |
Object designed to collect all data necessary for an order, including billing, product/subscription plan and payment details. |
Response parameters
Parameters | Type/Description |
---|---|
Order information | Object |
Object containing order information. |
Request
<?php
declare(strict_types=1);
class Configuration
{
public const MERCHANT_CODE = 'MERCHANT_CODE';
public const MERCHANT_KEY = 'SECRET_KEY';
public const URL = 'http://api.avangate.local/soap/6.0';
public const ACTION = 'placeOrder';
public const PAYLOAD = <<<JSON
{
"Currency": "usd",
"Language": "en",
"Country": "us",
"Source": "API",
"Affiliate": {
"AffiliateCode": "ABCDE1234"
},
"Items": [
{
"Code": "K6DHJXGULK",
"Quantity": 2
}
],
"BillingDetails": {
"Address1": "Test Address",
"City": "LA",
"State": "California",
"CountryCode": "US",
"Email": "testcustomer@2Checkout.com",
"FirstName": "Customer",
"LastName": "2Checkout",
"Zip": "12345"
},
"PaymentDetails":{
"Type":"APPLE_PAY",
"Currency":"USD",
"CustomerIP":"10.10.10.10",
"PaymentMethod":{
"ApplePayToken":"ApplePayDataToken"
}
}
}
JSON;
}
class Client
{
public function call(
string $url = Configuration::URL,
$payload = Configuration::PAYLOAD,
string $action = Configuration::ACTION
): ?object {
if (is_array($payload)) {
$payload = json_encode($payload);
}
if (!empty($payload)) {
// SoapClient works with objects(StdClass)
$payload = json_decode($payload);
}
$soapClient = $this->getClient($url);
$sessionId = $this->getSession($soapClient);
$args = array_filter([$sessionId, $payload]);
return $soapClient->$action(...$args);
}
public function getClient(string $url): SoapClient
{
return new SoapClient(
$url.'?wsdl',
[
'location' => $url,
'cache_wsdl' => WSDL_CACHE_NONE,
]
);
}
public function getSession(SoapClient $client)
{
$date = gmdate('Y-m-d H:i:s');
$merchantCode = Configuration::MERCHANT_CODE;
$key = Configuration::MERCHANT_KEY;
$string = strlen($merchantCode).$merchantCode.strlen($date).$date;
$algo = 'sha256';
$hash = hash_hmac($algo, $string, $key);
$client->__setCookie('XDEBUG_SESSION', 'PHPSTORM');
return $client->login($merchantCode, $date, $hash, $algo);
}
}
try {
$client = new Client();
var_dump($client->call());
} catch (Exception $ex) {
var_dump($ex);
}
Interface templates
2Checkout provides a list of responsive templates meant for improving the customer experience during the checkout process.
The templates presented below are available in your Merchant Control Panel under Setup → Interface templates → Template Gallery.
Omnicart Flow Checkout (default)
Desktop Version
The Omnicart Flow Checkout is a B2B and B2C shopping cart template with add-on products for cross-sales, promotions, and AOV management, optimized for companies on a SaaS or renewal license model. We've recently updated its layout to encompass CRO key findings and best practices and, thus, help merchants using this template see a 5-10% increase in their conversion rates.
Among the key UX improvements, you can notice the reduced overall height and scroll on-page for the whole form by merging some sections and removing all redundant elements. We've also redesigned the Company/Person selector, changed the order of fields in the form, updated the Paypal payment method with optimized up-to-date flows, simplified texts, and payment method button selector, and added certification and trust logos immediately below the Place Order button on the Review Page.
Mobile Version
Scale Express Checkout
Desktop version
Mobile Version
Swift-Pay Checkout
Desktop version
Mobile Version
Global Optimizer Checkout
Desktop version
Mobile Version
Digital Horizontal Flow Checkout
Desktop version
Mobile Version
Drop-down Monetize Checkout
Desktop version
Mobile Version
CompactPlus Checkout
Desktop version
Mobile Version