Table of Contents
Overview
This article covers EMV Card Present Direct Connect SCA indicators and how to proceed in instances a transaction is flagged for SCA.
What Are SCA Indicators?
Card issuers in the European Union and European Economic Area (EU/EEA) will soon be required to comply with updated PSD2, Strong Customer Authentication (SCA) regulatory requirements. For contactless transactions, this requires two-factor authentication when 150 Euros or 5 consecutive contactless transactions have been completed since the card was last authenticated. A decline under these conditions is known as a soft decline and should be re-attempted.
Depending on the card scheme, the issuer may request the card be further authenticated by re-submitting the transaction with Online PIN and/or as a Contact transaction and is flagged to the integration via an SCA indicator.
SCA Indicators
Fall Forward
The transaction will be declined with a FallForwardToContact
indicator in the response object with a value of true
(boolean). This can be returned in the response object during a contactless authentication. The integration should restart the transaction with only the EMV contact interface enabled, and include the original platform transaction reference in a TransactionLinks block with a type of FallForwardToContactInitiator
.
Online PIN Required
The transaction will be declined with a OnlinePinRequired
indicator in the response object with a value of true
(boolean). This can be returned in the response object during a contactless authentication. The integration should prompt for PIN entry and re-submit the authentication with the PIN block present, and include the original platform transaction reference in a TransactionLinks block with a type of OnlinePinRequiredInitiator
.
SCA Flow
Mastercard
// Determine Online PIN support from mChipCvmCapability (DF8118) in terminal configuration // Check if Online PIN is required and supported if (OnlinePINRequired == true && OnlinePINSupported == true) { // Prompt for Online PIN and resend the original authorization request with Online PIN data // Store the Online PIN data as part of ExtendedProperties // Include the original platform transaction reference in a TransactionLinks block with type OnlinePinRequiredInitiator } else if (OnlinePINRequired == true && OnlinePINSupported == false) { // Restart the transaction with contactless interface disabled } // Check if Fallforward to Contact is true if (FallforwardToContact == true) { // Restart the transaction with contactless interface disabled // Include the original platform transaction reference in a TransactionLinks block with type FallForwardToContactInitiator }
Visa
// Determine Online PIN support from Terminal Transaction Qualifiers (tag 9F66, Byte 1, Bit 3) // Determine Form Factor Indicator from tag 9F6E returned by the card // Check if Online PIN is required and supported if (OnlinePINRequired == true && OnlinePINSupported == true) { // Prompt for Online PIN and resend the original authorization request with Online PIN data // Store the Online PIN data as part of ExtendedProperties // Include the original platform transaction reference in a TransactionLinks block with type OnlinePinRequiredInitiator } else if (OnlinePINRequired == true && OnlinePINSupported == false) { // Check if Form Factor Indicator is null or indicates a condition and if contact interface is supported if ((FormFactorIndicator == null || FormFactorIndicator.Byte[0].Bits[4:0] == 0) && ContactInterfaceSupported == true) { // Restart the transaction with contactless interface disabled } // Check specific bits in the second byte of the Form Factor Indicator if (FormFactorIndicator.Byte[1].Bit[7] == 1 || FormFactorIndicator.Byte[1].Bit[1] == 1) { // Restart the transaction with CVM (Cardholder Verification Method) Limit set to 0 } else { // Decline the transaction } } // Check if Fall Forward to Contact is true if (FallForwardToContact == true) { // Check if Form Factor Indicator is null or indicates a condition and if contact interface is supported if ((FormFactorIndicator == null || FormFactorIndicator.Byte[0].Bits[4:0] == 0) && ContactInterfaceSupported == true) { // Restart the transaction with contactless interface disabled // Include the original platform transaction reference in a TransactionLinks block with type FallForwardToContactInitiator } // Check specific bits in the second byte of the Form Factor Indicator if (FormFactorIndicator.Byte[1].Bit[7] == 1 || FormFactorIndicator.Byte[1].Bit[1] == 1) { // Restart the transaction with CVM (Cardholder Verification Method) Limit set to 0 // Include the original platform transaction reference in a TransactionLinks block with type FallForwardToContactInitiator } else { // Decline the transaction } }
Amex
// Determine if Online PIN is required if (OnlinePINRequired == true) { // Determine ExpressPay kernel version by value of Enhanced Reader Capabilities (tag 9F6E, Byte 4, Bits 2 & 1) if (ExpressPayKernelVersion = 4.0) { // Prompt for Online PIN and resend the original authorization request with Online PIN data // Store the Online PIN data as part of ExtendedProperties // Include the original platform transaction reference in a TransactionLinks block with type OnlinePinRequiredInitiator } else { // Restart the transaction with contactless interface disabled } } // Check if FallForward to Contact is true if (FallForwardToContact == true) { // Restart the transaction with contactless interface disabled // Include the original platform transaction reference in a TransactionLinks block with type FallForwardToContactInitiator }
Discover/Diners
// Determine if Online PIN is required if (OnlinePINRequired == true) { // Determine Online PIN support by value of Terminal Transaction Qualifiers (tag 9F66, Byte 1, Bit 3) in terminal configuration if (OnlinePINSupported == true) { // Prompt for Online PIN and resend the original authorization request with Online PIN data // Store the Online PIN data as part of ExtendedProperties // Include the original platform transaction reference in a TransactionLinks block with type OnlinePinRequiredInitiator } else { // Restart the transaction with contactless interface disabled } } // Check if Fallforward to Contact is true if (FallForwardToContact == true) { // Restart the transaction with contactless interface disabled // Include the original platform transaction reference in a TransactionLinks block with type FallForwardToContactInitiator }