Skip to main content

Update upsell campaign

Overview

Use the updateUpSellCampaign method to update an upsell campaign via SOAP API 6.0.

Request Parameters

Parameter Name Type Required/Optional Description
sessionId String Required Unique 2Checkout session ID code.
Code String Required The code of the upsell campaign in UUID format.
UpsellCampaign Object Required New upsell campaign definition.

Name

String

Required

Name of campaign, max 500 characters.

StartDate

String

Optional

The date when the up-sell campaign starts, in the YYYY-MM-DD format. Can be NULL (starts immediately after enabling).

EndDate

String

Optional

The date when the up-sell campaign ends, in the YYYY-MM-DD format. Can be NULL (ends immediately after disabling).

DisplayForManualRenewals

Boolean/Integer

Required

Flag to control if the campaign will be displayed for manual subscription renewal orders. Can be set as true/false/0/1.

Discount

Object

Required

Discount definition object, details below:

      Type

String

Required

Type of discount. Can be FIXED or PERCENT.

      Value

Integer

Required

Percentage discount value (PERCENT discount only).

      Values

Array of objects

Required

List of currency discounts (FIXED discount only), details below:

            Currency

String

Required

Code of Currency for the related amount.

            Amount

Integer

Required

Discount amount value for the related currency.

      DefaultCurrency

String

Required

Code of default Currency (FIXED discount only).

PrimaryProduct

Object

Required

Main (primary) product object, details below:

      Code

String

Required

The code of the product that the recommendation is made for.

      Quantity

Integer

Required

The quantity for the primary product. Can be 0 (standing for any quantity).

      PriceOptions

Array of objects

Optional

Price options list for the primary product, details below:

            Code

String

Required

Price option group code.

            Options

Array of objects

Optional

Price options list, details below:

                  Code

String

Required

Price option code.

                  Value

Integer

Optional

Price option value (for scale interval price option group only).

RecommendedProduct

Object

Required

Recommended product object, details below:

      Code

String

Required

The code of the recommended product.

      Quantity

Integer

Required

The quantity for the recommended product. Can be 0 (standing for “match quantity” setting).

      PriceOptions

Array of objects

Optional

Price options list for the recommended product, details below:

            Code

String

Required

Price option group code.

            Options

Array of objects

Optional

Price options list, details below:

                Code

String

Required

Price option code.

                Value

Integer

Optional

Price option value (for scale interval price options group only).

Enabled

Boolean/Integer

Required

Sets the campaign enabled or disabled. Can be set as true/false/0/1.

Description

Array of objects

Required

List of campaign language descriptions, details below:

      Language

String

Required

Code of the language.

      Text

String

Required

The text of the description in the associated language.

Request example

<?php
require ('PATH_TO_AUTH');

$upsell = new \stdClass();

$upsellCode = 'fc580e11-09e4-483f-b73e-cd0f460bcd9d';

$upsell->Name = 'December 2020 upsell campaign’;
$upsell->StartDate = '2020-12-21';
$upsell->EndDate = '2020-12-25';
$upsell->DisplayForManualRenewals = false;

// setup percent discount
$discountPercent = new \stdClass();
$discountPercent->Type = 'PERCENT';
$discountPercent->Value = 5;

// setup fixed discount
$discountFixed = new \stdClass();
$discountFixed->Type = 'FIXED';
$discountValues = [
    'USD' => 10,
    'EUR' => 8,
    'TRY' => 80,
    'RUB' => 1100,
];
$dv = [];
foreach ($discountValues as $curr => $amt) {
    $disc = new \stdClass();
    $disc->Currency = $curr;
    $disc->Amount = $amt;

    $dv[] = $disc;
}
$discountFixed->Values = $dv;

// assign discount
$upsell->Discount = $discountPercent;
# OR
# $upsell->Discount = $discountFixed;


// setup primary product
$primaryProduct = new \stdClass();
$primaryProduct->Code = $productCode;
$primaryProduct->Quantity = 1;
$ppPriceOptionGroup1 = new \stdClass();
$ppPriceOptionGroup1->Code = 'OPTGRP2';
$ppPriceOptionGroup1Option = new \stdClass();
$ppPriceOptionGroup1Option->Code = 'OptGrp2Code2';
$ppPriceOptionGroup1->Options = [$ppPriceOptionGroup1Option];

$ppPriceOptionGroup2 = new \stdClass();
$ppPriceOptionGroup2->Code = 'interval_scale_grp1';
$ppPriceOptionGroup2Option = new \stdClass();
$ppPriceOptionGroup2Option->Code = 'interval_scale_grp1-1-10';
$ppPriceOptionGroup2Option->Value = '6';
$ppPriceOptionGroup2->Options = [$ppPriceOptionGroup2Option];

$primaryProduct->PriceOptions = [$ppPriceOptionGroup1, $ppPriceOptionGroup2];
$upsell->PrimaryProduct = $primaryProduct;

// setup recommended product
$recommProduct = new \stdClass();
$recommProduct->Code = $recProductCode;
$recommProduct->Quantity = 0; // stands for “match quantity” 
$rpPriceOptionGroup1 = new \stdClass();
$rpPriceOptionGroup1->Code = 'CHECKB_LIST';
$rpPriceOptionGroup1Option1 = new \stdClass();
$rpPriceOptionGroup1Option1->Code = 'chk1';
$rpPriceOptionGroup1Option2 = new \stdClass();
$rpPriceOptionGroup1Option2->Code = 'chk3';
$rpPriceOptionGroup1->Options = [$rpPriceOptionGroup1Option1, $rpPriceOptionGroup1Option2];
$recommProduct->PriceOptions = [$rpPriceOptionGroup1];
$upsell->RecommendedProduct = $recommProduct;

$upsell->Enabled = true;

// setup languagte descriptions / texts
$enDescription = new \stdClass();
$enDescription->Language = 'EN';
$enDescription->Text = 'Buy <!--{RECOMMENDED_PRODUCT_NAME}--> for just <!--{RECOMMENDED_PRODUCT_PRICE}--> until Dec 25th';
$upsell->Description = [$enDescription];

try {
    $upsellResponse = $client->updateUpsellCampaign($sessionID, $upsellCode, $upsell);
} catch (SoapFault $e) {
    echo  'SOAP Exception caught: ' . $e->getMessage()
}


Response

Parameters Type Description

UpSell

Object

Object containing information related to the upsell campaigns, including product information and discount settings.

 

Authentication

Overview

Use the login method for the authentication process in the 2Checkout system.

Parameters

Parameters Type/Description

MerchantCode

required (string)

 

Your merchant identifier (received from 2Checkout).

 

Date

required (string)

 

GMT ISO Date format (e.g. 2010-01-01 12:13:14)

 

Hash

required (Object)

 

Calculated HMAC_SHA256 signature based on MerchantCode and Date, using your secret key (see example below).

Response

Parameters

Type/Description

sessionID

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.

Request

To create the HMAC_SHA256 source string use your merchant code (available here) and the date of the request, prefixing them with the length in bytes of each respective value, along with your account’s secret key (for UTF-8 characters the length in bytes might be longer that the string length). For example:

 

Parameters Type/Description

MerchantCode

Avangate

 

8AVANGATE

 

Date

2010-05-13 12:12:12

 

192010-05-13 12:12:12

 

HMAC source string

8AVANGATE192010-05-13 12:12:12

 

 

 

Secret key

SECRET_KEY

 

 

Calculated HMAC_SHA256 signature based on MerchantCode and Date, using your secret key:

bf763db7d333e9c3038698cf59ada3e6

Request

<?php

/**
 * @throws JsonException
 */
function callRPC($Request, $host) {
    $curl = curl_init($host);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($curl, CURLOPT_VERBOSE, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
    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'));
    $RequestString = json_encode($Request, JSON_THROW_ON_ERROR);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $RequestString);

    $ResponseString = curl_exec($curl);

    if (!empty($ResponseString)) {
        echo($ResponseString);
        $Response = json_decode($ResponseString, false, 512, JSON_THROW_ON_ERROR);
        if (isset($Response->result)) {
            return $Response->result;
        }
        if (!is_null($Response->error)) {
            echo("Method: {$Request->method}" . PHP_EOL);
            echo("Error: {$Request->error}" . PHP_EOL);
        }
    } else {
        return null;
    }
    return null;
}

$host = 'https://api.avangate.com/rpc/3.0/';

$merchantCode = "YOUR_MERCHANT_CODE"; // your account's merchant code available in the 'System settings' area of the cPanel: https://secure.2checkout.com/cpanel/account_settings.php
$key = "YOUR_SECRET_KEY"; // your account's secret key available in the 'System settings' area of the cPanel: https://secure.2checkout.com/cpanel/account_settings.php

$string = strlen($merchantCode) . $merchantCode . strlen(gmdate('Y-m-d H:i:s')) . gmdate('Y-m-d H:i:s');
$algo = "sha256";
$hash = hash_hmac($algo, $string, $key);

$i = 1;

$jsonRpcRequest = new stdClass();
$jsonRpcRequest->jsonrpc = '2.0';
$jsonRpcRequest->method = 'login';
$jsonRpcRequest->params = array($merchantCode, gmdate('Y-m-d H:i:s'), $hash, $algo);
$jsonRpcRequest->id = $i++;

try {
    $sessionID = callRPC($jsonRpcRequest, $host);
    echo("Auth token: {$sessionID}" . PHP_EOL);
} catch (JsonException $e) {
    echo("Error: {$e->getMessage()}" . PHP_EOL);
}

Delete upsell campaign

Overview

Use the deleteUpSellCampaign method via SOAP API 6.0 to permanently delete an upsell campaign in any status (active, disabled, expired).

Request parameters

Parameters Type Required/Optional Description
upSellCampaignCode String Required The identifying code of the upsell campaign.

    Request sample

    <?php
    declare(strict_types=1);
    
    class Configuration
    {
        public const MERCHANT_CODE = '';
        public const MERCHANT_KEY = '';
        public const URL = 'http://api.2checkout.com/soap/6.0';
        public const ACTION = 'deleteUpsellCampaign';
        public const ADDITIONAL_OPTIONS = null;
        public const PAYLOAD = "f4b76ac3-6b2e-492f-a468-b34103876470";
    }
    
    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);
            }
            
            $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;
            $hash = hash_hmac('md5', $string, $key);
            $client->__setCookie('XDEBUG_SESSION', 'PHPSTORM');
    
            return $client->login($merchantCode, $date, $hash);
        }
    }
    
    try {
        $client = new Client();
        var_dump($client->call());
    } catch (Exception $ex) {
        var_dump($ex);
    }
    
    

    Response

    • 204 - 'No content' if SUCCESS
    • 4xx if FAILED with distinct error messages

    Error handling

    Error code Message
    UPSELL_CAMPAIGN_NOT_FOUND Upsell campaign with code test was not found.
    UPSELL_CAMPAIGN_CODE_EMPTY Code is not set
    UPSELL_CAMPAIGN_CODE_TOO_LONG Code exceeds allowed max length (255)

     

    Set SKU codes

    Overview

    Use the setSku method to create a valid combination of elements (code) for a specific product. 

    In case there is an active SKU schema available for that Product Code and Pricing Configuration Code, when setting new SKUs the entire existing schema will be overwritten with the new values. The same validations that are applied to the CSV file import in the Merchant Control Panel are applicable to the API as well.

    Product SKUs created via API will also be available in the Merchant Control Panel for manual update (Dashboard → Setup → Products → Edit product → Information → SKU Manager (SKU list Tab).

    Request

    <?php
    
    require ('PATH_TO_AUTH');
    
    $product = new \stdClass();
    $product->ProductCode = "6B3CB17DDA_COPY1";
    
    $skuPricingOption1 = new \stdClass();
    $skuPricingOption1->Code = "E684EC99B0";
    
    $skuDetail1 = new \stdClass();
    $skuDetail1->ProductSKU = "Product_Test_SKU_001022";
    $skuDetail1->Currency = "USD";
    $skuDetail1->FromQty = 1;
    $skuDetail1->ToQty = 3
    $skuDetail1->PurchaseType = "NEW_PRODUCT";
    
    $skuGroup = new \stdClass();
    $skuGroup->GroupCode = "GRUP_1";
    
    $skuGroupOption = new \stdClass();
    $skuGroupOption->Name = "option name 1";
    $skuGroupOption->Value = "option_code_1";
    
    $skuGroup->Options = [$skuGroupOption];
    
    $skuDetail1->Groups = [$skuGroup];
    $skuDetail1->Options = "eJwBLADT/6G10uOW07exk6mNk7KvrpaSc4l1lbXToqi5sriTcbOXseWu3ZGrlXauuZOojh8cww==";
    
    $skuDetail2 = new \stdClass();
    $skuDetail2->ProductSKU = "Product_Test_SKU_001023";
    $skuDetail2->Currency = "USD";
    $skuDetail2->FromQty = 1;
    $skuDetail2->ToQty = 3
    $skuDetail2->PurchaseType = "NEW_PRODUCT";
    
    $skuGroup = new \stdClass();
    $skuGroup->GroupCode = "GRUP_1";
    
    $skuGroupOption = new \stdClass();
    $skuGroupOption->Name = "option name 2";
    $skuGroupOption->Value = "option_code_2";
    
    $skuGroup->Options = [$skuGroupOption];
    
    $skuDetail2->Groups = [$skuGroup];
    $skuDetail2->Options = "eJwBLADT/6G10uOW07exk6mNk7KvrpaSc4l1lbXToqi5sriTcbOXseWu3ZGrmXauuZOojjccxw==";
    
    $skuPricingOption1->Details = [$skuDetail1, $skuDetail2];
    
    $product->SkuPricingOptions = [$skuPricingOption1];
    
    $jsonRpcRequest = array (
        'method' => 'setSku',
        'params' => array($sessionID, [$product]),
        'id' => $i++,
        'jsonrpc' => '2.0'
    );
    
    var_dump (callRPC((Object)$jsonRpcRequest, $host, true));
    

    Response

    class stdClass#7 (3) {
      public $ProductCode =>
      string(16) "6B3CB17DDA_COPY1"
      public $PricingConfigurations =>
      array(1) {
        [0] =>
        class stdClass#8 (6) {
          public $Code =>
          string(10) "E684EC99B0"
          public $Currencies =>
          array(1) {
            [0] =>
            class stdClass#9 (1) {
              public $Code =>
              string(3) "EUR"
            }
          }
          public $PurchaseTypes =>
          array(1) {
            [0] =>
            class stdClass#10 (1) {
              public $Code =>
              string(7) "RENEWAL"
            }
          }
          public $QuantityIntervals =>
          array(0) {
          }
          public $PriceOptionGroups =>
          array(0) {
          }
          public $SkuCollection =>
          array(1) {
            [0] =>
            class stdClass#11 (2) {
              public $ProductCode =>
              string(16) "6B3CB17DDA_COPY1"
              public $SkuPricingOptions =>
              array(1) {
                [0] =>
                class stdClass#12 (3) {
                  public $Code =>
                  string(10) "E684EC99B0"
                  public $Details =>
                  array(8) {
                    [0] =>
                    class stdClass#13 (7) {
                      public $ProductSKU =>
                      string(23) "Product_Test_SKU_008899"
                      public $Currency =>
                      string(3) "EUR"
                      public $FromQty =>
                      int(1)
                      public $ToQty =>
                      int(3)
                      public $PurchaseType =>
                      string(7) "RENEWAL"
                      public $Groups =>
                      array(1) {
                        [0] =>
                        class stdClass#14 (2) {
                          public $GroupCode =>
                          string(6) "GRUP_2"
                          public $Options =>
                          array(1) {
                            [0] =>
                            class stdClass#15 (2) {
                              public $Name =>
                              string(6) "grup 2"
                              public $Value =>
                              string(13) "option_code_4"
                            }
                          }
                        }
                      }
                      public $Options =>
                      string(32) "a:1:{i:16885;a:1:{i:0;i:78164;}}"
                    }
                    [1] =>
                    class stdClass#16 (7) {
                      public $ProductSKU =>
                      string(23) "Product_Test_SKU_008902"
                      public $Currency =>
                      string(3) "EUR"
                      public $FromQty =>
                      int(1)
                      public $ToQty =>
                      int(3)
                      public $PurchaseType =>
                      string(7) "RENEWAL"
                      public $Groups =>
                      array(1) {
                        [0] =>
                        class stdClass#17 (2) {
                          public $GroupCode =>
                          string(6) "GRUP_2"
                          public $Options =>
                          array(1) {
                            [0] =>
                            class stdClass#18 (2) {
                              public $Name =>
                              string(6) "grup 2"
                              public $Value =>
                              string(13) "option_code_4"
                            }
                          }
                        }
                      }
                      public $Options =>
                      string(6) "a:0:{}"
                    }
                    [2] =>
                    class stdClass#19 (7) {
                      public $ProductSKU =>
                      string(23) "Product_Test_SKU_008900"
                      public $Currency =>
                      string(3) "EUR"
                      public $FromQty =>
                      int(1)
                      public $ToQty =>
                      int(3)
                      public $PurchaseType =>
                      string(7) "RENEWAL"
                      public $Groups =>
                      array(1) {
                        [0] =>
                        class stdClass#20 (2) {
                          public $GroupCode =>
                          string(6) "GRUP_2"
                          public $Options =>
                          array(1) {
                            [0] =>
                            class stdClass#21 (2) {
                              public $Name =>
                              string(6) "grup 2"
                              public $Value =>
                              string(13) "option_code_4"
                            }
                          }
                        }
                      }
                      public $Options =>
                      string(32) "a:1:{i:16885;a:1:{i:0;i:78165;}}"
                    }
                    [3] =>
                    class stdClass#22 (7) {
                      public $ProductSKU =>
                      string(23) "Product_Test_SKU_008901"
                      public $Currency =>
                      string(3) "EUR"
                      public $FromQty =>
                      int(1)
                      public $ToQty =>
                      int(3)
                      public $PurchaseType =>
                      string(7) "RENEWAL"
                      public $Groups =>
                      array(1) {
                        [0] =>
                        class stdClass#23 (2) {
                          public $GroupCode =>
                          string(6) "GRUP_2"
                          public $Options =>
                          array(1) {
                            [0] =>
                            class stdClass#24 (2) {
                              public $Name =>
                              string(6) "grup 2"
                              public $Value =>
                              string(13) "option_code_4"
                            }
                          }
                        }
                      }
                      public $Options =>
                      string(32) "a:1:{i:16885;a:1:{i:0;i:78166;}}"
                    }
                    [4] =>
                    class stdClass#25 (7) {
                      public $ProductSKU =>
                      string(23) "Product_Test_SKU_008907"
                      public $Currency =>
                      string(3) "EUR"
                      public $FromQty =>
                      int(4)
                      public $ToQty =>
                      int(7)
                      public $PurchaseType =>
                      string(7) "RENEWAL"
                      public $Groups =>
                      array(1) {
                        [0] =>
                        class stdClass#26 (2) {
                          public $GroupCode =>
                          string(6) "GRUP_2"
                          public $Options =>
                          array(1) {
                            [0] =>
                            class stdClass#27 (2) {
                              public $Name =>
                              string(6) "grup 2"
                              public $Value =>
                              string(13) "option_code_4"
                            }
                          }
                        }
                      }
                      public $Options =>
                      string(32) "a:1:{i:16885;a:1:{i:0;i:78164;}}"
                    }
                    [5] =>
                    class stdClass#28 (7) {
                      public $ProductSKU =>
                      string(23) "Product_Test_SKU_008910"
                      public $Currency =>
                      string(3) "EUR"
                      public $FromQty =>
                      int(4)
                      public $ToQty =>
                      int(7)
                      public $PurchaseType =>
                      string(7) "RENEWAL"
                      public $Groups =>
                      array(1) {
                        [0] =>
                        class stdClass#29 (2) {
                          public $GroupCode =>
                          string(6) "GRUP_2"
                          public $Options =>
                          array(1) {
                            [0] =>
                            class stdClass#30 (2) {
                              public $Name =>
                              string(6) "grup 2"
                              public $Value =>
                              string(13) "option_code_4"
                            }
                          }
                        }
                      }
                      public $Options =>
                      string(6) "a:0:{}"
                    }
                    [6] =>
                    class stdClass#31 (7) {
                      public $ProductSKU =>
                      string(23) "Product_Test_SKU_008908"
                      public $Currency =>
                      string(3) "EUR"
                      public $FromQty =>
                      int(4)
                      public $ToQty =>
                      int(7)
                      public $PurchaseType =>
                      string(7) "RENEWAL"
                      public $Groups =>
                      array(1) {
                        [0] =>
                        class stdClass#32 (2) {
                          public $GroupCode =>
                          string(6) "GRUP_2"
                          public $Options =>
                          array(1) {
                            [0] =>
                            class stdClass#33 (2) {
                              public $Name =>
                              string(6) "grup 2"
                              public $Value =>
                              string(13) "option_code_4"
                            }
                          }
                        }
                      }
                      public $Options =>
                      string(32) "a:1:{i:16885;a:1:{i:0;i:78165;}}"
                    }
                    [7] =>
                    class stdClass#34 (7) {
                      public $ProductSKU =>
                      string(23) "Product_Test_SKU_008909"
                      public $Currency =>
                      string(3) "EUR"
                      public $FromQty =>
                      int(4)
                      public $ToQty =>
                      int(7)
                      public $PurchaseType =>
                      string(7) "RENEWAL"
                      public $Groups =>
                      array(1) {
                        [0] =>
                        class stdClass#35 (2) {
                          public $GroupCode =>
                          string(6) "GRUP_2"
                          public $Options =>
                          array(1) {
                            [0] =>
                            class stdClass#36 (2) {
                              public $Name =>
                              string(6) "grup 2"
                              public $Value =>
                              string(13) "option_code_4"
                            }
                          }
                        }
                      }
                      public $Options =>
                      string(32) "a:1:{i:16885;a:1:{i:0;i:78166;}}"
                    }
                  }
                  public $Errors =>
                  array(0) {
                  }
                }
              }
            }
          }
        }
      }
      public $Errors =>
      array(0) {
      }
    }
    

     

    Create an opportunity

    Overview

    The instructions in this article will guide you through the process of creating a new opportunity in your CPQ Salesforce app.

    The Verifone CPQ does not change the native Salesforce Opportunity screen or your customizations. Also, the CPQ app requires opportunities to have an account and currency selected.

    Create or edit an opportunity

    To create an opportunity, follow these steps:

    1. Go to Contact or to the Related list.

    create new opportunity from contact related list.png

    2. In the Opportunities section, click on the New button. A window will open and you can fill in the required data. The newly created Opportunity will be linked to the Account.

    3. You can also create a new opportunity by clicking on the Opportunity tab.

    create a new opportunity from the Opportunity tab.png

    4. A window will open and you need to fill in the required data, including the Account. The Opportunity can be edited using either in-line editing or the Edit button on the Opportunity screen.

    edit an opportunity.png

    Retrieve available currencies

    Overview

    Use the getAvailableCurrencies method via SOAP API 6.0 to get the list of available currencies. If the countryCode parameter is added, the paymentMethod parameter also becomes mandatory (you need to use both parameters or none).

    Request Parameters

    Parameter Name Type Required/Optional Description
    sessionId String Required 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.
    countryCode String Required The ISO country code (two-letter code). If the countryCode parameter is used, the paymentMethod parameter must be used as well and both parameters are mandatory.
    paymentMethod String Required The payment method for which you are retrieving the list of available currencies.

    Request Example

    <?php
    
    $apiVersion = '6.0';
    $host = "http://api.avangate.local:8081/soap/".$apiVersion."/";
    
    $client = new SoapClient($host."?wsdl", array('location' => $host, 'cache_wsdl' => WSDL_CACHE_NONE));
    $client->__setCookie('XDEBUG_SESSION', 'PHPSTORM');
    
    $merchantCode = "124231873235";
    $key = "%&7+J[Q7T!B!1(z1e7&a";
    
    $date = gmdate('Y-m-d H:i:s');
    $string = strlen($merchantCode) . $merchantCode . strlen($date) . $date;
    $hash = hash_hmac('md5', $string, $key);
    
    try {
        echo "login \r\n";
        $sessionID = $client->login($merchantCode, $date, $hash);
    } catch (SoapFault $e) {
        echo  $e->getMessage();
    }
    
    print_r("session: ". $sessionID);
    
    $countryCode = 'ro';
    $paymentMethod = 'CC';
    
    try {
    //    $response = $client->getAvailableCurrencies($sessionID);
        $response = $client->getAvailableCurrencies($sessionID, $countryCode, $paymentMethod);
    }
    
    catch (SoapFault $e) {
        echo "VendorSettingsController.php: " . $e->getMessage();
        exit;
    }
    var_dump($response);
    
    

    Response

    Parameter Name Type Description
    currencies Array An array of currency objects.

    Response Example

    [
      {
          "Code":"USD",
          "ISO3DigitCode":"840",
          "Label":"United States Dollar",
          "Symbol":"$",
          "SymbolPosition":"left",
          "DecimalSeparator":".",
          "UnitSeparator":",",
          "Decimals":"2"
       }
    ] 

    Order session contents

    Overview

    Retrieve the current cart session content, and learn insights about your customers actions in cart.

    You can obtain the VAT or sales TAX based on current cart items, prefill the customer information based on the subscription reference, or get the price applied in cart by using the API method from below.

     

    Buy-link parameters

    Overview

    To start selling with 2Checkout, you need to redirect shoppers to 2Checkout's hosted secure checkout (ordering interface). Depending on your desired workflow, you can either generate buy-links using our dedicated interface (Generate Sales Links) or generate the parameters dynamically, in your own system.

    Availability

    All 2Checkout accounts. 

    Requirements

    Configure at least one product to generate a buy-link. 

    Query parameters

    When you generate a checkout link, 2Checkout automatically includes some of the parameters in the list below in the URL, depending on a number of variables, such as the purchase flow you choose, the products, discounts, currencies, cart languages, preselected payment methods and more. You can use these query parameters to generate checkout links in your own system, without having to rely on the functionality in you account. 

    PARAMETER

    Required/Optional

    DESCRIPTION

    PRODS

    Required

    IDs for the products added to checkout, separated by a comma. Do not insert spaces or blanks between values. PRODS=1234567,1234568. 2Checkout automatically assigns each product added/imported into the platform a system-generated unique numeric (int) identifier. Example: Product ID = 1234567.

    In the Control Panel, click to edit a product, and select the Information tab. The Product ID of the item you're editing is available at the top of the General area under Information. Product IDs are different than Product Codes, also available in this area, but which you control.

    QTY

    Required

    The number of units (quantity)  for each product in checkout, separated by a commaDo not insert spaces or blanks between values. QTY=2,1

    INFO1234567

    Optional

    Maximum length: 100 chars. Extra information that you can associate with the items in an order. 
    For example: INFO1234567=free%20download orINFO1234567=technical%20support%20included. Use %20 instead of blanks for browser compatibility purposes.

    In the examples above, 1234567 is the unique product identifier (Product ID) from the 2Checkout platform.

    OPTIONS123456

    Optional

    Preselected pricing options for the corresponding product. The values used are the pricing options codes (the codes are set for each option individually). For example: OPTIONS5211=5usr,2year. Pricing options codes are case sensitive.

    For scale pricing options group, you also need to send a specific value within the intervals defined. Let's assume that you created a Users scale pricing options group with the unique code: users, and two options: 1 to 10 ($99 per user) and 11 to 50 ($88 per user).

    If you want to build the buy-link for a product using the Users scale pricing options group and charge customers for 35 users, the parameter should be formatted as such:OPTIONS=users=35, including both the unique code of the pricing options group and the specific value of the scale pricing interval.

    COUPON

    Optional

    Promotion coupon code discounting the order. To send multiple values separate them by commas, in scenarios in which different coupons discount specific products added to cart.  
    For example: [...]&COUPON=voucher1,voucher2[...]. The order of the values you send for the COUPON parameter does not need to match the order of products identifiers sent using PRODS. 

    REF

    Optional

    External order reference. Add a string identifier to buy-links (max 100 char), to save extra info with the order, in addition to the system generated 2Checkout order reference. Consider using a MD5 HASH (a 32 characters string) instead of longer references. You can validate the hash after you receive the order notification from 2Checkout. External references are visible when accessing the order details page for your orders.

    CARD

    Optional

    Possible values:

    • 1 - the link will generate a checkout page with review; displays the credit card details form in the selected landing page. Shoppers will place orders from the review page.
    • 2 - the link will generate a checkout page without review; displays the credit card details form in the selected landing page, and enables shoppers to place orders immediately after entering their payment data, excluding the review page altogether and shortening the purchase funnel.
    CART Optional

    Possible values:

    • CART=0 or missing - the cart contents are "read only", meaning that the customer cannot change/edit pricing options, quantity, etc. This link will be used in the "Request payment" feature from the cPanel Generate links page.  To make the contents of the cart read-only, select the Locked Express payments checkout, which contains the CART=0 parameter. 
    • CART=1 value means that the cart permits changes to the products contained in it, e.g. quantity, pricing options, add extra products from a cross-sell).

    PAY_TYPE

    Optional

    Preselected payment method for the order. The parameter can be used in both modules, "Shopping Cart" or "Checkout". By default, if the parameter is missing, the default payment method for the order is assumed to be Credit/debit card (Visa/MasterCard). 
    Possible values are:

    • ALIPAY - 支付宝 (Alipay)
    • BOLETO - Boleto/Pix
    • CARTE_BLEUE - Carte Bleue
    • CCAMEX - American Express
    • CCDINERS - Diners Club
    • CCJCB - JCB
    • CCVISAMC - Visa/MasterCard/Eurocard
    • CHECK - Check
    • DIRECT_DEBIT - Direct Debit
    • DIRECT_EBANKING - DIRECTebanking.com
    • DISCOVER - Discover/Novus
    • FAX - Fax
    • FREE - Payment not required
    • GIROPAY - Giropay
    • IDEAL - iDEAL
    • PAYNEARME - Pay cash at 7-Eleven
    • PAYPAL - PayPal
    • PURCHASE_ORDER - Purchase order
    • SOLO - Solo (Discontinued)
    • TRIALPAY - TrialPay Checkout
    • VENDOR2VENDOR - Vendor to vendor
    • WEBMONEY - WebMoney
    • WE_CHAT_PAY - WeChat Pay
    • WIRE - Bank/Wire transfer

    LANG

    Optional

    Selected language for order processing interface and emails. The parameter can be used in both modules, "Shopping Cart" or "Checkout". By default, if the parameter is missing, the used language is assumed to be English. All possible values for this moment are listed in the table below.

    LANGUAGES

    Optional

    This parameter sets the order interface language. 

    • ar العربية Arabic
    • bg български език Bulgarian
    • cs Česky Czech
    • da Dansk Danish
    • de Deutsch German
    • el Ελληνικά Greek
    • en English
    • es Español Spanish
    • fa فارسی Persian
    • fi Suomi Finnish
    • fr Français French
    • he Hebrew עִבְרִית
    • hi Hindi
    • hr Hrvatski jezik Croatian
    • hu Magyar Hungarian
    • it Italiano Italian
    • ja 日本語 Japanese
    • ko 한국어 Korean
    • nl Nederlands Dutch
    • no Norsk Norwegian
    • pl Polski Polish
    • pt Português Portuguese
    • pt-br Português do Brasil Brazilian Portuguese
    • ro Română Romanian
    • ru Русский Russian
    • sk Slovenčina Slovak
    • sl Slovène Slovenian
    • sr Serbian
    • sv Svenska Swedish
    • th ไทย Thai
    • tr Türkçe Turkish
    • zh 中文 Chinese Simplified (Cantonese)
    • zy 繁体中文 Chinese Mandarin Traditional

    SRC

    Optional

    To identify the source of your sales (which links are performing better), a separate link identifier can be assigned to each link. For instance, if there are two buy-links on your website, one in the product page and another one in the download page, you can track the source page by entering the following parameters: 
    SRC=prodpage for the product page or SRC=dldpage for the link on the download page
    (dldpage and prodpage are example strings only, you can use any combination). Note: SRC cannot have the value "0".

    CHK_CROSS

    Optional

    If cross selling products are available in the shopping cart, sending this parameter will check all products in cross-selling. This is only available for shopping cart landing pages

    CROSS_SELL

    Optional

    CROSS_SELL[cross_sell_product_ID]=main_product_ID

    CROSS_SELL must be used in conjunction with CART=1 in the same buy-link. The presence of the CART=1 parameter in the buy-link is mandatory, otherwise the cross-selling campaign will not be triggered.

    Let's assume there's a cross-selling campaign configured between Product A with the following Product ID=1234567, which is the main product, and Product B, the recommended product with Product ID=5566778.

    1. Add the main product to cart using its buy-link:

    https://secure.2checkout.com/order/checkout.php?PRODS=1234567&CART=1

    Add the recommended (cross-sell) product to cart using its link, to which the &CROSS_SELL parameter is added:

    https://secure.2checkout.com/order/checkout.php?PRODS=5566778&CART=1
    &CROSS_SELL[5566778]=1234567 ​​​​
    

    Result: both the main product and the cross-sell product are added to cart one after the other; any discounts impacting the recommended offering are set accordingly.

    2. Build a mixt buy-link with the main and cross-sell product:

    https://secure.2checkout.com/order/checkout.php?PRODS=1234567,5566778&QTY=1
    &CURRENCY=USD&CROSS_SELL[5566778]=1234567

    Result: both the main product and the cross-sell product are added to cart simultaneously; any discounts impacting the recommended offering are set accordingly.

    CHK_BCKUP

    Optional

    If you have the Backup CD option enabled for your account, sending this parameter will check the Backup CD option available in shopping cart. This is only available for shopping cart landing pages

    CHK_DIS

    Optional

    If you have the Download Insurance option enabled for your account, sending this parameter will check the Download Insurance option available in shopping cart. This is only available for shopping cart landing pages

    CHK_GIFT

    Optional

    If you have enabled gift feature for the products available in the shopping cart, sending this parameter will check the option to buy the products as a gift for someone else. This is only available for shopping cart landing pages

    SHOPURL

    Optional

    Custom URL used for "Back to shopping" link

    CURRENCY

    Optional

    Preselected billing currency to be used in the transaction. This is the currency used to charge your customers.

    DCURRENCY

    Optional

    Preselected display currency to be used in the order in order to give an estimate of the cost in the local currency detected by geolocation. See the "Tips & tricks" section below in order to learn about exchange rates used. Display currency can differ than billing currency, and in the shopping cart it's presented to customers in a more prominent position.

    DOTEST

    Optional

    Set this parameter to 1 to place orders in a test environment. Dummy credit card details are provided so you can test the entire order placing process.

    CLEAN_CART

    Optional

    Set this parameter to 1 to reset the cart contents or to ALL to reset the cart session. Use this parameter to remove products from the current cart session. Note: CLEAN_CART does remove production options or custom prices from the current cart session. However, it does not delete cookies and cache.

    ORDERSTYLE

    Optional

    Allows you to set the corresponding template, overriding the default template assigned to the product group. Each template defined in the Interface Templates area of the Control Panel has a unique identifier associated which is visible in the browser address bar when previewing the shopping cart.

    AFFILIATE

    Optional

    A valid 2Checkout Affiliate ID that you want to credit the sale to. Affiliate identifiers can be extracted from the Active Relationships area of the Affiliate network, by clicking on names of your affiliates to access their details.

     

    In case the value of the parameter is set to 0,  ‘AFFILIATE=0’, and the “Disable Affiliate Parameter” option is disabled in GAP for the vendor account, the platform will not attribute the order to any affiliate, regardless if the affiliate cookie is set.

    LICENSE

    Optional for upgrade links

    Is used with upgrade links to trigger the upgrade of a specific subscription, such as in the following example.

    https://secure.2checkout.com/order/upgrade.php?LICENSE=1234567, where 1234567 represents the 2Checkout subscription reference.

    CUSTOMERID

    Optional

    The external customer reference. Aggregate subscriptions under the same Customer account if the products they're associated to are purchased by the same shopper by taking advantage of the CUSTOMERID (case sensitive) parameter added to buy-links.

    AV_CUSTOMERID

    Optional

    The 2Checkout customer reference. Aggregate subscriptions under the same Customer account if the products they're associated to are purchased by the same shopper by taking advantage of the AV_CUSTOMERID (case sensitive) parameter added to buy-links. The 2Checkout system generates default customer numerical (integer) IDs (AV_CUSTOMERID) automatically for all orders containing products that feature subscriptions. 

    PLNKEXP

    Optional

    UTC timestamp for link expiration

    PLNKID

    Optional

    Unique link identifier used to restrict access to the link only to the IP address of the first user that clicks it. 250 chars.

    PHASH

    Required

    Required HMAC_MD5/ HMAC_SHA signature in order to prevent the request from being exploited.

    TPERIOD

    Required (only for trials)

    Trial period must be at least 7 days. For example enter TPERIOD=7 for a 7-day trial, or TPERIOD=30 for a 30-day evaluation period. Can also be used as TPERIOD1234567=7, with 1234567 representing the product ID.

    WS_ORDER

    Optional

    (optional) - Use the WS_ORDER parameter to control what website URL is displayed in the email messages customers receive from 2Checkout. 

    BACK_REF

    Optional

    Redirect URL. Shopper redirect will only happen after the order is placed successfully (the 'Thank you' page is bypassed completely). 

    LAYOUT_TYPE

    Optional

    LAYOUT_TYPE enables you to control which version of the shopping cart is served to shoppers. Possible values:

    CLASSIC - the desktop variant of the shopping cart (using LAYOUT_TYPE=CLASSIC will always display the desktop version of the cart even to mobile device users);

    MOBILE - 2Checkout mobile cart (using LAYOUT_TYPE=MOBILE will always display the mobile version of the shopping cart, even to users of desktop browsers).

    AVGAFFILIATE

    Optional

    AVGAFFILIATE=12345 (for an affiliate with the 12345 affiliate ID). By including affiliate ID parameters in redirects to your website, 2Checkout enables you to better monitor the traffic generated by your affiliates. 

    UPGRADEPROD

    Required (only for upgrades)

    Product to be upgraded to, the form of the product ID

    UPGRADEOPT

    Required (only for upgrades)

    Options of the product to be upgraded to, in the form of the option code

    RENEWAL_SRC Not required (only for subscription renewals)

    RENEWAL_SRC is added automatically ONLY to the system-generated manual renewal links sent by 2Checkout to customers via manual renewal notifications (emails). Manual renewal links available in subscription details pages do not include this parameter.

    RENEWAL_SRC can be used in conjunction with analytics systems to identify the notification email that acted as the source for customers to manually renew their subscription.

    Possible values correspond to the Notification time settings for manual billing emails

    • 30 (30 days before the subscription expiration date)
    • 15 (15 days before the subscription expiration date)
    • 7 (7 days before the subscription expiration date)
    • 1 (1 days before the subscription expiration date)
    • 0 (on the expiration date)
    • 5 (5 days after the subscription expiration date)
    • 15 (15 days after the subscription expiration date)
    NODATA Optional Value=1. Use in conjunction with PAY_TYPE=PAYPAL to trigger the Express payments checkout flow with PayPal which will circumvent 2Checkout checkout and redirect customers directly to PayPal. Expected behavior: Shoppers click on a buy-link using the NODATA=1 and PAY_TYPE=PAYPAL parameters, and are redirected to PayPal, rather than be taken to the 2Checkout shopping cart (checkout.php).
    DESIGN_TYPE Optional

    Value = 1. When DESIGN_TYPE=1 is used in buy-links the parameter changes the layout of the shopping cart template interface, positioning the payment methods selector in a more prominent position, above the billing details area.

    Value = 2. When DESIGN_TYPE=2 is used in buy-links customers are redirected to their PayPal account, where they log in and confirm the payment. After payment confirmation, they are redirected to the shopping cart to confirm the billing and delivery data and enter their VAT ID.

    We recommend using the DESIGN_TYPE parameter with value 2, as it embeds latest practices for a swift checkout experience.

    AUTO_PREFILL Optional

    Include AUTO_PREFILL=1 in buy-links for shopping carts.

     

    When the AUTO PREFILL feature is active and AUTO_PREFILL=1 used in buy-links, the ZIP code and country pair become the only required aspects of the billing address.

     

    Address, City and State details are calculated automatically by the 2Checkout system. The address can miss altogether.

     

    Note: Using the AUTO_PREFILL=1 parameter without the feature being enabled for your account will result in shoppers following the classic purchase flow, where all billing address data is mandatory. 

    SHORT_FORM Optional

    Case sensitive. Include SHORT_FORM=1 in buy-links for shopping carts. Use it to streamline the shopping cart by minimizing data entry and providing an optimized ordering experience for customers. Guidance is available here.

    UPSELL_DISPLAY_TYPE Optional

    Optional parameter used to define the type of up-selling page to include in the buy-links. The parameter is not required for the PHASH calculation.

    Available values:

    • 1 = interstitial page
    • 2 = pop-up page
    FRAUD_REVIEW Optional

    Use this parameter to receive the order's fraud evaluation in the Thank You page. Possible values:

    • 1  = to receive the order fraud score in the Thank You page
    • 0 = default value; it does not trigger the fraud score evaluation.

    When fraud status tracking is enabled, check the values returned in the FraudStatus variable from omnitureVars. Possible values:

    • APPROVED for orders with a low fraud risk that passed the fraud screening.
    • DENIED for orders with high score risk that were automatically rejected by the fraud engine.
    • UNDER REVIEW for orders with a high fraud risk that require manual review and approval before the charge can be collected.
    • PENDING for orders that are yet to enter the fraud screening.

    Secure 'buy-links'

    Use a HMAC_MD5/ HMAC_SHA signature to prevent links from being exploited. To calculate the HMAC_MD5/ HMAC_SHA signature, you need to build a string from the query parameters of the buy-link prefixed by the length of the sequence of parameters in tandem with the 2Checkout-generated SECRET KEY for your account (view secret key). 

    If you're using SHA2, the parameter syntax is PHASH=sha256.[hash_value]. For SHA3, the syntax is PHASH=sha3-265.[hash_value].

    PARAMETER

    DESCRIPTION

    PRODS Required. Product IDs for which the order will be processed, separated by comma (,), with no blanks. Example: PRODS=1234567, 1234568.
    QTY Required. The number or quantity for each corresponding for corresponding above object, separated by comma (,), with no blanks: Example: QTY=2,1

    OPTIONS123456

    Optional. List of pricing options codes separated by comma

    PRICES[Product ID][Currency]

    Required parameter to set the price for product default currency. For example, for a product with the 2Checkout product ID: 123456, the currency EUR, and the price 99.99, this parameter would look like: PRICES123456[EUR]=99.99. If not sent for other billing currencies, 2Checkout will convert based on the submitted default price.

    PLNKEXP

    Optional. UTC timestamp for link expiration.

    PLNKID

    Optional. Unique link identifier used to restrict access to the link only to the IP address of the first user that clicks it. 250 chars.

    PHASH

    Required HMAC_MD5/ HMAC_SHA signature in order to prevent the request from being exploited. Used when the price of products is specified statically using 'on the fly pricing' and for trials - buy-links will contain the PRICES URL parameter. If the PHASH parameter value is removed or tampered with, the system will return an "Invalid signature or link expired!" error message as long as the PRICES parameter is also used in the link. An "Invalid signature" error is always returned in scenarios in which PHASH is removed from trial links.
    BACK_REF

    Optional. Used only if SECURE_CART parameter is set to value ‘1’ and represents the URL value in clear/raw/not encoded that is to be hashed.

     

    Notes:

    1. The 2Checkout platform will perform this action by default for links generated in the Merchant Control Panel and will generate the PHASH value for you.
    2. Parameter BACK_REF should be used in clear (raw, not coded) in the PHASH calculation (ex: &BACK_REF=http://www.YourCustomRedirectURL.com/), but should be encoded when adding it to the URL (ex: &BACK_REF=http%3A%2F%2Fwww.YourCustomRedirectURL.com%2F).
    3. Parameter SECURE_CART should not be taken into consideration when calculating the PHASH.
       

    Example

    HTTPS GET request

    https://secure.2checkout.com/order/checkout.php?CART=1&PRODS=123456&QTY…

    STRING for HMAC_MD5/ HMAC_SHA calculation

    129PRODS=123456&QTY=1&OPTIONS123456=option1,option2&PRICES123456[EUR]=10&PRICES123456[USD]=11.5&PLNKEXP=1286532283&PLNKID=4A4681F0E5

    129 represents the length of the sequence of parameters.

    Secret key for this example

    _SECRET_KEY_

    Resulting HMAC_MD5 signature*

    26e471daffb47cccd9fb52e85c6abce1

    Resulting HMAC_SHA2 signature*

    bfd1096dd441a7907e45671a2bd9c4347700581198c2a61c09543bf97673d78d

    Resulting HMAC_SHA3 signature*
    ce0bb4dac94589a5f8ba778cd2ec0b3bcfaff7ff68935ddc9204ff152f3c140c

    Search methods pagination

    Overview

    Starting with 2Checkout API 5.0, search methods are including the option of pagination. Pagination has been developed for decreasing the request loading time, while allowing you to better handle the returning responses.

    How it works?

    Pagination works on all the search methods existing on 2Checkout API 5.0. The default pagination behavior is to display page 1 with 10 results. The maximum number of items displayed on a single page is 200.

    Parameters

    To use pagination, include the Pagination object inside the search method call, using the parameters below:

    Parameters Type/Description
    Pagination Object
      Details below.
      Page Int
        Set the number of pages that should be returned.
      Limit Int
        Set a limit for the number of results that should be returned.

    Response

    The response of search methods that are including pagination will contain a new object, with the following parameters:

    Parameters Type/Description
    Pagination Object
      Details below
      Page Int
        Set the number of pages that should be returned.
      Limit Int
        Set a limit for the number of results that should be returned.
      Count Int
        Number of total results returned

    Sample request

    The below PHP sample includes a search method for subscriptions.

    <?php
    
    require('PATH_TO_AUTH');
    
    $SubscriptionSearch = new stdClass();
    $SubscriptionSearch->CustomerEmail  = 'email@avangate.com';
    $SubscriptionSearch->DeliveredCode = null;
    $SubscriptionSearch->AvangateCustomerReference = null;
    $SubscriptionSearch->ExternalCustomerReference = null;
    $SubscriptionSearch->Aggregate = false;
    $SubscriptionSearch->SubscriptionEnabled = null; //true false null
    $SubscriptionSearch->RecurringEnabled = null; // true - autorenewal, false - manual renewal, null = both(default)
    $SubscriptionSearch->ProductCodes = null; //array('Product_Code1', 'Product_Code2');
    $SubscriptionSearch->CountryCodes = null;//array ('au')
    $SubscriptionSearch->PurchasedAfter = null;
    $SubscriptionSearch->PurchasedBefore = null;
    $SubscriptionSearch->ExpireAfter = null;
    $SubscriptionSearch->ExpireBefore = null;
    $SubscriptionSearch->LifetimeSubscription = null;
    $SubscriptionSearch->Type = 'regular'; //'trial', 'regular', 'regularfromtrial'
    $SubscriptionSearch->TestSubscription = null; // true, false, null = both(default)
    $SubscriptionSearch->Pagination = new stdClass();
    $SubscriptionSearch->Pagination->Page = 1; // set the number of pages for the response
    $SubscriptionSearch->Pagination->Limit = 200; // set the limit for the values from the response
    
    $jsonRpcRequest = array (
    'method' => 'searchSubscriptions',
    'params' => array($sessionID, $SubscriptionSearch),
    'id' => $i++,
    'jsonrpc' => '2.0');
    
    var_dump (callRPC((Object)$jsonRpcRequest, $host, true));
    
    
    

    Need help?

    Do you have a question? If you didn’t find the answer you are looking for in our documentation, you can contact our Support teams for more information. If you have a technical issue or question, please contact us. We are happy to help.

    Not yet a Verifone customer?

    We’ll help you choose the right payment solution for your business, wherever you want to sell, in-person or online. Our team of experts will happily discuss your needs.

    Verifone logo