PREREQUIS
- Afin de réaliser une transaction en 3DS 2.0 3RI, il faut que l'utilisateur est déjà réalisé une transaction 3DS 2.0 avec une authentification BRW.
- Une fois celle-ci effectuée, gardez l' acsTransId qui est envoyé, il faudra le passer dans threeDSReqPriorRef.
1)3DS AUTHENTICATION RI
- L'appel devra être adressé vers l’url suivante de l’API CentralPay : « 3ds2/authentication »
- L' acsTransId que vous avez gardez de l'authentification BRW doit être mit dans threeDSReqPriorRef.
- Si l’api vous retourne un statut de transaction (« transStatus ») à "Y" l'authentification 3RI est autorisé.
- Voici les valeurs possible de transStatus et leur signification :
- Y = Vérification de l'authentification réussie.
- N = Non authentifié /Compte non vérifié. Transaction refusée.
- U = L'authentification/la vérification du compte n'a pas pu être effectuée. Problème technique ou autre, comme indiqué dans ARes ou RReq.
- A = Traitement des tentatives effectué. Non authentifié/vérifié, mais une preuve de tentative d'authentification/vérification est fournie.
- C = Challenge requis. Une authentification supplémentaire est requise en utilisant le CReq/CRes.
- D = Challenge requis. Authentification découplée confirmée.
- R = Authentification/vérification du compte rejetée. l'émetteur rejette l'authentification/vérification et demande de ne pas tenter d'autorisation.
- I = Information seulement. Reconnaissance de la préférence du demandeur pour le défi 3DS.
Exemple d'appel 3RI (curl code) :
curl --location --request POST 'https://test-api.centralpay.net/v2/rest/3ds2/authentication' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic ZG9jdGVzdDo0STlISlJUZA==' \
--data-urlencode 'customerId=aae4d8c0-a555-4c2f-bfdf-18d5636b78a4' \
--data-urlencode 'cardId=44d0691b-b117-4799-ba07-31e0b02c5b08' \
--data-urlencode 'pointOfSaleId=08960d92-874b-4447-800b-aaa53fa976f5' \
--data-urlencode 'deviceChannel=03' \
--data-urlencode 'messageCategory=02' \
--data-urlencode 'acctType=03' \
--data-urlencode 'cardExpiryDate=9999' \
--data-urlencode 'purchaseAmount=4880' \
--data-urlencode 'purchaseCurrency=978' \
--data-urlencode 'purchaseExponent=2' \
--data-urlencode 'purchaseDate=20230101122345' \
--data-urlencode 'recurringExpiry=20330101' \
--data-urlencode 'recurringFrequency=0' \
--data-urlencode 'chAccAgeInd=03' \
--data-urlencode 'chAccChange=20220901' \
--data-urlencode 'chAccDate=20220901' \
--data-urlencode 'email=support@centralpay.eu' \
--data-urlencode 'nbPurchaseAccount=2' \
--data-urlencode 'paymentAccAge=20221001' \
--data-urlencode 'paymentAccInd=03' \
--data-urlencode 'threeDSReqPriorAuthMethod=02' \
--data-urlencode 'threeDSReqPriorAuthTimestamp=202209010123' \
--data-urlencode 'threeDSReqPriorRef=7d031b8e-7fb7-4215-b866-eaacb395002f' \
--data-urlencode 'threeDSRequestorDecReqInd=N' \
--data-urlencode 'threeDSRequestorAuthenticationInd=02' \
--data-urlencode 'threeDSRequestorChallengeInd=02' \
--data-urlencode 'threeRIInd=01'
Explication de certains paramètres
- deviceChannel 03 -> 3DS Requestor Initiated (3RI)
- messageCategory 02 -> La valeur 02 force la transactions en 3RI.
- purchaseAmount -> Montant de l'achat courant
- purchaseCurrency -> Monnaie au format ISO
- purchaseExponent -> Unité mineur de la monnaie courante
- purchaseDate -> Date de l'achat
- recurringExpiry -> Date à laquelle il n'y aura plus d'autorisations qui pourront être effectuées
- recurringFrequency -> Nombre de jours minimums entres deux autorisations.
- acctType -> Debit
- chAccAgeInd -> Durée pendant laquelle le titulaire de la carte possède le compte auprès du demandeur 3DS. Les valeurs acceptées sont :
- 01 -> Pas de compte
- 02 -> Créé durant la transaction
- 03 -> Moins de 30 jours
- 04 -> Entre 30 et 60 jours
- 05 -> Plus de 60 jours.
- chAccChange -> Date à laquelle le compte du titulaire de la carte auprès du demandeur 3DS a été modifié pour la dernière fois. Format de la date = YYYYMMDD.
- chAccDate -> Date à laquelle le titulaire de la carte a ouvert le compte auprès du demandeur 3DS. Format de la date = YYYYMMDD.
- nbPurchaseAccount -> Nombre d'achats effectués avec ce compte de titulaire de carte au cours des six derniers mois.
- paymentAccAge -> Date à laquelle le compte de paiement a été inscrit sur le compte du titulaire de la carte auprès du demandeur 3DS.
- paymentAccInd -> Indique la durée pendant laquelle le compte de paiement a été inscrit sur le compte du titulaire de la carte auprès du demandeur 3DS. Les valeurs acceptées sont :
- 01 -> Pas de compte
- 02 -> Créé durant la transaction
- 03 -> Moins de 30 jours
- 04 -> Entre 30 et 60 jours
- 05 -> Plus de 60 jours.
- threeDSReqPriorAuthMethod 02 -> Vérification du porteur de carte effectué par l'ACS.
- threeDSReqPriorAuthTimestamp -> Date et heure en UTC de l'authentification précédente. Le format de date accepté est YYYYMMDDHHMM.
- threeDSReqPriorRef -> Le champ doit contenir la valeur "acsTransId" de la transaction 3DS BRW précédente.
- threeDSRequestorDecReqInd N -> Ne pas utilisez l'authentification découplée.
- threeDSRequestorAuthenticationInd 02 -> Transaction récurrente
- threeDSRequestorChallengeInd 02 -> Pas de Challenge requis
- threeRIInd 01 -> Transaction récurrente
Exemple de réponse :
{
"threeDSServerTransID": "67dc456c-6c7a-987f-92cf-f68752525d0c",
"transStatus": "Y",
"eci": "02",
"contractId": "fb8736a5-8741-19b6-9d38-ec135888e0bf"
}
2) Transaction
- Les données suivantes sont nécessaire afin de valider une transaction en 3DS 2.0 :
- 3ds[threeDSServerTransID] = threeDSServerTransID (ajouter le nouveau génerer par l'authentification 3RI)
- 3ds[status] = transStatus
- 3ds[eci] = eci
- 3ds[xid] = Paramètre Custom destiné au marchands.
- Lors d'une transaction en 3RI, il ne faut pas envoyer le 3ds[cavv].
Exemple d'une transaction 3DS 2.0 :
curl --location --request POST 'https://test-api.centralpay.net/v2/rest/transaction' \
--header 'Origin: https://example.centralpay.net' \
--header 'Authorization: Basic ZG9jdGVzdDo0STlISlJUZA==' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'currency=EUR' \
--data-urlencode 'amount=1500' \
--data-urlencode 'endUserIp=9.64.32.8' \
--data-urlencode 'endUserLanguage=ita' \
--data-urlencode 'merchantTransactionId=cpcg_12654de89ce44' \
--data-urlencode 'pointOfSaleId=1beb8574-cf4c-4b12-b065-d12b3f0eaa90' \
--data-urlencode 'browserUserAgent=Mozilla/5.0 (iPhone; CPU iPhone OS 16_1_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Mobile/15E148 Safari/604.1' \
--data-urlencode 'browserAcceptLanguage=it_IT' \
--data-urlencode 'paymentRequestBreakdownId=5485d7e6-60c3-753c-94d3-682eaaf9ae6e' \
--data-urlencode 'email=support@centralpay.eu' \
--data-urlencode 'receiptEmail=support@centralpay.eu' \
--data-urlencode 'capture=true' \
--data-urlencode 'customerId=aae4d8c0-a555-4c2f-bfdf-18d5636b78a4' \
--data-urlencode 'cardId=44d0691b-b117-4799-ba07-31e0b02c5b08' \
--data-urlencode 'order[cardholderEmail]=support@centralpay.eu' \
--data-urlencode 'order[firstName]=John' \
--data-urlencode 'order[lastName]=Doe' \
--data-urlencode 'source=EC' \
--data-urlencode '3ds[xid]=35876533346561303461' \
--data-urlencode '3ds[eci]=02' \
--data-urlencode '3ds[status]=Y' \
--data-urlencode '3ds[threeDSServerTransID]=67dc456c-6c7a-987f-92cf-f68752525d0c'