Skip to main content

Create partner user

Overview

Use the createPartnerUser method via JSON-RPC API 6.0 to add a partner user. 

Required parameters

Parameter  Type Required/Optional Description
sessionID String Required Output of the Login method.
UUID String Required Partner unique identifier.

Request sample

<?php
declare(strict_types=1);
class Configuration
{
    public const MERCHANT_CODE = '';
    public const MERCHANT_KEY = '';
    public const URL = 'http://api.2checkout.com/rpc/6.0';
    public const ACTION = 'createPartnerUser';
    public const ADDITIONAL_OPTIONS = null;
    public const PARTNER_UUID = '95b6b8bd-20db-478a-9682-d165f5d85d46';
    //array or JSON
    public const PAYLOAD = <<<JSON
{  
    "Email": "test@test.com",
    "FirstName": "test", 
    "LastName": "test",  
    "Position": "test",  
    "PhoneNumber": "98765432123", 
    "MobilePhone": "8179186432",
    "Status": "ACTIVE" 
}
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;
        $hash = hash_hmac('md5', $string, $key);
        return compact('merchantCode', 'date', 'hash');
    }
    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, Configuration::PARTNER_UUID, $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);

Response

{
    "UUID": "95d59280-3b7d-4d5b-8b9f-7b66fe900045",
    "Email": test@test.com,
    "FirstName": "test2",
    "LastName": "test2",
    "Position": "test2",
    "PhoneNumber": "98765432123",
    "MobilePhone": null,
    "Status": "ACTIVE"
}

 

Delete partner user

Overview

Use the deletePartnerUser method via SOAP API 6.0 to delete a partner user. 

Required parameters

Parameter  Type Required/Optional Description
sessionID String Required Output of the Login method.
UUID String Required Partner unique identifier.
partnerUserUUID String Required Partner user unique identifier.

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 = 'updatePartnerUser';
    public const ADDITIONAL_OPTIONS = null;
    public const PARTNER_UUID = '95b6b8bd-20db-478a-9682-d165f5d85d46';
    public const PARTNER_USER_UUID = '95c329d6-b45d-44ea-856a-1af254d06ae9';

    //array or JSON
    public const PAYLOAD = <<<JSON
{}
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, Configuration::PARTNER_UUID, Configuration::PARTNER_USER_UUID, $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

Boolean True or false.

 

Update partner user

Overview

Use the updatePartnerUser method via SOAP API 6.0 to update a partner user. 

Required parameters

Parameter  Type Required/Optional Description
sessionID String Required Output of the Login method.
UUID String Required Partner unique identifier.
partnerUserUUID String Required Partner user unique identifier.

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 = 'updatePartnerUser';
    public const ADDITIONAL_OPTIONS = null;
    public const PARTNER_UUID = '95b6b8bd-20db-478a-9682-d165f5d85d46';
    public const PARTNER_USER_UUID = '95c329d6-b45d-44ea-856a-1af254d06ae9';

    //array or JSON
    public const PAYLOAD = <<<JSON
{  
    "Email": "test@test.com",
    "FirstName": "test", 
    "LastName": "test",  
    "Position": "test",  
    "PhoneNumber": "98765432123", 
    "MobilePhone": "8179186432",
    "Status": "ACTIVE" 
}
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, Configuration::PARTNER_UUID, Configuration::PARTNER_USER_UUID, $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

{
    "UUID": "95d59280-3b7d-4d5b-8b9f-7b66fe900045",
    "Email": test@test.com,
    "FirstName": "test2",
    "LastName": "test2",
    "Position": "test2",
    "PhoneNumber": "98765432123",
    "MobilePhone": null,
    "Status": "ACTIVE"
}

 

Create partner user

Overview

Use the createPartnerUser method via SOAP API 6.0 to add a partner user. 

Required parameters

Parameter  Type Required/Optional Description
sessionID String Required Output of the Login method.
UUID String Required Partner unique identifier.

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 = 'createPartnerUser';
    public const ADDITIONAL_OPTIONS = null;
    public const PARTNER_UUID = '95b6b8bd-20db-478a-9682-d165f5d85d46';
    //array or JSON
    public const PAYLOAD = <<<JSON
{  
    "Email": "test@test.com",
    "FirstName": "test", 
    "LastName": "test",  
    "Position": "test",  
    "PhoneNumber": "98765432123", 
    "MobilePhone": "8179186432",
    "Status": "ACTIVE" 
}
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, Configuration::PARTNER_UUID, $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

{
    "UUID": "95d59280-3b7d-4d5b-8b9f-7b66fe900045",
    "Email": test@test.com,
    "FirstName": "test2",
    "LastName": "test2",
    "Position": "test2",
    "PhoneNumber": "98765432123",
    "MobilePhone": null,
    "Status": "ACTIVE"
}

 

Payment flow with Apple Pay

Overview

The following payment method is specific to Apple devices.

Availability

Available for all 2Checkout merchants (2Sell, 2Subscribe, 2Monetize & 4Enterprise) using all or any of our ordering engines (hosted shopping cart, ConvertPlus, and InLine).

For more information on availability, see the main documentation page for Apple Pay here.

Requirements

Shoppers can use any device that supports Apple Pay and is located in one of the selected list of countries.

For more information on requirements, see the main documentation page for Apple Pay here.

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.

Setting up Apple Pay

To set up Apple Pay, you need to build the frontend component and to initialize the session using the startApplePaySession method providing the “validationUrl” to the payload. Once the token is received from the frontend component, it has to be sent to the decryptApplePayData endpoint in the 2Checkout API. This will return a data response from Apple Pay that needs to be used in the placeOrder call.

Frontend component

In order to set up an Apple Pay session in the shopper’s browser, the following steps are needed:

  1. Include the Apple Pay library.

    <script src=https://applepay.cdn-apple.com/jsapi/v1/apple-pay-sdk.js></script>
  2. Add the Apple Pay button.

    <div class="apple-pay-button apple-pay-button-black" onclick="onApplePayButtonClicked()"></div>
    <style>
        .apple-pay-button {
            display: inline-block;
            -webkit-appearance: -apple-pay-button;
            -apple-pay-button-type: buy; /* Use any supported button type. */
        }
        .apple-pay-button-black {
            -apple-pay-button-style: black;
        }
        .apple-pay-button-white {
            -apple-pay-button-style: white;
        }
        .apple-pay-button-white-with-line {
            -apple-pay-button-style: white-outline;
        }
    </style>
    
  3. Set up the Apple Pay function and create a session instance.

    function onApplePayButtonClicked() { 
        // Ensure browser supports Apple Pay
        if (!ApplePaySession) {
            return;
        }
    
        // Define ApplePayPaymentRequest
       /* Define the country code and currency being sent to the library, as well as 
       the list of supported networks and the descriptor and amount of the transaction.*/
        const request = {
            "countryCode": "US",
            "currencyCode": "USD",
            "merchantCapabilities": [
                "supports3DS"
            ],
            "supportedNetworks": [
                "visa",
                "masterCard",
                "amex",
                "discover"
            ],
            "total": {
                "label": "Example Transaction",
                "type": "final",
                "amount": "0.01"
            }
        };
    
        // Create ApplePaySession
        const session = new ApplePaySession(3, request);
    
        session.onvalidatemerchant = async event => {
            // Call your own server to request a new merchant session (call 2checkout API /rest/6.0/payments/startapplepaysession)
            fetch("/startApplePay.php")
                .then(res => res.json()) // Parse response as JSON.
                .then(merchantSession => {
                    response = JSON.parse(merchantSession.ApplePaySessionData.response);
                    session.completeMerchantValidation(response);
                })
                .catch(err => {
                  console.error("Error fetching merchant session", err);
                });
        };
    
        session.onpaymentmethodselected = event => {
            // Define ApplePayPaymentMethodUpdate based on the selected payment method.
            // No updates or errors are needed, pass an empty object.
            const update = {
                newTotal: {
                    label: "Demo (Card is not charged)",
                    type: "final",
                    amount: "0.01"
                }
            }
            session.completePaymentMethodSelection(update);
        };
    
        session.onshippingmethodselected = event => {
            // Define ApplePayShippingMethodUpdate based on the selected shipping method.
            // No updates or errors are needed, pass an empty object. 
            const update = {
                newTotal: {
                    label: "Demo (Card is not charged)",
                    type: "final",
                    amount: "0.01"
                }
            }
            session.completeShippingMethodSelection(update);
        };
    
        session.onshippingcontactselected = event => {
            // Define ApplePayShippingContactUpdate based on the selected shipping contact.
            const update = {
                newTotal: {
                    label: "Demo (Card is not charged)",
                    type: "final",
                    amount: "0.01"
                }
            }
            session.completeShippingContactSelection(update);
        };
    
        session.onpaymentauthorized = event => {
            // Call your own server to request the Apply Pay token decryption and pass the decoded token to the place order call (call 2checkout APIs /rest/6.0/payments/decryptapplepaydata and /rest/6.0/orders/)
            // Define ApplePayPaymentAuthorizationResult based on the place order response
            payload = {
                token: event.payment.token,
            };
            fetch("/finishApplePay.php", {
                method: "POST",
                headers: {"Content-Type": "application/json"},
                body: JSON.stringify(payload),
            }).then((res) => res.json())
                .then((res) => {
                    if (res.Status.includes('AUTHRECEIVED', 'COMPLETE')) {
                      session.completePayment(session.STATUS_SUCCESS);
                    }
                    console.log("INFO - RECEIVED ECOM RESPONSE: ", res.Status);
                    })
                    .catch((err) => console.log(err));
        };
    
        session.oncancel = event => {
            // Payment cancelled by WebKit
        };
        session.begin();
    }
    

Backend component

  1. Initiate an Apple Pay session.

    Create an endpoint on your server to call to initiate an Apple Pay session. In order for a valid Apple Pay session to be created, an API call to the 2Checkout API needs to be sent, with the validationURL set to the ApplePay payment service.

    Protocol

    Endpoint

    REST POST https://api.2checkout.com/rest/6.0/payments/startapplepaysession
    JSON-RPC startApplePaySession
    SOAP startApplePaySession

    startApplePaySession payload

    {
       "validationURL":"https://apple-pay-gateway.apple.com/paymentservices/startSession"
    }
  2. Decrypt the Apple Pay token.

    Once the token is received from the frontend component, it has to be sent to the decryptApplePayData endpoint in the 2Checkout API. This will return a data response from Apple Pay that needs to be used in the placeOrder call.

    Protocol

    Endpoint

    REST POST api.2checkout.com/rest/6.0/payments/decryptapplepaydata
    JSON-RPC decryptApplePayData
    SOAP decryptApplePayData

    decryptApplePayData payload

    BODY: (ApplePayData property value should be the event.payment.token from the onpaymentauthorized event)

    {
       "ApplePayData":"543a07601ed9f8b8ee226e9630a24e2a91da8fdb08e6786fa02bf628f395bb91"
    }
  3. Place the order.

    Once the Apple Pay data is received from 2Checkout, this needs to be used in the Payment Method object of the Payment Details object in the API call to place an order.

    Protocol

    Endpoint

    REST POST https://api.2checkout.com/rest/6.0/orders
    JSON-RPC placeOrder
    SOAP placeOrder
    {
       "Items":[
          {
             "Code":"5DCB30C6B0",
             "Quantity":1
          }
       ],
       "BillingDetails":{
          "Email":"example@email.com",
          "FirstName":"Customer First Name",
          "LastName":"Customer Last Name",
          "CountryCode":"US",
          "State":"California",
          "City":"San Francisco",
          "Address1":"Example Street",
          "Zip":"90210"
       },
       "PaymentDetails":{
          "Type":"APPLE_PAY",
          "Currency":"USD",
          "CustomerIP":"10.10.10.10",
          "PaymentMethod":{
             "ApplePayToken":"ApplePayDataToken"
          }
       },
       "Language":"en",
       "Country":"US",
       "CustomerIP":"10.10.10.10",
       "Source":"Website",
       "ExternalCustomerReference":"externalCustomerId",
       "Currency":"USD",
       "MachineId":"123456789"
    }

Compliance trial email

Overview

2Checkout automatically sends out the Compliance trial email to shoppers with confirmation and details on their trial – information regarding trial period duration, trial expiration, following billing date, following billing amount, and a link to myAccount for the shopper to be able to cancel the following automatic charge.

Availability

All 2Checkout accounts.

Workflow

2Checkout sends the Compliance trial email if you offer free or promotional trial subscriptions, to prevent charge disputes and ensure compliance with the card networks’ requirements. Additional details can be found in the official published requirements.

Compliance trial email content

When a customer enrolls for a free or promotional period trial, the following information must be included in the email:

  • Trial period duration
  • Trial expiration
  • Following billing date
  • Following billing amount
  • A link to myAccount for the shopper to be able to cancel the following automatic charge

Sample compliance trial email notification

visa compliance trial email

Is this the only email my shoppers receive after placing an order?

2Checkout can send the electronic delivery email either standalone or combined with the payment receipt notification (in one single email).

Depending on your account's setup, for each order containing at least one product configured with 2Checkout delivery your shoppers can receive:

  • Default: One email containing both the payment receipt and the electronic delivery messages
  • Two email notifications: The payment receipt and the electronic delivery messages, separately
  • Three email notifications: An order confirmation email, plus the payment receipt and the electronic delivery messages, separately

Contact 2Checkout to change your default configuration if you find another setup better suited for your customers.

Preview and test email

To preview and test the subscription email notification template, follow these steps:

  1. Log in to your 2Checkout Merchant Control Panel.
  2. Navigate to Marketing tools -> Email editor
  3. Scroll down to the Shopper emails section and click on Order
  4. Access the Compliance trial email under the Order section. You can access this email only if your account uses the default shopper emails communication setup that blends together the electronic delivery and the payment emails.

Compliance subscription email

Overview

2Checkout automatically sends out the Compliance subscription email to shoppers with confirmation and details on their subscription – information regarding billing cycle duration, next billing amount, next billing date, and a link to myAccount for the shopper to be able to cancel the following automatic charge.

Availability

All 2Checkout accounts.

Workflow

2Checkout sends the Compliance subscription email if the shopper has a recurring subscription-based product, to prevent charge disputes and ensure compliance with the card networks’ requirements. Additional details can be found in the official published requirements.

Subscription Email Notification Content

When a shopper enrolls for a recurring subscription-based product, the following information must be included in the email notification:

  • Billing cycle duration
  • Next billing amount
  • Next billing date
  • A link to myAccount for the shopper to be able to cancel the following automatic charge

Sample subscription email notification

subscription email notification

Is this the only email my shoppers receive after placing an order?

2Checkout can send the electronic delivery email either standalone or combined with the payment receipt notification (in one single email).

Depending on your account's setup, for each order containing at least one product configured with 2Checkout delivery your shoppers can receive:

  • Default: One email containing both the payment receipt and the electronic delivery messages
  • Two email notifications: The payment receipt and the electronic delivery messages, separately
  • Three email notifications: An order confirmation email, plus the payment receipt and the electronic delivery messages, separately

Contact 2Checkout to change your default configuration if you find another setup better suited for your customers.

Preview and test email

To preview and test the subscription email notification template, follow these steps:

  1. Log in to your 2Checkout Merchant Control Panel.
  2. Navigate to Marketing tools -> Email editor
  3. Scroll down to the Shopper emails section and click on Order
  4. Access the Compliance subscription email under the Order section. You can access this email only if your account uses the default shopper emails communication setup that blends together the electronic delivery and the payment emails.

PayPal Service Provider for 2Checkout

Overview

PayPal Service Provider is a new self-service PayPal solution offered to merchants signed on our PSP model, allowing for multiple payment options to be available under the same high-conversion shopping carts.

Availability

Merchants eligible for the PayPal Service Provider need to meet the following criteria:

  • Business Model: Payment Service Provider (PSP)
  • Merchant country:  Austria, Belgium, Bulgaria, Croatia, Republic of Cyprus, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, and Sweden.

Prerequisites

Merchants need to have or create a valid PayPal business account.

If you don't have a PayPal account, follow this Sign up. If you already have an account, simply Log in

Workflow

To be able to accept payments via PayPal in your 2Checkout account, you first need to generate the API credentials from your verified PayPal account dashboard. In order to do this, perform the following steps.

PayPal Settings

  1. Log in to your PayPal account.
  2. Navigate to Account Settings > Account access
  3. On the Account access page, click on Update next to API access.

PayPal Service Provider for 2Checkout 9

4. On the next page, scroll down to NVP/SOAP API integration and click on Manage API credentials. 

PayPal Service Provider for 2Checkout 4

5. PayPal will then generate API Credentials that you can use in your 2Checkout account.

 

To complete setting up PayPal in your 2Checkout account, you will need to collect and use the following credential information: 

  • API Username 
  • API Password 
  • Signature 

PayPal Service Provider for 2Checkout 5

2Checkout Settings

1. Once you have identified your PayPal credentials, log in to your 2Checkout Merchant Control Panel account.

2. Navigate to Setup > Ordering options and click on the Payment methods tab.

PayPal Service Provider for 2Checkout 6

3. On the Payment methods page, click on the Settings cogwheel next to the PayPal payment option.

PayPal Service Provider for 2Checkout 1

4. On the PayPal payment settings page paste the credentials you copied previously from the PayPal admin.

  • API Password
  • API Signature
  • API Username

PayPal Service Provider for 2Checkout 8

5. Click Save. You can now accept payments via PayPal in your 2Checkout account. 

Reference Transactions

 
If you are selling subscription-based products or services or you are looking to improve the shopping experience for returning customers using 2Checkout, make sure that reference transactions are enabled for your PayPal business account.
 
Payments through reference (the reference of the billing agreement) are not available by default in PayPal business accounts. To activate this feature, you need to contact PayPal and request the enablement of reference transactions.
 
   Please note that it is up to PayPal to validate if certain requirements are met or not, before it enables support for reference transactions for your account.
 

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