Passa al contenuto principale

Non-Payment Authentication (NPA)

La Non-Payment Authentication (NPA) è un flusso di autenticazione 3D Secure 2 (3DS2) che consente al merchant di verificare il titolare della carta e salvare i dati senza effettuare alcun addebito.

A differenza di un pagamento tradizionale, in cui l’autenticazione 3DS e la transazione finanziaria avvengono contestualmente, con NPA il processo si limita alla sola fase di autenticazione.
Il risultato è un token di carta autenticato che è possibile utilizzare per successive transazioni (ad esempio pagamenti ricorrenti o one‑click).

Non-Payment Authentication

Quando usare NPA

NPA è indicato nei seguenti scenari:

  • Tokenizzazione della carta in fase di registrazione, prima di un acquisto
  • Verifica del titolare della carta senza richiedere un pagamento
NPA non addebita importi

Il flusso NPA non genera alcun movimento finanziario.
Per effettuare un pagamento è necessario avviare una nuova transazione.


Configurazione backoffice

Per ricevere i dettagli dell’autenticazione 3DS al termine della transazione, è necessario abilitare il campo ThreeDS nel backoffice Gestpay.
In assenza di questa configurazione, le transazioni NPA funzioneranno correttamente ma non restituiranno le informazioni 3DS.

Percorso di configurazione: Pagina Pagamento → Campi & Parametri → ThreeDS

Impostazioni disponibili:

  • No Display → integrazioni che non utilizzano la pagina di pagamento Fabrick
  • Payment Page → integrazioni che utilizzano la pagina di pagamento Fabrick

Non-Payment Authentication

Per tutte e due le configurazioni è necessario abilitare il campo threeDS nella sezione Campi & Parametri.

Non-Payment Authentication


Flusso di integrazione

Il flusso NPA è supportato da tutte le tipologie di integrazione offerte da Fabrick.

Integrazioni supportate

HPPO
Pay By Link
Lightbox
API Only

Inizializzazione della richiesta NPA

Per avviare un flusso NPA è necessario effettuare, lato server, una chiamata payment/create impostando i seguenti parametri:

  • amount con importo 0 per non addebitare nessun importo.
  • transDetails.type con NPA per indicandare la sistema di processare la transazione come sola autenticazione
  • paymentType con ["CREDITCARD"] per indicare al sistema di presentare solo il form carta sulla pagina di pagamento.
  • requestToken valorizzato con MASKEDPAN.
pagina di pagamento

Il parametro paymentType non è necessario nelle integrazioni API Only, dove il form carta è gestito direttamente dal merchant.

token

Il parametro requestToken consente di ottenere un token della carta autenticata da utilizzare per transazioni future.
Vedi Tokenizzazione.

Request

POST /api/v1/payment/create
Host (sandbox): sandbox.gestpay.net
Host (produzione): ecomms2s.sella.it
Authorization: apikey ****************
Content-Type: application/json
{
"shopLogin": "GESPAY12345",
"amount": "0", //nessun addebito
"currency": "EUR",
"shopTransactionID": "FBK_OrderID",
"paymentType": ["CREDITCARD"], //presentare pagina di inserimento dati carta
"requestToken": "MASKEDPAN", //richiesta token della carta
"transDetails": {
"type": "NPA" //transazione di sola autenticazione
}
}

Response

{
"error": {
"code": "0",
"description": "request correctly processed"
},
"payload": {
"paymentToken": "d3026f8c-88e3-4862-a962-c0fa29e0f266",
"paymentID": "2423879934511",
"userRedirect": null,
"qrCode": null
}
}

Processo autenticazione 3DS

Per tutte le integrazioni hosted, la fase di autenticazione è gestita direttamente da Fabrick.

Nelle integrazioni API Only il merchant deve gestire manualmente la fase di autenticazione effettuando il redirect del buyer verso l’URL restituito dopo l’invio dei dati carta.

Dopo l’invio dei dati carta, il sistema restituisce l’errore 8006 nel campo payload.transactionErrorCode, che indica la necessità di completare l’autenticazione del buyer.

L’URL di autenticazione è disponibile nel campo payload.userRedirect.href.

Dettaglio transazione

Al termine del flusso, Fabrick restituisce l’esito dell’autenticazione e il token della carta.

Per maggiori dettagli consulta la sezione Dettaglio transazione e Notifica del Pagamento della specifica integrazione utilizzata

Per verificare il dettaglio completo dell’autenticazione è possibile utilizzare l’endpoint GET payment/detail, passando il paymentID.

Request

GET /api/v1/payment/detail/{paymentID}
Host (sandbox): sandbox.gestpay.net
Host (produzione): ecomms2s.sella.it
Authorization: apikey ****************
Content-Type: application/json

Response

{
"error": {
"code": "0",
"description": "request correctly processed"
},
"payload": {
"transactionType": "detail",
"transactionResult": "AUTHENTICATED",
"transactionState": "",
"transactionErrorCode": "",
"transactionErrorDescription": "",
"bankTransactionID": "1318",
"shopTransactionID": "",
"shopTransactionID_2": "",
"authorizationCode": "",
"paymentID": "",
"currency": "",
"country": "",
"company": "",
"tdLevel": "",
"threeDS": {
"authenticationResult": {
"authenticationLevel": "2C",
"authenticationStatus": "Y",
"authStatusReason": "",
"challengeResultTransStatus": "",
"XID": "87dc52d7-a059-4afa-8763-bf4a86e3ede9",
"AV": "MTIzNDU2Nzg5MDA5ODc2NTQzMjE=",
"ECI": "05",
"AVAlgorithm": "",
"threeDsVersion": "2.1.0"
},
"transDetails": {
"authData": "",
"authMethod": "02",
"authTimeStamp": "202504281041",
"acsID": "bc7007fe-45fc-471d-999e-d6111951999e"
}
},
"events": null,
"buyer": null,
"risk": null,
"customInfo": null,
"alertCode": "",
"alertDescription": "",
"cvvPresent": "",
"dcc": null,
"maskedPAN": "",
"paymentMethod": "",
"productType": "",
"token": "40G5KMXUQQ613101",
"tokenExpiryMonth": "05",
"tokenExpiryYear": "27",
"tokenDetails": {
"TokenValue": "40G5KMXUQQ613101",
"TokenExpiryMonth": "05",
"TokenExpiryYear": "27",
"TokenProvider": "AXERVE",
"CardDetails": {
"CardSuffix": "3101",
"CardExpiryMonth": "05",
"CardExpiryYear": "27",
"CardHolderName": null
},
"CardAssets": {
"CardArt": {
"Type": null,
"MediaContents": null,
"Height": null,
"Width": null
},
"BrandLogo": {
"Type": null,
"MediaContents": null,
"Height": null,
"Width": null
}
}
},
"fraudPrevention": null,
"automaticOperation": null
}
}

Nella risposta, i campi rilevanti per un flusso NPA sono:

CampoDescrizione
transactionResultEsito dell'autenticazione: AUTHENTICATED / DECLINED
threeDS.authenticationResult.authenticationLevelLivello di autenticazione 3DS
threeDS.authenticationResult.authenticationStatusStato dell’autenticazione
threeDS.authenticationResult.authStatusReasonCodice motivo dell’esito
threeDS.authenticationResult.ECIElectronic Commerce Indicator, valorizzato solo in caso di esito positivo
tokenDetails.TokenValueToken della carta
tokenDetails.TokenExpiryMonth / tokenDetails.TokenExpiryYearScadenza del token
Gestione esiti negativi in NPA

Le transazioni NPA con esito negativo riportano transactionResult: "DECLINED" e valorizzano il dettaglio dell’errore nei campi authenticationStatus e authStatusReason.


Dettaglio autenticazione e gestione errori

authenticationLevel

Il campo authenticationLevel indica il tipo di flusso di autenticazione 3DS applicato alla transazione

ValoreDescrizione
1H3DS 1.0 half — Autenticazione 3DS 1.0 parziale.
1F3DS 1.0 full — Autenticazione 3DS 1.0 completa.
2F3DS 2.0 frictionless — Autenticazione 3DS 2.0 senza interazione del buyer.
2C3DS 2.0 challenge — Autenticazione 3DS 2.0 con challenge completata dal buyer.
2E3DS 2.0 exemption — Autenticazione 3DS 2.0 con esenzione applicata.
OLOne leg — Transazione processata come one leg, autenticazione non richiesta.
TRTRA esterna — Transazione processata come TRA (Transaction Risk Analysis) esterna.
NANo authentication — Nessuna autenticazione eseguita.

authenticationStatus

Il campo authenticationStatus indica l’esito dell’autenticazione.

ValoreDescrizione
YFrictionlessl’issuer ha autenticato con successo il buyer senza richiedere alcuna interazione esplicita. L’autenticazione è considerata completata positivamente e la transazione può proseguire.
CChallengel’issuer richiede la verifica del buyer. Il buyer deve completare l’autenticazione tramite la challenge, utilizzando l’URL fornito nel campo payload.userRedirect.href. L’esito della transazione dipenderà dal risultato della challenge.
NNot Authenticatedl’issuer decide di non concedere l’autenticazione del buyer sulla base delle proprie valutazioni di rischio. In questo scenario la fase di challenge non viene avviata, in quanto l’autenticazione non è autorizzata dall’issuer. La transazione termina quindi con esito negativo.
UAuthentication Could Not Be Performed — l’autenticazione non può essere eseguita a causa di un errore tecnico presso il Directory Server (DS) o l’Access Control Server (ACS). Dal punto di vista del flusso transazionale, l’esito viene gestito come N.
AAttempted to Authenticate — l’autenticazione è stata tentata, ma non completata (ad esempio per limiti tecnici o di canale), pur consentendo di procedere. L’esito viene trattato come Y ai fini del flusso e della liability.
RRejectedl’issuer rifiuta esplicitamente la richiesta di autenticazione. L’autenticazione non viene completata e l’esito è gestito come N, con conseguente esito negativo della transazione.

authStatusReason

Il campo authStatusReason specifica il motivo dell’esito restituito dall’issuer o dall’ACS. In caso di authenticationStatus: N o U, questo campo fornisce un codice numerico che identifica la causa specifica del rifiuto o dell’impossibilità di autenticare.

CodiceDescrizione
01Card authentication failed
02Unknown Device
03Unsupported Device
04Exceeds authentication frequency limit
05Expired card
06Invalid card number
07Invalid transaction
08No Card record
09Security failure
10Stolen card
11Suspected fraud
12Transaction not permitted to cardholder
13Cardholder not enrolled in service
14Transaction timed out at the ACS
15Low confidence
16Medium confidence
17High confidence
18Very High confidence
19Exceeds ACS maximum challenges
20Non-Payment transaction not supported
213RI transaction not supported
22ACS technical issue
23Decoupled Authentication required by ACS but not requested by 3DS Requestor
243DS Requestor Decoupled Max Expiry Time exceeded
25Decoupled Authentication was provided insufficient time to authenticate cardholder
26Authentication attempted but not performed by the cardholder
27Preferred authentication method not supported
28–79Riservati per uso futuro EMVCo (valori non validi fino a definizione EMVCo)
80–99Riservati per uso del Directory Server (DS)

Di seguito un esempio di risposta payment/detail con esito negativo DECLINED, in cui transactionErrorCode e transactionErrorDescription risultano vuoti e la causa dell'errore è leggibile tramite authenticationStatus e authStatusReason:

Request

GET /api/v1/payment/detail/{paymentID}
Host (sandbox): sandbox.gestpay.net
Host (produzione): ecomms2s.sella.it
Authorization: apikey ****************
Content-Type: application/json

Response

{
"error": {
"code": "0",
"description": "request correctly processed"
},
"payload": {
"transactionType": "detail",
"transactionResult": "DECLINED",
"transactionState": "",
"transactionErrorCode": "",
"transactionErrorDescription": "",
"threeDS": {
"authenticationResult": {
"authenticationLevel": "2C",
"authenticationStatus": "N",
"authStatusReason": "19",
"XID": "29797f4c-52c7-404e-8ce5-6e17d946e38d",
"AV": "",
"ECI": null,
"threeDsVersion": "2.1.0"
},
"transDetails": {
"authMethod": "02",
"authTimeStamp": "202504281129",
"acsID": "96be2efb-3f2d-49c5-93f5-c8d7e9ec0107"
}
},
"token": "40G5KMXUQQ613101",
"tokenExpiryMonth": "05",
"tokenExpiryYear": "27"
}
}

In questo esempio authenticationLevel: "2C" indica che per la transazione è stato richiesto il flusso 3DS2 con challenge, questo valore descrive il tipo di flusso e non l’esito dell’autenticazione.

authenticationStatus: "N" indica che l’autenticazione è stata negata, mentre authStatusReason: "19" specifica la causa "Exceeds ACS maximum challenges" — il numero massimo di challenge consentiti dall’ACS è stato superato.