3-D Secure
3-D Secure (Three Domain Secure) est le protocole d'authentification standard de l'industrie pour les transactions par carte en ligne. Il ajoute une couche de securite supplementaire en exigeant que les titulaires de carte verifient leur identite avant le traitement du paiement.
Avantages
- Protection contre la fraude - Transfert de responsabilite pour les transactions frauduleuses a l'emetteur de la carte
- Conformite SCA - Respectez les exigences d'authentification forte du client
- Confiance amelioree - Renforcez la confiance des clients avec des transactions securisees
- Authentification flexible - Prise en charge des flux sans friction lorsque possible
Authentification forte du client (SCA)
Selon la reglementation PSD2 en Europe, l'authentification forte du client exige une verification utilisant au moins deux des trois facteurs :
| Facteur | Type | Exemples |
|---|---|---|
| Connaissance | Quelque chose que vous savez | Code PIN, mot de passe, question de securite |
| Possession | Quelque chose que vous avez | Telephone, lecteur de carte, token |
| Inherence | Quelque chose que vous etes | Empreinte digitale, reconnaissance faciale, voix |
Versions 3-D Secure
3-D Secure 2
Le standard actuel, offrant :
- Authentification sans friction - Decisions basees sur le risque sans interaction client
- Optimisation mobile - Meilleure experience sur les appareils mobiles
- Echange de donnees enrichi - Plus de contexte pour les decisions de l'emetteur
- Gestion des exemptions - Demandez des exemptions pour les transactions a faible risque
3-D Secure 1
Version heritee en cours de suppression. Les nouvelles integrations doivent utiliser 3DS2.
Flux d'authentification
Flux sans friction
Pour les transactions a faible risque, l'authentification se fait en arriere-plan :
Client → Marchand → Plateforme → Emetteur (evaluation du risque) → Approuve
Aucune action supplementaire du client requise.
Flux avec challenge
Pour les transactions a risque plus eleve, le client doit s'authentifier :
Client → Marchand → Plateforme → Emetteur → Challenge (OTP/Biometrique) → Approuve
Implementation
Page de paiement hebergee
3-D Secure est gere automatiquement. Incluez simplement les proprietes requises :
{
"order": {
"amountOfMoney": {
"amount": 2980,
"currencyCode": "EUR"
},
"customer": {
"billingAddress": {
"countryCode": "NL",
"city": "Amsterdam"
},
"contactDetails": {
"emailAddress": "customer@example.com"
}
}
},
"hostedCheckoutSpecificInput": {
"returnUrl": "https://yoursite.com/return"
}
}
Serveur a serveur
Incluez la configuration 3-D Secure dans votre requete de paiement :
- C#
- Java
var request = new CreatePaymentRequest
{
Order = new Order
{
AmountOfMoney = new AmountOfMoney
{
Amount = 2980,
CurrencyCode = "EUR"
},
Customer = new Customer
{
BillingAddress = new Address
{
CountryCode = "NL",
City = "Amsterdam",
Street = "Kalverstraat 1",
Zip = "1012 NX"
},
ContactDetails = new ContactDetails
{
EmailAddress = "customer@example.com"
}
}
},
CardPaymentMethodSpecificInput = new CardPaymentMethodSpecificInput
{
PaymentProductId = 1,
Card = new Card
{
CardNumber = "4111111111111111",
Cvv = "123",
ExpiryDate = "1225",
CardholderName = "John Doe"
},
ThreeDSecure = new ThreeDSecure
{
ChallengeIndicator = "no-preference",
RedirectionData = new RedirectionData
{
ReturnUrl = "https://yoursite.com/return"
}
}
}
};
var response = await merchantClient.Payments
.CreatePaymentAsync(request);
CreatePaymentRequest request = new CreatePaymentRequest();
// Configuration de la commande
Order order = new Order();
AmountOfMoney amount = new AmountOfMoney();
amount.setAmount(2980L);
amount.setCurrencyCode("EUR");
order.setAmountOfMoney(amount);
// Details du client
Customer customer = new Customer();
Address billingAddress = new Address();
billingAddress.setCountryCode("NL");
billingAddress.setCity("Amsterdam");
customer.setBillingAddress(billingAddress);
order.setCustomer(customer);
request.setOrder(order);
// Carte avec 3DS
CardPaymentMethodSpecificInput cardInput = new CardPaymentMethodSpecificInput();
cardInput.setPaymentProductId(1);
Card card = new Card();
card.setCardNumber("4111111111111111");
card.setCvv("123");
card.setExpiryDate("1225");
cardInput.setCard(card);
ThreeDSecure threeDSecure = new ThreeDSecure();
RedirectionData redirectionData = new RedirectionData();
redirectionData.setReturnUrl("https://yoursite.com/return");
threeDSecure.setRedirectionData(redirectionData);
cardInput.setThreeDSecure(threeDSecure);
request.setCardPaymentMethodSpecificInput(cardInput);
CreatePaymentResponse response = merchantClient.payments()
.createPayment(request);
Gerer la reponse
if (response.MerchantAction?.ActionType == "REDIRECT")
{
// Le client doit completer le challenge 3DS
string redirectUrl = response.MerchantAction.RedirectData.RedirectURL;
// Rediriger le client vers cette URL
}
else
{
// Sans friction - verifier directement le statut du paiement
var statusCode = response.Payment.StatusOutput.StatusCode;
}
Indicateur de challenge
Controlez le comportement du challenge 3DS :
| Valeur | Description |
|---|---|
no-preference | Laisser l'emetteur decider (par defaut) |
no-challenge-requested | Preferer sans friction si possible |
challenge-requested | Demander un challenge |
challenge-required | Exiger un challenge |
ThreeDSecure = new ThreeDSecure
{
ChallengeIndicator = "no-challenge-requested",
// ...
}
Exemptions
Demandez des exemptions pour les transactions eligibles :
Exemption de faible valeur
Pour les transactions inferieures a 30 EUR (limites cumulatives applicables) :
ThreeDSecure = new ThreeDSecure
{
ExemptionRequest = "low-value"
}
Analyse du risque de transaction (TRA)
Pour les marchands avec de faibles taux de fraude :
ThreeDSecure = new ThreeDSecure
{
ExemptionRequest = "transaction-risk-analysis"
}
Exemptions disponibles
| Exemption | Condition |
|---|---|
low-value | Transaction < 30 EUR |
transaction-risk-analysis | Faible taux de fraude |
whitelist | Client a mis le marchand en liste blanche |
corporate | Cartes entreprise/professionnelles |
recurring | Paiements recurrents subsequents |
Les demandes d'exemption peuvent etre acceptees ou refusees par l'emetteur. En cas de refus, la transaction revient a l'authentification 3DS standard.
Exclusions
Certaines transactions sont automatiquement exclues de la SCA :
- MOTO - Commande par courrier/telephone
- Transfrontalier - Paiements hors EEE
- Prepaye anonyme - Cartes jusqu'a 150 EUR
- Initie par le marchand - Transactions MIT
CardPaymentMethodSpecificInput = new CardPaymentMethodSpecificInput
{
TransactionChannel = "MOTO" // Exclu de la SCA
}
Donnees requises
Incluez ces champs pour des resultats d'authentification optimaux :
Adresse de facturation
BillingAddress = new Address
{
Street = "Kalverstraat 1",
City = "Amsterdam",
Zip = "1012 NX",
CountryCode = "NL"
}
Coordonnees
ContactDetails = new ContactDetails
{
EmailAddress = "customer@example.com",
PhoneNumber = "+31612345678"
}
Donnees du navigateur (pour S2S)
ThreeDSecure = new ThreeDSecure
{
BrowserData = new BrowserData
{
ColorDepth = 24,
JavaEnabled = false,
ScreenHeight = "1080",
ScreenWidth = "1920"
}
}
Tests
Utilisez les cartes de test pour simuler differents scenarios 3DS :
| Numero de carte | Scenario |
|---|---|
| 4012 0000 3333 0026 | Challenge 3DS requis |
| 4012 0000 3333 0034 | 3DS sans friction |
| 4012 0000 3333 0042 | 3DS tente |
| 4000 0000 0000 0002 | Authentification echouee |
Resultats d'authentification
Le threeDSecureResults dans la reponse contient :
| Champ | Description |
|---|---|
eci | Electronic Commerce Indicator |
authenticationStatus | Resultat de l'authentification |
cavv | Cardholder Authentication Verification Value |
xid | Identifiant de transaction |
var threeDSecureResults = response.Payment
.PaymentOutput
.CardPaymentMethodSpecificOutput
.ThreeDSecureResults;
string eci = threeDSecureResults.Eci;
string authStatus = threeDSecureResults.AuthenticationStatus;
Valeurs du statut d'authentification
| Statut | Signification |
|---|---|
Y | Entierement authentifie |
A | Tentative d'authentification |
N | Non authentifie (refuse) |
U | Authentification indisponible |
C | Challenge requis |
Transfert de responsabilite
Avec une authentification 3-D Secure reussie :
- Transaction frauduleuse → L'emetteur est responsable
- Contestation du titulaire → Protection contre les chargebacks
Incluez toujours des donnees client et d'adresse completes pour maximiser les taux d'authentification sans friction et la couverture du transfert de responsabilite.
Depannage
Problemes courants
| Probleme | Cause | Solution |
|---|---|---|
| Challenge non affiche | Donnees navigateur manquantes | Inclure tous les champs navigateur |
| Authentification echouee | URL de retour invalide | Assurez-vous que l'URL est HTTPS et accessible |
| Pas de transfert de responsabilite | Exemption utilisee | Les exemptions SCA n'incluent pas le transfert de responsabilite |
Prochaines etapes
- Configurer les webhooks pour les mises a jour d'authentification
- Implementer Hosted Checkout avec 3DS automatique
- Explorer les moyens de paiement necessitant 3DS