Hosted Payment Pages are no longer available
To accept payments through an Adyen-hosted page, use our Hosted Checkout.
This page is for the classic Hosted Payment Pages (HPP) integration, which has reached end-of-life. We are no longer processing transactions though HPP.
Level 2 or Level 3 (L2/L3) data provides commercial shoppers with additional information about purchases on their card statements. It allows companies to track how much is spent on their corporate cards where a single card may have multiple users.
Companies can also track the amount of sales tax to pay or reconcile transactions using a unique customer code. Transactions submitted with L2/L3 data that meet requirements have lower interchange rates.
Code example
Below is a code example for submitting L2/L3 data in an authorisation using the Adyen Hosted Payment Pages (HPP):
<?php /* This PHP code provides a payment form for the Adyen Hosted Payment Pages */ /* account details $skinCode: the skin to be used $merchantAccount: the merchant account we want to process this payment with. $sharedSecret: the shared HMAC key. */ $skinCode = "[skin code e.g. GBIMwmE4]"; $merchantAccount = "[merchant Account e.g. TestCompanyCOM]"; $hmacKey = "[HMAC key e.g. D21EB2ASD44BA234C8A0AF13CF0BCACA3D4727C6162630D712C857124B213270]"; /* payment-specific details */ $params = array( "merchantReference" => "SKINTEST-1435226439255", "merchantAccount" => $merchantAccount, "currencyCode" => "USD", "paymentAmount" => "1190", "sessionValidity" => "2020-07-11T07:07:13-08:00", "shopperLocale" => "en_GB", "skinCode" => $skinCode, "brandCode" => "", "shopperEmail" => "test@adyen.com", "shopperReference" => "YOUR_UNIQUE_SHOPPER_ID_IOfW3k9G2PvXFu2j", // L2/l3 Data lines "enhancedSchemeData.destinationPostalCode" => "94025-1452", "enhancedSchemeData.shipFromPostalCode" => "94025-1452", "enhancedSchemeData.destinationStateProvinceCode" => "CA", "enhancedSchemeData.destinationCountryCode" => "US", "enhancedSchemeData.freightAmount" => "0", "enhancedSchemeData.dutyAmount" => "0", "enhancedSchemeData.orderDate" => "290518", "enhancedSchemeData.customerReference" => "100001", "enhancedSchemeData.totalTaxAmount" => "190", "enhancedSchemeData.itemDetailLine1.commodityCode" => "82101603", "enhancedSchemeData.itemDetailLine1.description" => "Ads", "enhancedSchemeData.itemDetailLine1.productCode" => "Ads", "enhancedSchemeData.itemDetailLine1.quantity" => "1", "enhancedSchemeData.itemDetailLine1.unitOfMeasure" => "EAC", "enhancedSchemeData.itemDetailLine1.unitPrice" => "1000", "enhancedSchemeData.itemDetailLine1.totalAmount" => "1190", ); /* process fields */ // The character escape function $escapeval = function($val) { return str_replace(':','\\:',str_replace('\\','\\\\',$val)); }; // Sort the array by key using SORT_STRING order ksort($params, SORT_STRING); // Generate the signing data string $signData = implode(":",array_map($escapeval,array_merge(array_keys($params), array_values($params)))); // base64-encode the binary result of the HMAC computation $merchantSig = base64_encode(hash_hmac('sha256',$signData,pack("H*" , $hmacKey),true)); $params["merchantSig"] = $merchantSig; ?> <!-- Complete submission form --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Adyen Payment</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> </head> <body> <form name="adyenForm" action="https://test.adyen.com/hpp/select.shtml" method="post"> <?php foreach ($params as $key => $value){ echo ' <input type="hidden" name="' .htmlspecialchars($key, ENT_COMPAT | ENT_HTML401 ,'UTF-8'). '" value="' .htmlspecialchars($value, ENT_COMPAT | ENT_HTML401 ,'UTF-8') . '" />' ."\n" ; } ?> <input type="submit" value="Submit" /> </form> </body> </html>