Skip to main content

Croatia’s Currency Transition to Euro

Overview

As of January 1st, 2023, Croatia will begin the process of switching from its present currency, the Kuna (HRK) to the Euro (EUR) as the national currency. Prices for products will be displayed in both Kuna and Euro until December 31st, 2023.

Both Euro and Kuna banknotes will be used for a period of two weeks after the Euro has been formally introduced as the national currency.  

To enable shoppers to transition to the Euro and to comply with Croatian regulations, the following will be implemented across various areas: 

  • Dual prices will be displayed in both Euro and Kuna (shopper invoices, shopping carts, etc.) 

  • The exchange rate at which the conversion is made will be displayed in various areas (invoices, transactions, carts, etc.)

Benefits

  • Merchants stay compliant with Croatian regulations​ and suffer not penalty risks
  • Shoppers benefit from transparent transactions and an easy understandable Euro transition

Refund requests, chargebacks, and card schemes

Refund requests and chargebacks in HRK can be processed until December 31st, 2022. Any authorization submitted after that date in Kuna will be rejected.  

Subsequent transactions, including chargebacks and refunds, can be submitted up until the cut-off date for each card scheme:  

Visa Effective Date:

  •  Effective 23:00 GMT 31 December 2022 CPD 1 January 2023, acquirers with merchants in Croatia must modify their systems to process transactions using the ISO currency code for the euro (EUR/978).
  •  Effective 23:00 GMT 31 December 2022, authorization requests with the current alphanumeric currency code of the Croatian Kuna (HRK/191) will no longer be accepted for original transactions.

MasterCard Effective Date:

  • Beginning 1 January 2023, you must submit any authorization request in euro EUR/978 currency for any transactions completed in Croatia. Effective 15 January 2023, Mastercard will start declining all authorization requests that contain currency HRK/191.
  • Mastercard will accept First Presentment message transactions that are submitted in the Croatian Kuna before 00:00 local Croatian time on 1 January 2023 for a period of 120 days (1 May 2023). After 00:00 local Croatian time on 1 January 2023, merchants should not conduct any new transactions in the Croatian Kuna.

Other schemes: Check with your card provider on the planned cut-off dates.

   PSPs that process Croatia Kuna currency must change their Croatian Kuna currency to Croatia EURO in their 80byte/submission file.

Shopper invoices  

To comply with Croatian legislation, all shopper invoices will display dual prices (EUR/HRK). This will be applied to all prices displayed on the invoice, including the discount area.  

Dual Pricing HKR EUR

The exchange rate of 1 EUR = 7.5345 HRK will be displayed at the end of each shopper's invoice. 

The dual price display will be applied if: 

  • The billing country is Croatia

  • The billing currency is Euro

  • The order is from Croatia

The dual display feature will be active until December 31st, 2023. 

Ordering engines 

To enable the customer to transition to the Euro throughout 2023, the Convert Plus, Inline Checkout, and Legacy carts will display dual prices (EUR/HRK) whenever the shopper’s billing country is set to Croatia. Also, an informative text stating that “The fixed official exchange rate is set at 7.53450 HRK per 1 EUR" will appear across all shopping cart pages.

Convert Plus Cart

When landing on Convert Plus with Croatia as the billing country and EUR as the billing currency, a dual display of all prices into both EUR/HRK will be displayed to shoppers throughout the entire checkout flow, as well as the following text translated in all cart languages: "The fixed official exchange rate is set at 7.53450 HRK per 1 EUR." 

Convert Plus Euro Transition

One Step In-Line Cart

When landing on One-Step Inline with Croatia as the billing country and EUR as the billing currency, a dual display of all prices into both EUR/HRK will be displayed to shoppers, as well as the following text translated in all cart languages: "The fixed official exchange rate is set at 7.53450 HRK per 1 EUR." 

One Step In-Line Euro Transition

Legacy Cart

When landing on the Legacy cart, shoppers will no longer have the possibility to choose HRK from the Billing currency drop-down list. They will also be prompted with a dual display of all prices into both EUR/HRK.​

Legacy Cart

Subscriptions

Auto-renewal subscriptions

Subscriptions pending for automatically renewal with HRK​ will automatically be renewed with EUR with no conversion rate applied. The renewal price used is the price in EUR set at product level​.

   There is an exception for custom prices, where the fixed exchange rate established by the authorities will be applied: 1EUR=7.53450 HRK​.

Manual renewal subscriptions

Shoppers accessing the manual renewal link will land on a checkout page with billing currency EUR and dual display currency EUR/HRK (if the billing country is Croatia). There will be no option to select HRK as the billing currency. The billing price will be the price in EUR, set at product level​. If there is no set price in EUR, the fixed conversation rate will be applied to the price in HRK to calculate the billing price in EUR.

Subscription cancellation via myAccount

Overview

German shoppers can now cancel their subscriptions by themselves from their 2Checkout MyAccount.

This functionality is mandatory for all subscription-based businesses which are selling in Germany, starting with 2022.

Benefits

 By using subscription cancellation via myAccount, shoppers can:

  • cancel their subscription at any time
  • use cancellation option if they are purchasing multiple subscriptions with different billing addresses

 By using subscription cancellation via myAccount, merchants can:

  • be informed through webhooks about all the actions their customers are doing in MyAccount related to subscription cancellation
  • be warned through notifications that a churn will follow so they'll have the chance to fight it while there is still time for the subscription to be recovered from being disabled

Availability

The feature is applicable only to shoppers from Germany, who are identified via the billing address from MyAccount, which needs to be in Germany. 

All shoppers with a German IP can enter the 2Checkout Shopper Support Center website (www.2co.com), where there is a "Subscription cancellation" button that directs them to MyAccount. If shoppers purchased a subscription license created in the 2Checkout platform, they can enter MyAccount either with their email address or with their order number.

2co.com

If your shoppers are purchasing multiple subscriptions using different billing addresses, this cancellation option is available exclusively to the ones in Germany. 

If your shoppers are updating the billing addresses during subscriptions’ lifecycle, the cancellation flow will be enabled/disabled based on the updated billing address from the last order associated with the subscription. This means that the cancellation flow could be available at the beginning of the subscription life and disabled later on, if the billing address is changed from a German one to a non-German one. This logic applies also the other way around, starting with not having it available and being activated later on. 

Restrictions

2Checkout has introduced several restrictions on the subscriptions which are scheduled for cancellation.  

These are applicable exclusively during the time interval between the shopper confirming the subscription cancellation and the actual date of cancellation, which is up to 28 calendars days. 

The reason behind having these in place is to make sure we are able to offer the option for the shoppers to cancel their subscriptions in the manner described by the regulator. 

Please see below the restricted actions: 

  • Renewal of the subscription (both manual and automatic renewal) 

  • Upgrade the subscription to any other version 

  • Extend the subscription 

  • Pause the subscription 

  • Update the subscription through import 

  • Align the subscription with any other one 

These restrictions are applicable also for API.

Subscription cancellation flow

  1. Customers log in to MyAccount https://secure.avangate.com/myaccount.

  2. Select the My Products tab https://secure.2checkout.com/myaccount/my_products/ 

  3. Click on the Cancel Subscription button visible for each subscription eligible to be cancelled as per the above applicability criteria.

Cancel subscription

  4.  A pop-up window will open informing the shopper about the action he/she is going to take and it will display the actual date of the cancellation. There is the option to continue with the cancellation by closing the pop-up in confirmation mode or abort the cancellation by closing the pop-up, keeping the subscription. The actual date of cancellation is calculated as follows: 

  • If the expiration date of the subscription is closer in time than 28 calendars days starting from the day of requesting the cancellation, then the subscription is going to be cancelled at the expiration date.

  • If the expiration date of the subscription is farther in time than 28 calendars days starting from the day of requesting the cancellation, then the subscription is going to be cancelled in 28 calendars day.

  • If at the day of requesting the cancellation, the subscription is expired or past due, it is going to be cancelled immediately and the shopper is informed about this effect happening as soon as the pop-up is closed in confirmation mode.

Cancel subscription

 5.  Once the pop-up is closed in confirmation mode, there is an additional line added in the subscription details from MyAccount called Scheduled for cancellation starting with <actual_date_of_cancellation>; the same information is visible in the Subscription details from Control Panel.

 6.  At this stage, there is another option made available for your customers, the one to revert the scheduled cancellation, so the customers still have time to change their mind; this option is available only until the subscription gets disabled as per the above calculated timeline.

 7.  A similar button is displayed and, once the revert action is confirmed, the subscription will be immediately reverted back to the setup existing before scheduling the cancellation; there is one exception when this flow is not available, for the scenario where the subscription is cancelled immediately, when no other actions are permitted on the subscription.

Subscription cancellation via webhooks

2Checkout wants to keep you informed about all the actions your customers are doing in MyAccount related to the subscription cancellation. 

In this regard, you will receive relevant License change notifications when: 

  1. Your customer is confirming that he/she wants to cancel the subscription and the subscription is scheduled for cancellation 

    • This notification is warning you that a churn will follow so you have the chance to fight it while there is still time for the subscription to be recovered from being disabled.
    • You will receive also the actual date of cancellation so you will know exactly when the churn will happen.

    • The churn reason will be displayed if your customer selected one during the cancellation confirmation.

  2. Your customer decided to change his/her mind so a revert of the cancellation has been done.

  3. The subscription has been disabled as a result of the above flow.

Refunds 

It is very important mention that the Consumer Protection Authority from Germany is mandating that your customer is entitled to receive the partial refund corresponding to the unused part of the subscription which has been cancelled. 

If your customer is asking for the refund, you will need to make sure the refund is granted without asking the customer additional questions or asking him/her to perform any other steps. 

FAQ

  1. Why are subscriptions cancelled at maximum 28 days from the moment the customer is confirming the intention to cancel them?

The reason behind this is the German regulation which is stating that there is a notice-period of up to 1 month before the cancellation requested takes effect. 

  2.  Why are there scenarios when the subscription is cancelled at the expiration date? 

These scenarios are applicable only when the expiration date is placed between those 28 days and it doesn’t make sense to renew a subscription just for a few days/weeks knowing that the customer wants to cancel it.  

  3.  Can the subscription remain active and the customer use it if it has been scheduled for cancellation?

Yes, the subscription stays active throughout the entire period up to 28 days.

  4.  Given that it is mandatory to grant the refund to the customers, is there any particular way for requesting the refund? 

No, the refund should be requested by the shopper in the same manner as per the other refund request.

KakaoPay

Overview

KakaoPay is one of the most popular mobile payment and digital wallet service in Korea that allows users make mobile payments and online transactions. Users sign up for KakaoPay by registering with their national ID or bank account number. After they register, they can start funding their KakaoPay account by transferring funds from their bank account.​

The service supports contactless payments using near-field communications and QR codes.

Benefits

  • New payment logo​
  • Reach customers in Korea​
  • Increase Conversion Rate for our carts​

Availability

For Merchant of Record (MoR) business model accounts, KakaoPay is available for shoppers from South Korea.

KakaoPay is currently available for manual ordering (new acquisition, manual renewal, upgrade) only.

Supported currencies

Kakao Pay supports USD and KRW transactions.

Activation steps

Steps to activate KakaoPay in Control Panel:

  1. Navigate to Dashboard
  2. Go to Setup
  3. Click on Ordering options
  4. Click on Payment methods
  5. Enable KakaoPay from the list

Purchase flow

  1. Shoppers select South Korea in the shopping cart.
  2. They place the order.
  3. 2Checkout redirects shoppers to KakaoPay.
  4. KakaoPay displays the QR code that shoppers need to scan.
  5. Shoppers use their KakaoPay application to scan the QR code.
  6. 2Checkout marks the order as Pending until shoppers place the order.
  7. Shoppers place the order and the KakaoPay application confirms the payment.
  8. 2Checkout marks the order as complete as soon as KakaoPay sends back an Instant Payment Notification.
  9. Shoppers receive the Payment receipt and Electronic delivery emails from 2Checkout.
 
You can configure unfinished payment follow-up emails from the Control Panel.

KakaoPay

KakaoPay

Request proforma refund

Overview

Use the requestProformaRefund method to initiate a refund for a paid partner proforma.

Parameters

Parameter Type/Description
Uuid Required (String)
  Partner unique identifier.
proformaNumber Required (String)
  The unique identifier of a partner proforma in the 2Checkout system.
comment Optional (String)
  Refund reason/additional comments. Can be NULL.

Response

Parameter Type/Description
result Boolean
  True or false

Request

<?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 = 'requestProformaRefund';
    public const ADDITIONAL_OPTIONS = null;
    //array or JSON
    public const PAYLOAD = <<<JSON
{
            "Uuid": "96f2a739-ca6f-46bd-af03-f42e5048f653",
            "ProformaNumber": "6", 
            "Comment": "Comment"
}
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;
        $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);
}

Errors

Error Description

INVALID_PARTNER

No partner is set.

INVALID_PROFORMA_NUMBER

Your partner invoice number is not valid.

DUPLICATE_REFUND_REQUEST

A refund request was already placed for this partner invoice.

INVALID_PROFORMA

The partner invoice needs to be paid in order to send a refund request.

Request proforma refund

Overview

Use the requestProformaRefund method to initiate a refund for a paid partner proforma.

Parameters

Parameter Type/Description
Uuid Required (String)
  Partner unique identifier.
proformaNumber Required (String)
  The unique identifier of a partner proforma in the 2Checkout system.
comment Optional (String)
  Refund reason/additional comments. Can be NULL.

Response

Parameter Type/Description
result Boolean
  True or false

Request

<?php
declare(strict_types=1);
class Configuration
{
    public const MERCHANT_CODE = 'BogdanB';
    public const MERCHANT_KEY = 'SECRET_KEY';
    public const URL = 'http://api.2checkout.com/rpc/6.0';
    public const ACTION = 'requestProformaRefund';
    public const ADDITIONAL_OPTIONS = null;
    //array or JSON
    public const PAYLOAD = <<<JSON
{
            "Uuid": "96f2a739-ca6f-46bd-af03-f42e5048f653",
            "ProformaNumber": "6", 
            "Comment": "Comment"
}
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::ADDITIONAL_OPTIONS, $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);

Errors

Error Description

INVALID_PARTNER

No partner is set.

INVALID_PROFORMA_NUMBER

Your partner invoice number is not valid.

DUPLICATE_REFUND_REQUEST

A refund request was already placed for this partner invoice.

INVALID_PROFORMA

The partner invoice needs to be paid in order to send a refund request.

Retrieve payment methods and currencies

 Overview

Use the getVendorPaymentMethodCurrencies JSON-RPC API 6.0 call to get the list of available payment methods with currencies and countries. PaymentMethod and CountryCode can be used to filter the result and will list all the countries where the payment method is available.

Request parameters

Parameter name Type Required/Optional Description
CountryCode String Optional Country code.
PaymentMethod String Optional Payment method.
sessionID String Required Output of the Login method.

Request example

<?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 = 'getVendorPaymentMethodCurrencies';
    public const ADDITIONAL_OPTIONS = null;

    //array or JSON
    public const PAYLOAD = <<<JSON
     ["WIRE", "FR"]
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)) {
            if (is_array($payload)) {
                $payload = array_merge([$this->sessionId], $payload);
            } else {
                $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);

Response example

[
    {
        "Currencies": [
            "EUR",
            "GBP",
            "RON",
            "USD"
        ],
        "Countries": [
            "RO",
            "RU",
            "RW",
            "LC",
            "WS",
            "SM",
            "ST",
            "SA",
        ],
        "BusinessCompany": "AVANGATE_BV",
        "HasRenewal": false,
        "PaymentType": "wire",
        "PaymentMethod": "WIRE",
        "AutofillSettings": null
    }
]

 

Retrieve payment methods and currencies

Overview

Use the getVendorPaymentMethodCurrencies SOAP API 6.0 call to get the list of available payment methods with currencies and countries. The result can be filtered by PaymentMethod and CountryCode.

Request parameters

Parameter name Type Required/Optional Description
CountryCode String Optional Country code.
PaymentMethod String Optional Payment method.
sessionID String Required Output of the Login method.

Request example

<?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 = 'getVendorPaymentMethodCurrencies';
    public const ADDITIONAL_OPTIONS = null;
    //array or JSON
    public const PAYLOAD = <<<JSON
     ["WIRE", "FR"]
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]);
        $args = array_merge([$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 example

[
    {
        "Currencies": [
            "EUR",
            "GBP",
            "RON",
            "USD"
        ],
        "Countries": [
            "RO",
            "RU",
            "RW",
            "LC",
            "WS",
            "SM",
            "ST",
            "SA",
        ],
        "BusinessCompany": "AVANGATE_BV",
        "HasRenewal": false,
        "PaymentType": "wire",
        "PaymentMethod": "WIRE",
        "AutofillSettings": null
    }
]

 

Use Boleto/Pix

Overview

Boleto/Pix is a payment method tailored for international e-merchants that facilitates money transfers from Brazilian customers designed to make it easy for them to receive money from Brazilian customers. The Boleto/Pix credit transfer service enables customers in Brazil to make online purchases via 2Checkout and pay offline at any Brazilian post office, bank branch, or through Internet banking. Boleto/Pix currently has a market share of approximately 25% in Brazil.

Availability

The feature is available only to users in Brazil with a Brazilian billing address.

Mandatory billing information must also include:

  • State
  • Phone number
  • Fiscal code (CPF/CNPJ)

Supported currencies

Boleto/Pix supports BRL transactions.

Workflow

  1. Shoppers select BOLETO as a payment option in the checkout interface you provide to them.
  2. Call the PlaceOrder method with “BOLETO” as the type of the PaymentDetails object.
  3. After the Order Object is generated, in the PaymentDetails->PaymentMethod, you will find the URL where the shoppers need to be redirected to so they can finish the payment. Example: “https://pagbrasil.com/b?a41aewmfjb
  4. The shopper selects the preferred Bank for payment and generates the payment slip (Boleto).
  5. The shopper prints the Boleto which contains a bar-coded invoice and takes it to one of the convenient Boleto/Pix locations.
  6. Once the shopper finishes the payment process on the Boleto side, the order will be updated in the 2Checkout system as well.

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

require ('PATH_TO_AUTH');

$Order = new stdClass();
$Order->RefNo = NULL;
$Order->Currency = 'BRL';
$Order->Country = 'BR';
$Order->State = 'Acre';
$Order->Language = 'EN';
$Order->CustomerIP = '10.5.22.197';
$Order->ExternalReference = NULL;
$Order->Source = NULL;
$Order->CustomerReference = NULL;

$Order->Items = array();
$Order->Items[0] = new stdClass();
$Order->Items[0]->Code = 'ProductCode';     // add product code here
$Order->Items[0]->Quantity = 1;
$Order->Items[0]->PriceOptions = NULL;
$Order->Items[0]->SKU = NULL;
$Order->Items[0]->Price = NULL;
$Order->Items[0]->CrossSell = NULL;
$Order->Items[0]->Trial = false;
$Order->Items[0]->AdditionalFields = NULL;
$Order->Items[0]->SubscriptionStartDate = NULL; //If empty or null, subscriptions become active when purchase is made.

$Order->BillingDetails = new stdClass();
$Order->BillingDetails->FirstName = 'John';
$Order->BillingDetails->LastName = 'Doe';
$Order->BillingDetails->CountryCode = 'BR';
$Order->BillingDetails->State = 'Acre';  //Required
$Order->BillingDetails->City = 'Acre';
$Order->BillingDetails->Address1 = 'Address example';
$Order->BillingDetails->Address2 = NULL;
$Order->BillingDetails->Zip = '70403-900';    //Required
$Order->BillingDetails->Email = 'testemail1@address.com';
$Order->BillingDetails->Phone = '556133127400';   //Required
$Order->BillingDetails->Company = NULL;
$Order->BillingDetails->FiscalCode ='056.027.963-98';  //Required
$Order->DeliveryDetails = NULL;

$Order->PaymentDetails = new stdClass ();
$Order->PaymentDetails->Type = 'BOLETO';
$Order->PaymentDetails->Currency = 'BRL';
$Order->PaymentDetails->PaymentMethod = new stdClass ();

try {
   $newOrder = $client->placeOrder($sessionID, $Order);
}
catch (SoapFault $e) {
    echo "newOrder: " . $e->getMessage();
    exit;
}
var_dump("newOrder", $newOrder)

Response Parameters

Parameters

Type/Description

Order information

Object

UnionPay

Overview

UnionPay is a a Chinese financial services company headquartered in Shanghai, China. 

Founded on 26 March 2002, UnionPay is a payment method available worldwide, but very popular in APAC countries. It supports recurring payments.

In 2015, UnionPay overtook Visa and Mastercard in a total amount of value of payment transactions becoming the largest card payment processing company in the world surpassing the two. Only 0.5% of this payment volume was outside of China.

In 2020, UnionPay reported more than 151 billion worldwide transactions on its network. 

While most users are from China, UnionPay cards can be used in 180 countries and regions around the world. Some UnionPay credit cards are also affiliated with American Express, MasterCard, or Visa.

Availability

This payment method is available in China, Macau, Hong Kong, and Singapore.

Supported currencies

CNY, USD, EUR, GBP, AUD, CAD, CHF, JPY, PLN, SEK, RUB, BRL, ZAR.

Workflow

When placing the order, shoppers input a UnionPay card as normal. The accepted processing currency needs to be CNY, USD, EUR, GBP, AUD, CAD, CHF, JPY, PLN, SEK, RUB, BRL, ZAR. 

  1. When placing the order, shoppers input a UnionPay card as normal.
  2. The accepted processing currency needs to be CNY, USD, EUR, GBP, AUD, CAD, CHF, JPY, PLN, SEK, RUB, BRL, ZAR.
  3. The payment then continues as a normal Card order.

UnionPay Shopping Cart

Retrying the payment for an order

Overview 

Customers can retry making a payment if the initial payment fails, without placing a new order. The customer can use other payment details or a different payment method.  

Availability 

Available for all orders placed via API and on all packages. 

Request example 

To retry a payment for an already placed order, provide the order reference number in the Place Order API call in the RefNo parameter placed in the root of the request object. 

{ 
   "Language":"en", 
   "Country":"US", 
   "CustomerIP":"10.10.10.10", 
   "RefNo":"123456622", 
   "Source":"Website", 
   "ExternalCustomerReference":"externalCustomerId", 
   "Currency":"USD", 
   "MachineId":"123456789", 
   "Items":[ 
      { 
         "Code":"5DCB30C6B0", 
         "Quantity":1 
      } 
   ], 

   "BillingDetails":{ 
      "FirstName":"Customer First Name", 
      "LastName":"Customer Last Name", 
      "CountryCode":"US", 
      "State":"California", 
      "City":"San Francisco", 
      "Address1":"Example Street", 
      "Zip":"90210", 
      "Email":"example@email.com" 
   }, 
   "PaymentDetails":{ 
      "Type":"TEST", 
      "Currency":"USD", 
      "PaymentMethod":{ 
         "CardNumber":"4111111111111111", 
         "CardType":"VISA", 
         "ExpirationYear":"2023", 
         "ExpirationMonth":"12", 
         "HolderName":"John Doe", 
         "CCID":"123", 
         "Vendor3DSReturnURL":"http:\/\/yoursuccessurl.com", 
         "Vendor3DSCancelURL":"http:\/\/yourcancelurl.com" 
      }, 
      "CustomerIP":"10.10.10.10" 
   } 
} 

 

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