Skip to main content

Fiscal compliance (for merchants in/selling in US only)

​This guide provides an overview of the financial compliance regulations that apply to merchants in the United States. It contains details about the 1099-K, W8 and W9 forms that merchants with a legal entity in the US or selling in the US are required to fill in for submission to the IRS.

 

Shipping method

Overview

The object below is returned directly or within a successful response from the following API requests:

Search shipping method

Shipping method object

Parameters   Type/Description
Items   Array of objects
      Contains shipping methods objects.
  ShippingMethod

Shipping method object.

Details below.

          Name String
      Shipping method name that you define when creating the method.
          Code String
      System-generated identified for the shipping method.
          TrackingURL String
      URL assigned to the shipping method. Provided to your customers that purchase physical products.
          BasePrice String
      Base fee attached to the shipping method, that will be charged to customers when shipping method is available in cart, regardless of their country, product value or weight.
          Currency String
      Currency in which the base fee is expressed. Example: 'USD'.
           Active Boolean
     

Possible values:

  • TRUE - if shipping method is active.
  • FALSE - if shipping method is inactive.
    Availability Strings
     

Defined where the shipping method is active.

Possible values:

  • ALL - all delivery countries.
  • CUSTOM - selected delivery countries.
  • HOME - only your home country.
    Countries Array of objects
      Countries where the shipping method applies.
                  CountryCode String
                  Two-letters country code.
                  Surcharge String
      Surcharge defined for each country.
    Surcharge Array of objects
      Additional fee assigned to the shipping method.
                 Type String
                 

Order property based on which the surcharge is added.

Possible values:

  • PRICE -  surcharge is based on total order amount.
  • WEIGHT -  surcharged is based on total order weight.
                 From Float
                  Lower interval limit.
                 To Int
      Higher interval limit.
                  Amount Int
      Surcharge defined based on order price/weight.
                 ApplyTo String
     

Possible values:

  • interval - surcharge is added for a given interval. Example: from 1 kg to 4kg.
  • unit - surcharge is added for each additional unit. Example: $5 for each unit over 4 kg.
  Pagination Object
      Pagination filters.
    Page Int
      Number of pages used for displaying the results.
    Limit Int
      Number for limiting the results.
    Count Int
      Total number of results.

 

Convert a trial

Overview

Use the convertTrial method to convert a trial to a paid subscription. In the eventuality of a conversion failure, you can use convertTrial again for the same trial subscription only after you let 24 hours pass since the initial attempt. The 2Checkout system attempts to automatically convert trials before they expire to full subscriptions unless you made an attempt that failed less than 24 hours before the scheduled expiration deadline.

In case the trial conversion fails due to a transaction issue, the 2Checkout system sends unfinished payment follow-up emails to customers, provided that you set up lead management for your account.

Parameters

Parameters Type/Description

SubscriptionReference

Required (string)

 

Unique, system-generated subscription identifier of the trial that you convert to a paid subscription. The unique identifier from the 2Checkout system:

  • Must belong to an active trial subscription with the recurring billing system (auto-renewal) enabled.
  • The initial order placed to access the trial subscription must be finalized (status Finished).

Note: This method does not work for canceled and/or expired trial subscriptions.

 

2Checkout charges customers using the payment data attached to the trial subscription. In the case of credit/debit cards, if customers update their payment information in myAccount or if you update these details on behalf of your subscribers, the 2Checkout system uses the latest card info provided to charge subscription renewals.

ExtendSubscriptionFromPaymentDate

Optional (boolean)

 

true = Set the moment of the conversion as the start date of the full subscription. 

Example: A 7-day trial purchased on October 29 for a monthly subscription converted on October 30 with $ExtendSubscriptionFromPaymentDate = true; features the following Billing cycle expiration: Nov 30, 2013, and 2Checkout scraps the initial trial expiration date November 5.

 

false = Set initial trial expiration deadline as the full subscription start date. 

Example: A 10-day trial purchased on October 29 for a monthly subscription converted on October 30 with $ExtendSubscriptionFromPaymentDate = false; features the following Billing cycle expiration: December 9, with the first month period of the subscription added to the trial lifetime stretching until November 8.

 

Can be NULL. If not sent, the default value is false.

Response

Parameters Type/Description

Boolean

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

Request


<?php

require ('PATH_TO_AUTH'); 
 
$SubscriptionReference = 'BF44555C6C';

$ExtendSubscriptionFromPaymentDate = true; //false can also be used if you want the subscription start date to be the moment when the trial was set to initially expire.

$jsonRpcRequest = array (
'method' => 'convertTrial',
'params' => array($sessionID, $SubscriptionReference, $ExtendSubscriptionFromPaymentDate),
'id' => $i++,
'jsonrpc' => '2.0');

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

 

License Change Notification (LCN)

Overview

License Change Notification (LCN) works as a message service generating automatic subscription notifications for your 2Checkout account. Use the notifications to process subscription data into your own management systems by synchronizing it with 2Checkout account events. 2Checkout generates notifications for subscription update and expiration events (including past-due notifications).

How can I use LCN?

Use LCN to automate back-end functions for your services, including but not limited to:

  • Creating end-user accounts
  • Providing access to acquired services
  • Manage subscriptions
  • Fulfilling purchases
  • Engaging subscribers
  • Converting trials to paid subscriptions
  • Cutting access to a delinquent account

Webhook asynchronicity

2Checkout’s webhooks (IPN and LCN) operate asynchronously

How does LCN work?

  1. Create one or multiple LCN listener pages on your website. 2Checkout sends LCNs to publicly accessible servers.
  2. Configure the LCN settings of your 2Checkout account to point to the URLs of your default/preferred listener pages. Our system performs a GET request against the URL you fill in and expects an HTTP 200 code as a response. Make sure that your URL can be queried via a GET request from our webserver  IPs.
  3. Set up multiple URLs if you require more listener pages, such as in testing scenarios in which you don’t want to use your default LCN listener. 
  4. 2Checkout sends subscription notifications to the endpoints you defined when subscribers change specific subscription details, using secure (HTTPS) POST.
  5. 2Checkout uses an HMAC_SHA signature to validate the HTTPS POST. Calculate the signature using data sent and your 2Checkout account’s secret key, following the instructions included in this article.
  6. Your custom LCN listener scripts consume the notifications and process the info received.
  7. Configure your LCN listener to output a read receipt confirmation on the listener page after receiving a valid LCN message. This article includes guidance on how to generate the confirmation.
  8. In the absence of a confirmation from one of your LCN listeners, 2Checkout continues to send notifications to that endpoint, according to the failure retry process, until you provide a valid response.
  9. The 2Checkout system regularly checks the status of subscriptions to identify expired items and modifications. 2Checkout then sends notifications for expirations as well as for updates that occurred in the last 24 hours prior to the moment when it performs the check. 2Checkout does not re-send notifications for the same event unless the status of the subscription changes or it identifies additional modifications.

Set up the default LCN URL

  1. Log into your 2Checkout account.
  2. Navigate to Dashboard → Integrations → Webhooks and API.
  3. Click on the LCN Settings tab.
  4. Click on the Edit button to edit an existing URL corresponding to your default LCN listener or click on the Add LCN URL button to add a URL corresponding to your default LCN listener in the LCN URL field.
  5. Save your settings by clicking on the Update button at the bottom of the page.
  6. 2Checkout checks the validity of the URLs in terms of access to ensure that notifications reach your LCN listener without any issues.
   
All merchants are strongly advised to migrate to SHA2/SHA3. We will stop supporting the MD5 algorithm in our platform on the 15th of August, 2024.
For more details, check the Migration guide from MD5 to SHA2/SHA3 algorithm documentation.  

Set up multiple LCN URLs

You can set up multiple endpoints for your LCN notifications, for scenarios in which you have multiple Internal Systems that require receiving this information. You can set up eight (8) URLs for your notifications.

Navigate to LCN settings under Integrations → Webhooks and API, in your Merchant Control Panel Dashboard. Select the LCN settings tab and click on the Add LCN URL button to create an additional URL configuration for your notifications.

To find out more about the NOTIFICATION_URL functionality, read more here.

Debug LCN

To view or debug LCN notifications during the integration phase, place TEST orders.

Alternatively, search for specific subscriptions in the Subscriptions area. On the subscription details page, you have the option to resend notifications. You can also see how many LCN notifications have been sent so far for a subscription. Opt to reissue the LCN for debugging and 2Checkout re-generates and re-sends the LCN, but also displays a copy of the content sent in the control panel.

Secure your LCN script 

For security reasons, 2Checkout recommends that you restrict access to the LCN script. 

Multi-product promotions

Overview

Multi-product promotions allow you to offer percentage-based discounts to your shoppers, based on the number of unique products added to the shopping cart. They apply automatically as long as the order includes the products assigned to the promotion.

How to configure a multi-product promotion

  1. Enter a promotion title and description. Promotion names are visible to your shoppers if the order meets the promotion criteria.
    • Add localized promotion names for any of the supported languages. The 2Checkout shopping cart automatically displays localized promotion names based on the selected shopping cart language.
  2. Define the time interval when you want the promotion to be active. To start a promotion as soon as you activate it, leave the start date empty. If you don't set an end date, the promotion will stop when the maximum number of orders has been reached or will continue to run if the maximum number of orders is set to unlimited.
  3. You can restrict promotions to a specific number of orders, or set them to run indefinitely
  4. Define a minimum order value threshold. Choose whether to apply the promotion to any order or only to orders exceeding a certain value (including taxes). To set a threshold, choose Custom, define the threshold and select the default currency. Orders using currencies without a threshold are automatically converted to the default threshold currency, using exchange rates applicable at the moment of purchase. 
  5. Select whether or not to activate the promotion as soon as you save it.
  6. Configure the discount depending on the number of unique products added to the shopping cart. Click Add rule, enter a number of unique products to be detected in the cart and set the corresponding discount. You can add multiple scenarios for different numbers of unique products. If you define multiple promotions or scenarios, 2Checkout automatically applies the one with the highest discount, provided that the order meets the promotion criteria.
  7. Assign products to the promotion. Multi-products promotions only apply to products in the shopping cart that are not subject to another regular promotion or cross-selling discount at the time of purchase!
  8. Save the promotion when you're done configuring it.

Transition Guide for 3D Secure

Overview

Under the Payment Services Directive 2 (PSD2) initiative, in order to prevent ever-evolving fraud methods, Payment Service Providers (PSPs), such as 2Checkout, must apply extra security steps to implement Strong Customer Authentication (SCA) and further protect the confidentiality of consumers’ data.

For more details about 3D Secure support in API, check the Payment Services Directive 2 (PSD2) article. 

You can also read the resources below to have a better understanding of what is PSD2 and what it entails:

Impact

All merchants using the Growth, Standard, 2Sell, 2Subscribe, 2Monetize and Enterprise packages are not affected.

If your integration is using https://2checkout.com/checkout/api/1/ endpoint to trigger payments, then you need to follow the transition process below.

3D Secure (3DS) support added to our Payment API

For card-based payments, this resulted in the implementation of 3D Secure version 2 (3DS2 aka EMV 3DS). 3D Secure has been employed to secure online card transactions since 2001, but now a new version has been developed to meet the PSD2 SCA requirements. Basically, to be able to accept payments from the world’s largest card networks (Visa, Mastercard, Amex,etc.), any merchant will need to have implemented 3D Secure version 2 for their online store. Initially, this will apply mainly to EU-based merchants and their clients. Outside the EU, the current implementation pace of EMV 3DS is considered slow and less dominant.

The new flow for 3DS transactions in the Payment API is asynchronous and requires that you redirect the buyer to an authentication URL that will be returned in the authorization response, and wait for the buyer and sale parameters to be returned to a callback URL on your server.

What happens if I do not update my integration

If no change is done to your API integration, the Payment API will continue to work as normal, but you will start to notice a higher rate of declines as the processors will not be able to continue the transaction if the shopper’s card requires 3DS authentication.

Set up Callback URL

To enable 3DS support in your integration, you need to set up an endpoint on your server where the 2Checkout system will return the shopper and order parameters when the order is completed. The return will be a GET request and will include all standard 2Checkout Return Process parameters: total, order_number, invoice_id, merchant_order_id, and key parameter, which will contain the MD5 hash to validate the passback. 

MD5 Hash Validation

The MD5 hash is calculated as: UPPERCASE(MD5_ENCRYPTED(INS secret word + seller id + order_number + total)).

The INS secret word can be found in your Merchant Control Panel, under Integrations → Webhooks and APIs → Secret word section. The seller id is your numerical merchant code/seller ID. The order_number is the order number for the sale returned on the passback. The total is the numerical value for the total amount of the sale. Each of our community-supported libraries provides a binding to validate the hash.

Pass Callback URL in the authorization request

To let the 2Checkout system know that you are ready to handle the new 3DS flow, a new parameter needs to be added - returnUrl - in the root of the JSON payload on your authorization (create sale) API call. The returnUrl value needs to be the absolute path of your callback URL.

Authorization Request Sample

{
    "sellerId": "your-seller-id",
    "privateKey": "your-private-key",
    "merchantOrderId": "example-custom-id-123",
    "token": "client-side-token",
    "currency": "USD",
    "total": "1.11",
    "billingAddr": {
        "name": "Testing Tester",
        "addrLine1": "123 Test St",
        "city": "Columbus",
        "state": "Ohio",
        "zipCode": "43123",
        "country": "USA",
        "email": "example@2co.com",
        "phoneNumber": "5555555555"
        },
    "returnUrl": "https://www.your-site.com/return.php"
}

If the card needs 3D Secure authentication for the payment, then the API will return an HTTP status '400'. In the body of the response, under the exception object, the errorCode value will be ‘700’ and the errorMsg value will contain the URL where the customer needs to be redirected for the authentication of the payment.

API Response Sample

{
    "validationErrors": null,
    "exception": {
        "errorMsg": "https://api.2checkout.com/5.0/scripts
/credit_card/authorize?avng8apitoken=77fdf3f03b265840",
        "httpStatus": "400",
        "exception": false,
        "errorCode": "700"
    },
    "response": null
}

Once the shopper completes the 3DS authentication process, they will be redirected to your callback URL along with the order parameters. If the 3DS authentication fails, they will be returned to the 2Checkout cart so that they can verify their payment method and re-attempt the payment.

 

Multiple partial refunds

Overview

2Checkout supports multiple partial refunds for the same order. This feature enables you to partially reimburse order costs on multiple occasions to deal with more than one refund incident/dispute.

Scenarios

  • Pay back the money for a single product in a multi-offering order, and then refund the costs of another product, if the customer requests it;
  • Refund part of the value of an order such as in scenarios in which you charge customers for usage, and add a subsequent partial refund if needed;
  • Refund the total value of an order using several partial refunds until the entire costs are reimbursed.

Requirements

Multiple refunds work only for orders paid with one of the following methods:

  • VISA
  • MasterCard
  • Discover
  • AMEX
  • PayPal

Please contact 2Checkout directly if this feature is not available for your account.

Availability

  1. You can place a second partial refund only if there are no existing unprocessed refunds (pending). As long as all previous partial refunds for an order were processed, you can place a new request to reimburse a partial amount of the costs paid by the customer.
  2. The value of the partial refund you request needs to be equal or smaller than the amount of money paid by the customer, subtracting any costs already reimbursed. For example: for a $100 order for which you already reimbursed $40, the value of the second partial refund request cannot exceed $60.

Partial refunds

In addition to Total refunds (which return 100% of the transaction amount to the buyer) you can also issue Partial refunds, namely reimburse only part of the transaction amount paid for Completed/Finished orders, with the system automatically calculating the taxes for the repayment. This feature gives you full flexibility to control in detail the reimbursement parameters for an order. The new Partial refund functionality is an upgrade to the old Advanced refund option, which required you to specify all the details of a partial reimbursement in the comments section.

To initiate a Partial refund, follow the steps below.

  1. Go to Orders & customers -> Order search.
  2. Select the eStore orders tab.
  3. Search for the order you want to reimburse (the status must be Completed/Finished).
  4. Click the item's reference number.
  5. Click Request refund.
  6. Choose to return only a part of the transaction costs by selecting the Partial refund option.

Use the feature to provide refunds for a limited quantity of products or only for specific items in an order in scenarios involving orders containing multiple units/products. The repayment amount per unit (including taxes) supports values from the bare minimum, which cannot be 0 or a negative number, to the maximum, which cannot be larger than the price paid for the product/number of products being refunded.

You can repay part of the money your customers spent on product subscriptions and taxes (calculated automatically by the system), and DIS (Download Insurance Service) costs. Use the comments section to detail special refund requests.

Note: Make sure to configure all the details of the partial reimbursement, including the products and the number of units involved, but also the amount to be refunded, whether or not to re-use keycodes / cancel subscriptions (disable licenses), and enter the Cancellation reason or any other comments for the cancellation before clicking the Request refund button. Prior to the introduction of Partial refunds, your customer support representatives could only disable all subscriptions/licenses for a refunded order or none at all.

Please note that the amount you set for the refund will be the final sum sent back to the customer, including taxes.

Multiple partial refunds

To refund an order follow these steps:

  1. Go to Orders & customers -> Order Search
  2. Search for the order you want to refund. Note: The order needs to be Finished for a refund to be processed.
  3. Click the reference number to access the Order details page.
  4. Click Request refund.
  5. Select Partial refund and provide the parameters for the reimbursement including the costs which will be returned to the customer.
  6. Wait for the refund to be approved and the money to be reimbursed.
  7. After the refund request is processed, repeat steps 1 through 5 to request an additional reimbursement.

Instant Payment Notification (IPN) for refunds

Instant Payment Notifications are generated and sent for the first partial refund as well as for subsequent refunds processed by the 2Checkout system.

Make sure to update your system to handle multiple IPN notifications in scenarios involving multiple refunds.

Notifications sent by 2Checkout will show REFUND as the order status and the amount of money reimbursed (as a negative number).

Multiple partial refunds through Instant Refund Notification IRN

You can place multiple partial refunds through Instant Refund Notification (IRN). It's mandatory that you specify the value that will be reimbursed using the AMOUNT for partial refunds. Note: In the case of IRN refunds, the value for AMOUNT must match that of the unit price multiplied with the quantity refunded.

For example, if a customer purchased 10 units of Subscription A which cost $99 each, and wants a refund for 2 subscriptions, you to match the value refunded ($198) with the unit price of Subscription A multiplied by the quantity for which you're reimbursing the customer.

Total refunds

Total refunds are available only for orders that haven't passed through the refund process previously.

Total refund limitations:

  • Only a single total refund can be approved per order. A second total refund means that 2Checkout would repay the customer twice the sum of money paid for the order, which is impossible.
  • If a partial refund was already approved, and the money returned to the customer, a subsequent total refund is no longer possible, considering that the value of the order and implicitly of the total refund would exceed the money paid by the customer initially, from which at least a partial refund was already subtracted.

Add coupon

Overview

Use the addPromotionCoupon method to add single or multiple coupons to a promotion.

Parameters

Parameter Type/Description

sessionID

Required (string)

 

Output of the Login method.

promotionCode

Required (string)

 

The code corresponding to the promotion that you want to add coupons to.

promotionCoupon

Required (object)

 

type

Required (string)

 

 

Coupon type. Available values:

  • SINGLE, use in conjunction with Code
  • MULTIPLE, use in conjunction with Codes

 

Code/Codes

Required (string / array of strings)

 

 

Coupon code (for SINGLE) or array of coupon codes (for MULTIPLE).

Response

Parameter Type/Description
promotionCoupon Object

Request

<?php

require ('PATH_TO_AUTH');

// Promotion code corresponding to the promotion you want to add coupons to
$promotionCode = '';

// Define single coupon object
$promotionCoupon = new stdClass;
$promotionCoupon->Type = 'SINGLE';
$promotionCoupon->Code = 'YOUR_CODE_HERE';

// Define multiple coupon object
$promotionCoupon = new stdClass;
$promotionCoupon->Type = 'MULTIPLE';
$promotionCoupon->Codes = ['YOUR_CODE_1', 'YOUR_CODE_2'];

try {
    $updatedPromotion = $client->addPromotionCoupon ($sessionID, $promotionCode, $promotionCoupon);
}

catch (SoapFault $e) {
    echo "UpdatedPromotion: " . $e->getMessage();
    exit;
}

var_dump("UpdatedPromotion", $updatedPromotion);

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