Product 3 Processing

Visa's Commercial Enhanced Data Program (CEDP) is replacing the Level 2 and Level 3 programs and interchange rates with new Product 3 interchange rates. By including enhanced data with your payments you could qualify for decreased processing rates. The required data for Product 3 rates remain the same as Level 3 data that is being replaced.

CEDP will now be analyzing and validating the data provided using an AI-based monitoring and validation system that will help verify merchants for the program. It can take up to 3 months for a merchant to become verified and start seeing the lower rates.

CEDP Qualification and Enhanced Data Structure

The primary objective of this update is to enable transaction eligibility for the Commercial Enhanced Data Program (CEDP) and to secure Level 3 interchange rates, which offer significantly lower processing fees for corporate, government and business transactions.

Previously, shipping information was retrieved generically from the Customer object a legacy implementation that remained underutilized across most integrations. This update introduces a decoupled architecture that separates shipping logic into a dedicated object and implements a granular LineItems breakdown. These changes ensure the data precision required by payment processors to meet Level 3 compliance standards.

Request Data Structure

The developer must integrate two new structures within the payment request payload:

LineItems Object (Array)

Represents the granular breakdown of products. A maximum of 200 items is permitted per request.

FieldTypeRequiredDescription
NameStringYesProduct name (Max 250 characters).
CodeStringYesSKU or UPC identifier (Max 50 characters).
AmountDecimalYesUnit price of the item
QuantityIntegerYesNumber of items purchased
TaxAmountDecimalYesTotal tax amount applied to the item.
UnitOfMeasureStringYesMeasurement unit (e.g "oz", "meters", "unit") (Max 12 characters)
DiscountAmountDecimalNoDiscount amount applied to the item
CommodityCodeStringNoOptional. Standardized code that should be provided that categorizes the item. This code is not required to receive the Product 3 interchange rates, but you're acquiring bank may eventually require them. Sources include but are not limited to UNSPSC, NAICS, NAPCS.

Shipping Object

This object is mandatory for processing CEDP and Level 3 data when the order involves physical fulfillment.

FieldTypeRequiredDescription
AmountDecimalYesTotal shipping cost applied to the transaction.
DestinationPostalCodeStringYesDestination ZIP/Postal code (Max 10 characters)
DestinationCountryCodeStringYes3-digit ISO 3166-1 numeric country code of the destination.
OriginalPostalCodeStringYesOrigin ZIP/Postal code of the shipment (Max 10 characters).

Amount Validation Logic

To ensure transaction acceptance under the level 3 (product 3) schema, all amounts must be mathematically precise. The system performs the following server-side validations:

Line Item Total (Per Item)

The total for each individual line item is calculated as follows:

Transaction Grand Total Validation

The primary Amount field of the payment request must be exactly equal to the sum of all components:


🚧

Any discrepancy, even by a single cent, will result in a validation error and the transaction will fail to qualify for discounted interchange rates.

Required Reference Fields

At least one of the following reference identifiers must be present in the request payload:

  • OrderId
  • InvoiceNo
  • PONO (Purcharse Order Number)
  • InvoiceId

Architecture and Persistence

The implementation is orchestrated though the following system components:

Data Flow

  • Data enters via MakePaymentController and is subsequently processed by the PaymentService.
  • Information is mapped to the OrderInfo object within the XenonPaymentAdapterBase class for transmission to the Xenon Gateway.
  • Currently, Level 3 (Product 3) data transmission to Xenon is exclusively enable for Stripe and Worldpay processors.

Database Layer

Persistence is managed via SQL Server using NHibernate as the ORM

  • PaymentInfo Table: New columns have been appended to persist the transaction's global shipping metadata.
  • PaymentLineItem Table: A new table has been implemented to store granular item details.