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
// Determined Online PIN support by value of mChipCvmCapability DF8118 in terminal configuration if (OnlinePINRequired == true && OnlinePINSupported == true) { // Prompt for Online PIN and resend the original authorisation request with Online PIN data, stored as part of ExtendedProperties // The original platform transaction reference should be included in a TransactionLinks block with a type of OnlinePinRequiredInitiator } else if (OnlinePINRequired == true && OnlinePINSupported == false) { // Restart transaction with contactless interface disabled } if (FallforwardToContact == true) { // Restart transaction with contactless interface disabled // The original platform transaction reference should be included in a TransactionLinks block with a type of FallForwardToContactInitiator }
Visa
// Determined Online PIN support by value of Terminal Transaction Qualifiers 9F66 returned by card Byte 1 bit 3 // Determine FormFactorIndicator by value of tag 9F6E returned by card if (OnlinePINRequired == true && OnlinePINSupported == true) { // Prompt for Online PIN and resend the original authorisation request with Online PIN data, stored as part of ExtendedProperties // The original platform transaction reference should be included in a TransactionLinks block with a type of OnlinePinRequiredInitiator } else if (OnlinePINRequired == true && OnlinePINSupported == false)) { if ((FormFactorIndicator == null || FormFactorIndicator.Byte[0].Bit[4 thru 0] == 0) && ContactInterfaceSupported == true) { // Restart transaction with contactless interface disabled } if (FormFactorIndicator.Byte[1].Bit[7] == 1 || FormFactorIndicator.Byte[1].Bit[1] == 1) { // Restart transaction with CVM Limit set to 0 } else { // Decline transaction } } if (FallForwardToContact == true)) { if ((FormFactorIndicator == null || FormFactorIndicator.Byte[0].Bit[4 thru 0] == 0) && ContactInterfaceSupported == true) { // Restart transaction with contactless interface disabled // The original platform transaction reference should be included in a TransactionLinks block with a type of FallForwardToContactInitiator } if (FormFactorIndicator.Byte[1].Bit[7] == 1 || FormFactorIndicator.Byte[1].Bit[1] == 1) { // Restart transaction with CVM Limit set to 0 // The original platform transaction reference should be included in a TransactionLinks block with a type of FallForwardToContactInitiator } else { // Decline transaction } }
Amex
if (OnlinePINRequired == true) { // Determined ExpressPay kernel by value of Enhanced Reader Capabilities 9F6E returned by card Byte 4 bits 2 & 1 if (ExpressPayKernelVersion >= 4.0) { // Prompt for Online PIN and resend the original authorisation request with Online PIN data, stored as part of ExtendedProperties // The original platform transaction reference should be included in a TransactionLinks block with a type of OnlinePinRequiredInitiator } else { // Restart transaction with contactless interface disabled } } if (FallForwardToContact == true) { // Restart transaction with contactless interface disabled // The original platform transaction reference should be included in a TransactionLinks block with a type of FallForwardToContactInitiator }
Discover/Diners
if (OnlinePINRequired == true) { // Determined Online PIN Support by value of Terminal Transaction Qualifiers 9F66 in Terminal configuration Byte 1 bit 3 if (OnlinePINSupported == true) { // Prompt for Online PIN and resend the original authorisation request with Online PIN data, stored as part of ExtendedProperties // The original platform transaction reference should be included in a TransactionLinks block with a type of OnlinePinRequiredInitiator } else { // Restart transaction with contactless interface disabled } } if (FallForwardToContact == true) { // Restart transaction with contactless interface disabled // The original platform transaction reference should be included in a TransactionLinks block with a type of FallForwardToContactInitiator }