Skip to main content

Local processing and card support in Turkey

Turkey is experiencing rapid e-commerce growth, thanks to a series of various improvements across different fields. However, online orders in Turkey are still very focused on the domestic market, with only one in five customers considering international shopping.

In the European scenery, Turkey holds the second and third positions regarding the highest penetration rates for credit and debit card usage.

Download this datasheet for more stats regarding the Turkish eCommerce market, key payment methods, and how 2Checkout enables local payment processing, covering also support and legal issues. Leverage 2Checkout's tools to achieve the fastest path to revenue, maximize client value through improved acquisition & retention and expand global reach.

turkey-cover.png

 

Order information object

Overview

Use this object to retrieve information about orders. 

Attributes

Order Information 

Type/Description

RefNo

Optional (string)

 

Avangate generates unique reference numbers for all orders (purchases). You can use this parameter to retry authorizations for orders with failed transactions by changing the payment method.

 

NULL when you place new orders.

OrderNo

Optional (string)

 

The consecutive order number Avangate associates with orders and displays in the Order search area of your account.

ExternalReference

Optional (string)

 

Set external reference identifiers for orders. Enables you to replicate the functionality of the REF parameter included into Buy Links. Maximum 100 characters. If there is a need for longer references, you can apply an md5 hash for any string value, resulting in a 32 characters string. You can verify the hash after the order notification, on the client side.

ShopperRefNo

Optional (string)

 

External shopper identifier.

Status

Optional (string)

 

The status of the order:

  • AUTHRECEIVED – Avangate blocks the amount corresponding to the transaction, but the process of collecting funds is incomplete.
  • PENDING - Avangate has yet to block the amount corresponding to the transaction or shoppers used an offline payment method like wire transfer.
  • COMPLETE – The shopper completed the transaction for the purchase and Avangate or you fulfilled the order (when required).
  • CANCELED – Avangate cancels orders for which shoppers fail to transfer funds in due time.
  • REVERSED – Avangate reverses order transactions that never reach the Complete/Finished stage. Shoppers never complete transactions for such purchases.
  • REFUND – Avangate refunds orders only after they reach the Complete/Finished stage and returns the funds collected to shoppers.

ApproveStatus

Optional (string)

 

The status of the order resulted from the evaluation by the Avangate anti-fraud system or by a member of the anti-fraud department. This status varies for new purchases and for orders requiring customers to make manual payments.

Possible values:

  • WAITING: The Avangate anti-fraud system or a member of the anti-fraud department has yet to approve the order.
  • OK: The Avangate anti-fraud system or a member of the anti-fraud department approved the order.
  • INVALIDDATA: Shopper-supplied data is invalid – Avangate did not approve the order.
  • FRAUD: The order is fraudulent.

VendorApproveStatus

Optional (string)

 

Shows if you approved or not a partner order. Possible values:

  • OK
  • WAITING
  • REJECTED

Language

Optional (string)

 

ISO 639-1 two-letter code. Language used for the purchase process. Example: “en.”

OrderDate

Optional (string)

 

Y-m-d H:i:s (2014-05-22 00:12:12) The datetime stamp (in the API time zone defined in cPanel) when customers place their orders.

FinishDate

Optional (string)

 

Y-m-d H:i:s (2014-05-22 00:12:12) The datetime stamp (in the API time zone defined in cPanel) when the order reach the Complete status.

 

NULL for order that did not reach the Complete/Finished stage.

Source

Optional (string)

 

The link source for the sales. Enables you to replicate the functionality of the SRC (separate link identifier) parameter when included into Buy Links. Use the SRC parameter to track sale sources.

Maximum length 255 characters. Cannot be null.

AffiliateSource

Optional (string)

 

The link source for affiliate referred sales. Similar to the functionality of the SRC (separate link identifier) parameter included into Buy Links, but controlled by the AFFSRC parameter. Affiliates use the AFFSRC parameter to track sale sources for their referrals. Maximum length 255 characters.

AffiliateId

Optional (int)

 

Identifier belonging to affiliates who refer orders.

AffiliateName

Optional (string)

 

Affiliate name.

AffiliateUrl

Optional (string)

 

Affiliate website URL from the Affiliate Details.

RecurringEnabled

Optional (boolean)

 

true or false, depending on whether the shoppers checked the subscription auto-renewal checkbox or not, during the purchase process.

HasShipping

Optional (boolean)

 

true or false, depending on whether the order requires shipping.

BillingDetails

Optional (Object)

   

Details below. 

 

Person

Object

     

Details below. 

   

FirstName

Optional (string)

     

Shopper name.

   

LastName

Optional (string)

     

Shopper surname.

   

CountryCode

Optional (string)

     

Shopper country. ISO 3166 two-letter code.

   

State

Optional (string) – Required for US, Brazil, India and Romania

     

The state in the shopper's country. Mandatory when you set the Billing Country to US, Brazil, India and Romania. Use case insensitive utf8 strings for the full name, or just the two letter code.

   

City

Optional (string)

     

Shopper city.

   

Address1

Optional (string)

     

Shopper address.

   

Address2

Optional (string)

     

Shopper address.

   

Zip

Optional (string)

     

ZIP/ Postal code.

   

Email

Optional (string)

     

Shopper email address.

   

Phone

Optional (string)

     

Shopper phone number. Mandatory when you set Brazil as the Billing Country. Can be NULL.

   

Company

Optional (string)

     

Company name. Can be null for end users. When present, you also need to provide the FiscalCode.

 

FiscalCode

Optional (string) – Required for Brazil

   

• For companies, it needs to be the VAT ID. Avangate will validate the value provided and throw an error if the VAT ID is invalid/incorrect when calling setPaymentDetails. When present, you also need to provide the Company name.

• Mandatory when the Billing Country is set to Brazil. For Brazilian customers it represents the Fiscal Code (CPF/CNPJ).

• Mandatory when the Billing Country is set to India and purchase is made by a Company.

• Can be null for end users.

DeliveryDetails

Optional (Object)

Optional. When missing, Avangate uses the same details as for the BillingDetails object.

     

Details below. 

   

Person

Object

       

Details below. 

     

FirstName

Optional (string)

       

Shopper name from the delivery details.

     

LastName

Optional (string)

       

Shopper surname from the delivery details.

     

CountryCode

Optional (string)

       

Shopper country. ISO 3166 two-letter code from the delivery details.

     

State

Optional (string) – Required for US, Brazil and Romania

       

The state in the shopper's country from the delivery details. Mandatory when you set the Billing Country to US, Brazil and Romania. Use case insensitive utf8 strings for the full name, or just the two letter code.

     

City

Optional (string)

       

Shopper city from the delivery details.

     

Address1

Optional (string)

       

Shopper address from the delivery details.

     

Address2

Optional (string)

       

Shopper address from the delivery details.

     

Zip

Optional (string)

       

ZIP/ Postal code from the delivery details.

     

Email

Optional (string)

       

Shopper email address from the delivery details.

     

Phone

Optional (string)

       

Shopper phone number from the delivery details. Mandatory when you set Brazil as the Billing Country. Can be NULL.

     

Company

Optional (string)

       

Company name from the delivery details. Can be null for end users. When present, you also need to provide the FiscalCode.

PaymentDetails

Optional (Object)

 

Adapt this object to the desired payment method.

 

Type

Optional (string)

   

The payment method:

  • CC (credit/debit card - including local Brazilian cards).
  • PAYPAL
  • PAYPAL_EXPRESS
  • CCNOPCI (credit/debit card for non-PCI certified merchants).
  • TEST (for test orders).
  • PREVIOUS_ORDER (place new orders using the reference of a previous order).
  • EXISTING_PAYMENT_DATA  (use a card one of your customers already used to purchase from your account).
  • WIRE – the placeOrder response includes Wire payment details.
  • CHECK – the placeOrder response includes Check payment details.
  • PURCHASEORDER - use for orders with POs.
  • FREE – for 0 value orders for which you’re not requiring customers to provide payment details.
 

Currency

Optional (string)

   

The currency ISO code for the payment - ISO 4217. Example: “usd.”

 

PaymentMethod

Optional (object)

   

Object structure and parameters differ according to payment method selected and API method (placing orders (POST) vs. retrieving order data (GET)). For payments with credit cards, PalPay Express, previous order reference and purchase order use the objects below.

 

For payments with check and wire, send only the ‘CHECH’ and ‘WIRE’ strings.

 

null for 0 value orders for which you’re not requiring customers to enter payment details.

   

PaymentDetailsCard

Optional (object)

       

Details below. 

     

CardType

Optional (string)

       

visa, visaelectron, mastercard, maestro, amex, discover, dankort, cartebleue, jcb, hipercard, elo

     

FirstDigits

Optional (string)

       

First four digits of the credit card.

     

LastDigits

Optional (string)

       

Last four digits of the credit card.

 

CheckPaymentDetails

Optional (Object)

     

Details below. 

   

Beneficiary

Optional (string)

     

The beneficiary of the payment.

Can be NULL.

   

CheckPostalAddress

Optional (string)

     

The address of the beneficiary.

Can be NULL.

   

Amount

Optional (double)

     

The total costs incurred by the customer for an order.

Can be NULL.

   

Currency

Optional (string)

     

The currency ISO code of the order/payment - ISO 4217.

Can be NULL.

 

PayPalExpress

Optional (Object)

       

Details below. 

     

Email

Optional (string)

       

Email address customers use for their PayPal account.

     

ReturnURL

Optional (string)

       

The PayPal Express Checkout redirect URL returned by calling the getPayPalExpressCheckoutRedirectURL method. The return URL is the page on your website to which PayPal redirects your buyer's browser after the buyer logs into PayPal and approves the payment. Typically, this is a secure page (https://...) on your site.

     

CancelURL

Optional (string)

       

The cancel URL is the page on your website to which PayPal redirects your buyer's browser if the buyer does not approve the payment. Typically, this is the secure page (https://...) on your site from which you redirected the buyer to PayPal.

 

WirePaymentDetails

Optional (Object)

     

Details below. 

   

Amount

Optional (double)

     

The total costs customers incur.

Can be NULL.

   

Currency

Optional (string)

     

The currency ISO code of the order - ISO 4217.

Can be NULL.

   

PaymentReference

Optional (string)

     

Transaction identifier.

Can be NULL.

   

RoutingNumber

Optional (string)

     

Identification number assigned to financial institutions.

Can be NULL.

   

BankAccounts

Optional (Array of objects)

       

Details below. 

     

Beneficiary

Optional (string)

       

The beneficiary of the payment.

Can be NULL.

     

BankName

Optional (string)

       

The name of the beneficiary's bank.

Can be NULL.

     

BankCountry

Optional (string)

       

The country of the beneficiary's bank.

Can be NULL.

     

BankCity

Optional (string)

       

The city of the beneficiary's bank.

Can be NULL.

     

BankAddress

Optional (string)

       

The address of the beneficiary's bank.

Can be NULL.

     

BankAccount

Optional (string)

       

The number for the account in which customers transfer the funds.

Can be NULL.

     

BankAccountIban

Optional (string)

       

The IBAN of the beneficiary's bank.

Can be NULL.

     

BankAccountSwiftCode

Optional (string)

       

The Swift Code of the beneficiary's bank.

Can be NULL.

     

Currency

Optional (string)

       

The currency ISO code for the bank account - ISO 4217.

Can be NULL.

 

CustomerIP

Optional (string)

   

Shopper IP.

CustomerDetails

Object

Avangate populates the parameters of the customer entity with information from the customer whose AvangateCustomerReference or ExternalCustomerReference you send during the purchase.

   

Details below. 

 

AvangateCustomerReference

Optional (Int)

   

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

 

ExternalCustomerReference

Optional (string)

   

The external customer reference you control. Aggregate subscriptions under the same Customer account if the products they're associated to are purchased by the same shopper by adding the CUSTOMERID (case sensitive) parameter  to buy links.

 

FirstName

Optional (string)

   

Customer's first name. 

 

LastName

Optional (string)

   

Customer's last name.

 

CountryCode

Optional (string)

   

Customer's country code (ISO 3166 two-letter code).

 

State

Optional (string)

   

Customer's state. For example, "Alabama","Alaska","Arizona".

 

City

Optional (string)

   

Customer's city.

 

Address1

Optional (string)

   

Customer's address.

 

Address2

Optional (string)

   

Customer's address.

 

Zip

Optional (string)

   

Zip code.

 

Email

Optional (string)

   

Customer's email.

 

Phone

Optional (string)

   

Customer's phone number.

 

Company

Optional (string)

   

Company name.

 

FiscalCode

Optional (string)

   

For companies, it needs to be the VAT ID. Avangate validates this values and throws an error if the VAT ID is invalid/incorrect. When present, you need to also provide Company name.

 

Can be null for end users.

 

Fax

Optional (string)

   

Customer's fax number.

 

Enabled

Optional (boolean)

   

true or false, depending on whether the customer account is active or inactive. An active customer account features at least one Active or Past due subscription.

 

Trial

Optional (boolean)

   

true or false, depending on whether the customer account features only trials or also paid subscriptions.

 

Language

Optional (string)

   

ISO 639-1 two-letter code. Example: “en.”

 

ExistingCards

Optional (Array of objects)

     

Details below. 

   

TransientToken

Optional (Object)

     

Populated only when you retrieve customer information by SSOToken.

     

Token

Optional (string)

       

Token for the EXISTING_PAYMENT_DATA flow. Use it to charge customers using cards they used in the past for purchases from your Avangate account.

   

CardType

Optional (string)

     

visa, visaelectron, mastercard, maestro, amex, discover, dankort, cartebleue, jcb, hipercard, elo

   

LastDigits

Optional (string)

     

Last four digits of the credit card.

   

ExpirationMonth

Optional (string)

     

Card expiration month.

   

ExpirationYear

Optional (string)

     

Card expiration year.

   

NameOnCard

Optional (string)

     

Card holder name.

Origin

Optional (String)

 

Avangate automatically tracks the source of purchases:

 

  • Web – When customers use the desktop version of the Avangate shopping cart.
  • API - When customers use a custom, API-based ordering interface.
  • Mobile - When customers use the mobile version of the Avangate shopping cart.
  • Automatic Billing – For auto-renewals and trial conversions.

AvangateCommission

Optional (Int)

 

Avangate's commission for the order.

OrderFlow

Optional (string)

 

PURCHASE_ORDER - Sent only when shoppers used Purchase Orders.

REGULAR - Sent in all other cases.

GiftDetails

Optional (object)

 

Contains contact details for the recipient of a gift purchase.

 

FirstName

Optional (string)

   

First name of gift recipient.

 

LastName

Optional (string)

   

Last name of gift recipient.

 

Email

Optional (string)

   

Email of gift recipient. Avangate uses this email for the delivery/fulfillment process.

 

GiftNote

Optional (string)

   

Custom text shoppers provide as a message to the gift recipient.

PODetails

Object (optional)

   

Details below. 

 

Status

Optional (string)

   

PO status. Possible values:

 

PO status API

PO status cPanel

AWAITING_UPLOAD

Awaiting form submission - Waiting for the customer to submit the PO form

TIME_EXPIRED

Expired, form not received - The customer did not submit the PO form

AWAITING_MERCHANT

Awaiting your confirmation - PO approved by Avangate, awaiting vendor confirmation

MERCHANT_TIME_EXPIRED

Expired, PO not confirmed - You didn't confirm/reject the PO

AWAITING_MERCHANT

Rejected - You rejected the PO

AWAITING_PAYMENT

Awaiting payment - You approved the PO, waiting for payment

AWAITING_PAYMENT

Expired, not paid - The customer did not complete the PO payment. Avangate accepts  payments up to 30 days after the PO payment interval expires

NOT_PAID

Canceled, not paid - The customer did not complete the PO payment

NOT_PAID

Canceled by Avangate - Avangate canceled the PO

NOT_PAID

Canceled via API - You canceled the PO (via API)

PAID

Complete - Customer paid the PO. The order is complete

 

AutoApprove

Optional (Boolean)

 

TRUE or FALSE, depending on whether you set POs to auto-approve or not.

 

RequireDocumentUpload

Optional (Boolean)

 

TRUE or FALSE, depending on whether require document upload or not.

 

NetPaymentTerms

Optional (Integer)

 

The term of net payment in days.

 

CopyPreviousDocuments

Optional (Boolean)

 

TRUE or FALSE, depending on whether copy documents from previous order or not.

 

PdfFormUrl

Optional (String)

 

URL of Purchase Order form which needs to be printed, signed and uploaded.

ExtraInformation

Optional (Object)

 

Details below. 

 

PaymentLink

Optional (String)

 

 

Can be:

1. The PO doc upload link - If you set AutoApprove as FALSE on the original order and before shoppers upload the PO. 

2. Payment link for orders with POs. Business customers can use the PaymentLink to finalize payment for orders with POs. If you set AutoApprove as TRUE on the original order and if Avangate and you approve the PO. 

PaymentLink

Optional (string)

 

In scenarios in which an issue blocks the transaction from finalizing, Avangate provides a retry link where shopper can complete their purchase by providing new payment details.

PartnerCode

Optional (string)

 

Partner code you configured for your partner. NULL for eStore orders.

PartnerMargin

Optional (double)

 

Partner margin you set for the order. NULL for eStore orders.

PartnerMarginPercent

Optional (double)

 

The percentage of the partner margin from the net value of the products ordered, minus the value of any discounts. NULL for eStore orders.

ExtraMargin

Optional (double)

 

Extra margin you offer by editing partner orders. NULL for eStore orders.

ExtraMarginPercent

Optional (double)

 

The percentage of the extra partner margin from the net value of the products ordered, minus the partner margin and the value of any discounts. NULL for eStore orders.

ExtraDiscount

Optional (double)

 

Extra discount you offer by editing partner orders. NULL for eStore orders.

ExtraDiscountPercent

Optional (double)

 

The percentage of the partner margin from the net value of the products ordered, minus the value of any coupon discounts. NULL for eStore orders.

LocalTime

Optional (string)

 

Local shopper time in the following format: Y-m-d H:i:s.

This parameter can impact the fraud score of an order when it's missing, NULL or incorrectly formatted.

TestOrder

Optional (Boolean)

 

True for test orders. False of regular orders.

Errors

Optional (StringArray)

 

Payment gateway processing errors.

Items

Array of objects

   

Details below. 

 

ProductDetails

Object

   

Name

Optional (string)

     

Product name.

   

ExtraInfo

Optional (string)

     

The text entered in the Additional information field when generating Buy links, or via the INFO[PRODUCT_ID] parameter used in Buy links.

   

RenewalStatus

Optional (boolean)

     
  • true for orders renewing subscriptions.
  • false for all other orders: new purchases, upgrades.
   

Subscriptions

Object

     

SubscriptionReference

Optional (string)

       

Unique, system-generated subscription identifier.

     

PurchaseDate

Optional (string)

       

The date time stamp when shoppers acquired their subscriptions corresponding to the moment when the Avangate system marks the purchase as finished. Format (YYYY-MM-DD HH:mm:ss). Default GMT+02:00.

 

e.g. 2015-08-11 15:18:52

     

SubscriptionStartDate

Optional (string)

       

 

Example: 2015-09-29 17:57:59

     

ExpirationDate

Optional (string)

       

The date time stamp of upcoming renewal/expiration for subscriptions not taking into account grace period settings.

 

Format (YYYY-MM-DD HH:mm:ss). Default GMT+02:00.

 

e.g. 2015-09-11 15:18:52

     

Lifetime

Optional (boolean)

       
  • true – For non-recurring, evergreen subscriptions.
  • false – For recurring subscriptions with a specific billing cycle from 7 days to 36 months.
     

Trial

Optional (boolean)

       
  • true – For trial subscriptions.
  • false – For non-trial, recurring subscriptions with a specific billing cycle from 7 days to 36 months.
     

Enabled

Optional (boolean)

       
  • true – For active and past due subscriptions.
  • false – For expired and cancelled subscriptions.
     

RecurringEnabled

Optional (boolean)

         

                   

PriceOptions

Optional (array of strings)

   

Array of price option codes.

   

Code

Optional (strings)

     

Unique code that the Avangate system generates or that you set for each pricing options group.

   

Required

Optional (boolean)

     
  • true – you require shoppers to select the price option  through the way in which you configured pricing.
  • false – you do not require shoppers to select the price option.
   

Options

Optional (array of strings)

     

The code you set or that the Avangate system generates for each price option child inside a pricing options group parent.

 

Price

Object

   

This object returns the price per unit at order line level.

 

In the case of trials, the object returns the costs for the trial to full subscription conversion.

   

UnitNetPrice

Optional (double)

     

The value per product unit, excluding sales tax/VAT expressed in the payment currency.

   

UnitGrossPrice

Optional (double)

     

Total value per product unit, including sales tax/VAT expressed in the payment currency. UnitGrossPrice does not reflect any discounts.

   

UnitVAT

Optional (double)

     

Sales tax/VAT per product unit expressed in the payment currency.

   

UnitDiscount

Optional (double)

     

Value of the discount per product unit expressed in the payment currency.

   

UnitNetDiscountedPrice

Optional (double)

     

The value per product unit, expressed in the payment currency, excluding sales tax/VAT, from which Avangate deducts the unit discount.

   

UnitGrossDiscountedPrice

Optional (double)

     

Total costs shoppers incur per product unit, expressed in the payment currency. This value includes sales tax/VAT, Avangate and affiliate commissions, but Avangate deducts the value of any discounts.

   

UnitAffiliateCommission

Optional (double)

     

Value of the affiliate commission per product unit calculated expressed in the payment currency.

 

Avangate deducts discounts from the costs incurred by shoppers before calculating affiliate commissions.

 

Avangate does not take into account shipping costs when calculating affiliate commissions.

 

NULL when Avangate does not apply an affiliate commission.

   

Currency

Optional (string)

     

The currency ISO code for the payment - ISO 4217. Example: usd.

   

NetPrice

Optional (double)

     

The value per order line, excluding sales tax/VAT expressed in the payment currency.

   

GrossPrice

Optional (double)

     

Total value per order line, including sales tax/VAT expressed in the payment currency. UnitGrossPrice does not reflect any discounts.

   

NetDiscountedPrice

Optional (double)

     

The NetPrice value per order line (in the payment currency), excluding sales tax/VAT, from which Avangate deducts discounts.

   

GrossDiscountedPrice

Optional (double)

     

Total costs shoppers incur per order line, expressed in the payment currency. This value includes sales tax/VAT, Avangate and affiliate commissions, but Avangate deducts the value of any discounts.

 

Example:

  • UnitNetPrice: 99
  • UnitGrossPrice: 120.39
  • UnitVAT: 21.39
  • UnitDiscount: 9.9
  • UnitNetDiscountedPrice: 89.1
  • UnitGrossDiscountedPrice: 110.49
  • UnitAffiliateCommission: 22.28
  • Currency: "usd"
  • NetPrice: 198
  • GrossPrice: 240.77
  • NetDiscountedPrice: 178.2
  • GrossDiscountedPrice: 220.97
  • Discount: 19.8
  • VAT: 42.77
  • AffiliateCommission: 44.56
   

Discount

Optional (double)

     

Value of the discounts per order line expressed in the payment currency.

   

VAT

Optional (double)

     

Value of sales tax/VAT per order line expressed in the payment currency.

   

AffiliateCommission

Optional (double)

     

Value of the affiliate commission per order line, calculated from the NetDiscountedPrice expressed in the payment currency. Or NULL. Avangate does not take into account shipping costs when calculating affiliate commissions.

 

Code

Optional (string)

   

Unique product identifier your control. Max length 256 characters.

 

Quantity

Optional (integer)

   

Number of units

 

SKU

Optional (string)

   

SKU identifier.

 

CrossSell

Optional (Object)

     

Details below. 

   

ParentCode

Optional (string)

     

The product code of the master product you set to trigger the campaign.

   

CampaignCode

Optional (string)

     

Unique, system-generated identifier for cross-sell campaigns.

 

Trial

Optional (Object)

     

Details below. 

   

Period

Optional (integer)

     

The length of the trial subscription lifetime in days.

   

GrossPrice

Optional (double)

     

Total trial price in the payment currency before Avangate deducts any taxes, discounts, etc.

   

VAT

Optional (double)

     

The total value of taxes for the trial in the payment currency, before Avangate deducts any discounts.

   

NetPrice

Optional (double)

     

Total trial price in the payment currency, not including taxes, before Avangate deducts any discounts.

 

AdditionalFields

Optional (array of objects)

     

Details below. 

   

Code

Optional (string)

     

The alpha-numeric characters, underscores and dashes that are set as the field identifier.

   

Text

Optional (string)

     

Field text visible to shoppers in the cart.

   

Value

Optional (string)

     

Selected field value.

 

Promotion

Optional (object)

     

Details below. 

   

Name

Optional (string)

     

Promotion name.

   

Description

Optional (string)

     

Promotion description.

   

StartDate

Optional (string)

     

The date when you set the promotion to start. NULL for promotions that start immediately after you create them.

   

EndDate

Optional (string)

     

The date when you set the promotion to end. NULL for promotions you want active indefinitely.

   

MaximumOrdersNumber

Optional (integer)

     

Avangate only applies the promotion to a maximum number of orders you define.

 

Can be NULL if you want the promotion to apply to an unlimited number of orders.

   

MaximumQuantity

Optional (integer)

     

Discount only applies to a maximum number of units purchased through a single order, smaller than the quantity you defined. Shoppers purchase any extra units at full price. Can be NULL if you want the promotion to apply to an unlimited number units.

   

InstantDiscount

Optional (boolean)

     

The instant discount option auto-applies the discount for ALL selected products, without the need for shoppers to enter a discount coupon.

   

Coupon

Optional (string)

     

Promotion coupon/voucher.

   

DiscountLabel

Optional (string)

     

Discounts can be set as a percentage from the product price or as a fixed amount in the chosen currency.

   

Enabled

Optional (string)

     

true or false, depending on whether a promotion is active or disabled. 

   

Type

Optional (string)

     
  • REGULAR – product/cart line level discounts.
  • ORDER – quantity discounts.
  • GLOBAL – order-level discounts.
  • AFFILIATE – for discounts created by affiliates.

Promotions

Optional (Array of objects)

   

Details below. 

 

Name

Optional (string)

   

Promotion name.

 

Description

Optional (string)

   

Promotion description.

 

StartDate

Optional (string)

   

The date when you set the promotion to start. NULL for promotions that start immediately after you create them.

 

EndDate

Optional (string)

   

The date when you set the promotion to end. NULL for promotions you want active indefinitely.

 

MaximumOrdersNumber

Optional (integer)

   

Avangate only applies the promotion to a maximum number of orders you define.

 

Can be NULL if you want the promotion to apply to an unlimited number of orders.

 

MaximumQuantity

Optional (integer)

   

Discount only applies to a specific number of units purchased at once, smaller than the maximum quantity you defined. Shoppers purchase any extra units at full price. Can be NULL if you want the promotion to apply to an unlimited number units.

 

InstantDiscount

Optional (boolean)

   

The instant discount option auto-applies the discount for ALL selected products, without the need for shoppers to enter a discount coupon.

 

Coupon

Optional (string)

   

Promotion coupon/voucher.

 

DiscountLabel

Optional (string)

   

Discounts can be set as a percentage from the product price or as a fixed amount in the payment currency.

 

Enabled

Optional (string)

   

true or false, depending on whether a promotion is active or disabled. 

 

Type

Optional (string)

   
  • REGULAR – product/cart line level discounts.
  • ORDER – quantity discounts.
  • GLOBAL – order-level discounts.
  • AFFILIATE – for discounts created by affiliates.

AdditionalFields

Optional (array of objects)

   

Details below. 

 

Code

Optional (string)

   

The alpha-numeric characters, underscores and dashes that are set as the field identifier.

 

Text

Optional (string)

   

Field text visible to shoppers in the cart.

 

Value

Optional (string)

   

Selected field value.

Currency

Optional (string)

 

The currency ISO code for the payment - ISO 4217. Example: usd.

NetPrice

Optional (double)

 

Order value excluding sales tax/VAT expressed in the payment currency.

GrossPrice

Optional (double)

 

Total order value, including sales tax/VAT expressed in the payment currency. GrossPrice does not reflect any discounts.

NetDiscountedPrice

Optional (double)

 

The NetPrice order value excluding sales tax/VAT, from which Avangate deducts discounts. NetDiscountedPrice is expressed in the payment currency.

GrossDiscountedPrice

Optional (double)

 

Total costs shoppers incur, expressed in the payment currency. This value includes sales tax/VAT, Avangate and affiliate commissions, but Avangate deducts the value of any discounts.

 

For example:

  • Currency: "usd"
  • NetPrice: 396
  • GrossPrice: 486.29
  • NetDiscountedPrice: 376.2
  • GrossDiscountedPrice: 466.49
  • Discount: 19.8
  • VAT: 90.29
  • AffiliateCommission: 94.05

Discount

Optional (double)

 

Value of the discounts for an order expressed in the payment currency.

VAT

Optional (double)

 

Value of sales tax/VAT expressed in the payment currency.

AffiliateCommission

Optional (double)

 

Value of the affiliate commission for the order calculated from the NetDiscountedPrice expressed in the payment currency. Or NULL. Avangate does not take into account shipping costs when calculating affiliate commissions.

 

 

Install Verifone CPQ App

Overview

The Verifone native CPQ application on top of Salesforce will be used to manage existing subscriptions coming from the customer’s eCommerce websites, and to create proposals for new subscription plans or subscription amendments (renewal, upgrade - future phases).

The application will contain two ways of integration with the Verifone platform, as follows:

  • Verifone will push Products, Pricing Catalog, eCommerce Orders, Settings information into Salesforce via SF API.
  • Salesforce will push Offer information into Verifone, via APIs.
  • Salesforce will pull Pricing Configuration and Product Options information, currency exchange rates

The CPQ Application will be used to manage Subscriptions and Offers in Salesforce.

Availability

The Verifone native CPQ application is available on request for any merchants selling to B2B customers.

Workflow

A high-level overview of the data flow between the SalesForce and the Verifone systems can be elaborated as follows:

data flow diagram.jpg

Access the Verifone CPQ Application

You can access the application by clicking on the App Launcher and searching for the CPQ application, as shown:

The CPQ App access

CPQ Settings

In the CPQ app dashboard, navigate to CPQ Settings to define different values and currencies that the system will use.

CPQ settings object.png

Once you click on the CPQ Settings button, you can start defining values like:

  • active currency
  • maximum discount
  • minimum/maximum payment terms

The CPQ defined values_active currency, maximum discount, minimum_maximum payment terms.png

 

Delete SKU codes

Overview

Use the deleteSku method to remove product SKU codes through an API call using the below parameters.

Request Parameters

Parameters Required Type/Description
ProductCode Required String. The product code that you can define for each of your offerings. Needs to be unique.
PriceConfigurations Required String.
PriceConfigurationCode Required String. Unique identifier of the pricing configuration.
SkuCode Required String. Unique identifier of the SKU schema.

Request Example

<?php

require ('PATH_TO_AUTH');

$product = new \stdClass();
$product->ProductCode= '6B3CB17DDA_COPY1';

$pricingConfiguration = new \stdClass();
$pricingConfiguration->PriceConfigurationCode = 'E684EC99B0';
$pricingConfiguration->SKUs = ['Product_Test_SKU_001050', 'Product_Test_SKU_001053'];

$product->PriceConfigurations = [$pricingConfiguration];

$jsonRpcRequest = array (
    'method' => 'deleteSku',
    'params' => array($sessionID, [$product]),
    'id' => $i++,
    'jsonrpc' => '2.0'
);

var_dump (callRPC((Object)$jsonRpcRequest, $host, true));

Response Parameters

Parameters Type/Description
ProductCode String
PriceConfigurations String
PriceConfigurationCode String

Response Example

array(1) {
  [0] =>
  class stdClass#5 (4) {
    public $ProductCode =>
    string(16) "6B3CB17DDA_COPY1"
    public $PriceConfigurations =>
    array(1) {
      [0] =>
      class stdClass#6 (3) {
        public $PriceConfigurationCode =>
        string(10) "E684EC99B0"
        public $SKUs =>
        array(2) {
          [0] =>
          string(23) "Product_Test_SKU_001050"
          [1] =>
          string(23) "Product_Test_SKU_001053"
        }
        public $Errors =>
        array(0) {
        }
      }
    }
    public $SKUs =>
    array(0) {
    }
    public $Errors =>
    array(0) {
    }
  }
}

Create an upsell campaign

Overview

Use the createUpSellCampaign method to create an upsell campaign via SOAP API 6.0.

Request parameters

Parameters Type Required/Optional Description

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 option 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.

Response parameters

Parameters Type Description

UpSell

Object

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

Request sample

<?php
require ('PATH_TO_AUTH');

$upsell = new \stdClass();

$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->createUpsellCampaign($sessionID, $upsell);
} catch (SoapFault $e) {
    echo  'SOAP Exception caught: ' . $e->getMessage()
}

Set grace period

Overview

Use the setSubscriptionGracePeriod method to set a custom grace period for an Active or Past Due subscription. This method changes per-subscription end user data and not customer details.

Parameters

Parameters Type/Description

sessionID

Required (string)

 

Session identifier, the output of the Login method. Include sessionID into all your requests. Avangate throws an exception if the values are incorrect.  The sessionID expires in 10 minutes.

subscriptionReference

Required (string)

 

Unique, system-generated subscription identifier. Needs to belong to an Active or Past Due subscription.

subscriptionGracePeriod

Required (int)

 

The number of days for the grace period, during which time, customers can still renew/upgrade expired subscriptions. During the grace period, subscriptions feature the Past Due status.

 

Can be NULL. When NULL, the grace period for a subscription is the same as that you defined in the per-product or per-account grace period settings. You can use this to set a custom grace period for a subscription.

 

Use 0 to remove the grace period of a subscription.

Response

Parameters Type/Description

Boolean

true or false depending on whether the changes were successful or not.

Request

<?php

require ('PATH_TO_AUTH');

$subscriptionReference = 'YOUR_SUBSCRIPTION_REFERENCE';
$gracePeriod = YOUR_GRACE_PERIOD;

$jsonRpcRequest = array (
'method' => 'setSubscriptionGracePeriod',
'params' => array($sessionID, $subscriptionReference, $gracePeriod),
'id' => $i++,
'jsonrpc' => '2.0');

var_dump (callRPC((Object)$jsonRpcRequest, $host, true));

Set grace period

Overview

Use the setSubscriptionGracePeriod method to set a custom grace period for an Active or Past Due subscription. This method changes per-subscription end user data and not customer details.

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.

subscriptionReference

Required (string)

 

Unique, system-generated subscription identifier. Needs to belong to an Active or Past Due subscription.

subscriptionGracePeriod

Required (int)

 

The number of days for the grace period, during which time, customers can still renew/upgrade expired subscriptions. During the grace period, subscriptions feature the Past Due status.

 

Can be NULL. When NULL, the grace period for a subscription is the same as that you defined in the per-product or per-account grace period settings. You can use this to set a custom grace period for a subscription.

 

Use 0 to remove the grace period from a subscription.

Response

Parameters Type/Description

Boolean

true or false depending on whether the changes were successful or not.

Request

<?php

require ('PATH_TO_AUTH');

$subscriptionReference = 'YOUR_SUBSCRIPTION_REFERENCE';
$gracePeriod = YOUR_GRACE_PERIOD;

try {
    $customGracePeriod = $client->setSubscriptionGracePeriod($sessionID, $subscriptionReference, $gracePeriod);
}
catch (SoapFault $e) {
    echo "customGracePeriod: " . $e->getMessage();
    exit;
}
var_dump("customGracePeriod", $customGracePeriod);

Search customers

Overview

Use the searchCustomers method via JSON-RPC API 6.0 to be able to identify customers by applying a set of filters.

Request parameters

Parameter name Type Required/Optional Description
Email String Optional Strict match of the email address. It should be case insensitive.
Phone String Optional Strict match of the phone number.
CountryCode String Optional Strict match of the customer's country code.
Language String Optional Strict match of the customer's language.
Trial Boolean Optional  
Status Enum Optional Can be active, inactive.
Pagination Object Optional  

Limit

Int Optional  

Page

Int Optional  

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 URL = 'http://api.avangate.local:8081/rpc/6.0';
    public const ACTION = 'searchCustomers';
    public const ADDITIONAL_OPTIONS = null;
    //array or JSON
    public const PAYLOAD = <<<JSON
{
  "Email": "test@email.com",
  "Language": "en",
  "CountryCode": "us",
  "Trial": true,
  "Status": "ACTIVE",
  "Phone": "403324433234",
  "Pagination": {
    "Limit": 10,
    "Page": 1
  }
}
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, $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

 

10 practices to optimize your checkout funnel

Overview

Let’s get one thing straight right from the start and set the proper expectations before diving into this long article. This is by no means the Holy Grail of conversion optimization, for one simple reason: everything is unique to your own scenario. Reading about a test that proved to be successful on a certain website doesn’t automatically make it a best practice for yours. You can’t just copy and paste best practices from one website or even industry to another, expecting the same (or even better) results. Not saying it can’t happen, but it’s simply not a general rule.

This article is meant to be used as a guideline for tests that you should be running when optimizing your shopping cart for better conversions.

The keyword here is test. All the strategies illustrated below have proven successful in different scenarios. Some of our merchants have seen increases in their conversion rate by adhering to one, two, or more of these practices, but only after investing time in testing multiple variations and tailoring the strategies below to their own industry, market, and target audience.

We encourage you to analyze the tactics explained below and test any of them on your own terms. We’d love to learn the impact any of these have on your conversion rate, so if you find a specific strategy that works for you, don’t hesitate to let us in on it and maybe we can help you optimize even further!

1. Optimize the checkout form

Shorten the checkout form by requesting only essential billing and/or delivery details. Extensive forms can discourage shoppers from completing a purchase. Marketing surveys or other information not required for placing the order should be moved to post-sale pages.

Use easily understandable error messages. Display only coherent error info and actionable remedies capable of helping shoppers resolve the issue. Provide visually distinctive cues when errors are generated and when they’re resolved. Most importantly, don’t blame your shoppers, and employ friendly and customer-centric instructions to help them correct the errors.

For new customers, avoid introducing a separate registration or “create account” step prior to the shopping cart. Instead, allow the cart to double as the registration process, collecting the shopper’s name and email. If a password is required, ideally this can be generated after the order is completed with a redirect from the Thank You/Order Confirmation page. Alternatively, include a password field in the Checkout form itself to avoid a separate step in the purchase funnel.

For returning customers purchasing an upgrade or subscription renewal, the shopping cart should automatically pre-fill their contact information on the Checkout page. Shoppers should not need to register or enter a password to access the shopping cart. The goal is to make it as easy as possible to complete the order.

Example

A solid example of a successful optimization project involved a SaaS provider working with 2Checkout and improving conversions by 36% with a cleaner design and by a further 12% with fewer form fields and optimized payment methods display.

2. Use consistent branding

To deliver a seamless customer experience, the shopping cart should become an extension of your website, product, or app – with consistent branding, design, and layout throughout the purchase flow. Having a consistent brand, design, and style is crucial in building trust. You don’t want your cart to look more like a phishing attempt than a real cart. Apply the same Style Guide to the cart pages for a consistent look and feel.

Example

The header and footer of the cart pages should look exactly the same as the previous page in the purchase funnel. If you have different purchase funnels, for example, if some shoppers are coming from landing pages, some from a product page on your main site, and some from within your software, then use a unique template for each funnel to create a seamless customer experience.

Here are the elements that should be consistent between your site and the cart pages:

  • Your company logo – size and position
  • Header and footer - use the same color and layout even if the content is slightly different.
  • Replicate any background patterns that are present on your website.
  • Use the same style guide elements: font style, font size, colors, text links.
  • Same button styles, shapes, and colors.

In addition, hosting the cart on a custom domain allows you to use the same URL as your website (e.g. store.yourdomain.com). This avoids redirecting the shopper to an unfamiliar URL which can create confusion or distrust.

For example, shoppers would go from www.yourdomain.com to store.yourdomain.com instead of going from yourdomain.com to secure.ecommerce provider.com. At the same time, for simplicity or if you have just started selling online, it may benefit you to leverage the trust and credibility of your eCommerce or payments provider by using their domain name for the online store.

3. Don’t just translate. Localize!

Speaking to your shoppers in their native language increases their trust in your services. However, don’t just translate the same message and interface texts into their language. Localize them instead, by first understanding how the people in a specific market actually refer to a product or service and how they talk about it. Ask for feedback when trials end and you might get useful information about how your product 'talks' to specific audiences.

Localization doesn’t just include text translations. Optimize your checkout pages to adapt to your shoppers’ locale. For instance, if somebody selects the United States of America as a billing country, make sure to include a State field that only they can see. Shoppers in the United Kingdom, on the other hand, should be allowed to select their county, so show them that specific field.

4. Multi-language, multi-currency, and geolocation

Make your shopping cart as friendly as possible for your shoppers by allowing them to select their own interface language to eliminate confusion. Equally important, try to support as many currencies as possible, so that sales tax and/or VAT don’t come as unexpected charges.

Take things one step further by using geolocation to dynamically adjust these settings to each shopper’s location. All content on the page, including cross-sell and upsell offers, should be displayed in the shopper’s local language. The currency and ultimately price of the product should be automatically configured according to the shopper’s geo-detected country. In-country pricing, where merchants establish a set price point for their top 10 countries, tends to convert better than real-time currency conversion, where the price point is automatically determined by currency exchange rates with a default currency, such as USD.

Example

This practice helps you prevent strange price points like $23.67 instead of in-country pricing such as $24.99, and also allows you to display consistent price points on your website before the shopper reaches the cart.

5. Local payment methods/local payment processing

Allow your customers to complete their order with the payment method of their choice. In many countries, credit cards are not the most utilized type of payment method. Ensure that your shopping cart supports all popular local payment methods specific to your target markets. Make sure that the payment methods are clearly visible, and that express options are available for payment methods such as PayPal, where the user is redirected to another site to complete their order.

    Just keep in mind that these so-called “alternative payment methods” can make international customers feel sufficiently “at home” in your shopping cart to result in many successful purchases.

    Worldmap local processing

    In-context checkouts are also useful, as they provide a single-page checkout experience, improving conversion rates.

    Example

    Display payment methods based on their market share according to the shopper's country. Make the checkout process easier by letting customers quickly select their preferred payment methods without going through long drop-down menus or complicated selectors.

    We highly recommend going through our local processing recommendations to learn more about specific payment method market trends and optimizations:

    6. Display the total cost

    The cart should list the total price the customer will be charged, broken out with separate line items for the product price, taxes, and shipping fees (if any). Hidden costs only frustrate shoppers and can lead to refunds and chargebacks.

    7. Add intuitive navigation

    Be sure to communicate the number of steps needed to place an order, and where the shopper currently is in the overall process. A progress map or indicator should be placed at the top of the page. Headlines and subheadings can also be used to describe the purpose of each section of the form.

    When using a checkout flow with a Review page, letting customers know that they can review their order before it is finalized has been proven to increase conversion rates. Other navigation elements, such as the main navigation menu of your website, should not be displayed on the shopping cart pages in order to keep the shopper’s attention focused on completing their order.

     

    8. Keep shoppers in the cart with discounts

    Use exit offers to provide a discount or display a message to shoppers who are about to abandon the cart without completing a purchase. If shoppers close the browser, edit the URL, or move their mouse to the browser bar, an exit offer can be displayed.

    For example, offering a 10% discount or showing a testimonial or a 30-day money-back guarantee can convince the shopper to return to the cart and complete their purchase.

    Exit offers have a much higher conversion rate than remarketing emails, since only 30-50% of shoppers open emails.

    9. Recover abandoned shopping carts

    Don’t expect shoppers to return to an abandoned cart and pick up where they left off.

    Create a comprehensive marketing campaign focused on recovering abandoned carts. Don’t limit remarketing efforts to just a single follow-up email.

    Example

    Consider sending out as many as three messages in the first 72 hours after a cart is abandoned. For example, email #1 is sent within 1 hour, email #2 is sent after 24 hours, and email #3 is sent after 72 hours. Each email should have unique content and link directly back to the cart pre-populated with the relevant product.

    Craft the remarketing emails with customized data from the shopper; their name, products in the cart, and order value. Go a step further and incentivize the shopper to complete their purchase by offering a discount, free shipping, or a free upgrade.

    10. Increase trust with the right messaging

    Include relevant visual cues, such as thumbnail images of the product, to assure the shopper that they’ve added the correct item to the cart. When a shopper enters their information in a form field, display a checkmark to create positive momentum.

    Another best practice is to display the specific credit card logo (e.g. VISA, MasterCard, Amex) after the shopper enters their credit card number. It’s also essential that you build trust in your business. Inform your shoppers that their online transactions are secure and their private information is kept safe.

     

    Adding a well-known trust mark, such as Norton Security, VeriSign, ScanAlert, and Better Business Bureau logos, provides shoppers with comfort and increases conversion rates. You can use these as visual cues on the cart pages.

    Example

    A software provider working with 2Checkout has increased conversion rates by over 5% by simply adding a security logo and a refund guarantee to the cart. Overall, A/B testing their shopping cart delivered a 22% increase in revenue per visitor.

    Conclusion

    When optimizing your purchase funnel, it’s important to first identify the key performance metrics for your software or SaaS business. Then craft an optimization plan specifically designed for each metric.

    Best practices serve as a starting point and foundation, and then you must split-test to optimize cart templates, purchase flow, and offers to maximize revenue for each specific target market.

    The key takeaway is the absence of a one-size-fits-all solution to increase cart conversion rates and decrease cart abandonment. Optimization is an ongoing process and investing in this area can deliver a solid return on your investment.

    Update product

    Overview

    Use the updateProduct method to update the configuration of a subscription plan/product you already configured for your account. 

    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.

    Product

    Required (object)

     

    Use this object to configure your subscription plans/products.

     

    You can update/edit all parameters, except the following:

    • AvangateID
    • ProductType

    Exceptions

    When updating a subscription plan/product, you also update its PricingConfigurations. However, you cannot modify:

    • The pricing configuration CODE.
    • The PricingSchema from DYNAMIC to FLAT or vice versa.  

    Request

    <?php
    
    require ('PATH_TO_AUTH');
    
    $ProductCode = 'NewProdCodeAPI12345';
    
    $jsonRpcRequest = array (
    'jsonrpc' => '2.0',
    'id' => $i++,
    'method' => 'getProductByCode',
    'params' => array($sessionID, $ProductCode)
    );
    
    $myProduct = callRPC($jsonRpcRequest, $host);
    
    $myProduct->ProductName = 'Edited_From_API_Again';
    
    var_dump ($myProduct);
    
    $jsonRpcRequest = array (
    'jsonrpc' => '2.0',
    'id' => $i++,
    'method' => 'updateProduct',
    'params' => array($sessionID, $myProduct)
    );
    
    $updatedProduct = callRPC($jsonRpcRequest, $host);
    var_dump ($updatedProduct);
    
    ?>
    

    Response

    bool(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