Implementarea integrării 3DS cu ajutorul API-ului 3DS JavaScript

Acest ghid prezintă toți pașii care sunt necesari pentru a adăuga 3DS la integrarea gateway folosind API 3DS JavaScript (JS), inclusiv cum să utilizați rezultatul autentificării pentru a procesa o plată.

Ghidul de integrare 3DS JS completează ghidul de integrare a API-ului de autentificare și, ca atare, trebuie utilizat împreună cu acesta.

Pasul 1: Crearea și actualizarea unei sesiuni

3DS JS utilizează autentificarea pe baza sesiunii. Ca prim pas, trebuie să creați o sesiune, pe care apoi o puteți actualiza cu câmpurile de solicitare și valorile pe care doriți să le stocați în cadrul sesiunii.

Puteți crea o sesiune folosind apelul Create Session. Acesta este un apel în API de pe partea serverului și reprezintă o cerință preliminară pentru integrarea cu API JS. Acesta returnează următoarele câmpuri:

  • session.id: Un identificator de sesiune unic, pe care trebuie să îl furnizați în solicitările ulterioare pentru a face referire la conținutul sesiunii.
  • session.authenticationLimit: Limita asupra numărului de solicitări de tranzacție pe care browserul plătitorului le poate trimite. Puteți furniza o valoare în solicitare sau puteți utiliza valoarea implicită a gateway-ului. În mod implicit, gateway-ul o setează la 5, dar puteți furniza o valoare până la 25. Această limită împiedică utilizatorii răuvoitori să utilizeze solicitările de autentificare ca posibil atac de carding attack și să execute atacuri Denial of Service (DoS) asupra site-ului dvs. prin trimiterea unui număr mare de tranzacții (posibil facturabile).
    Rețineți că orice reîncercări de autentificare pe care le inițiați vor fi verificate în comparație cu limita de autentificare.
  • session.aes256Key: Cheia pe care o puteți utiliza pentru a decripta datele sensibile transmise site-ului dvs. web prin browserul sau dispozitivul mobil al plătitorului.
  • session.version: Puteți utiliza acest câmp pentru a implementa blocarea optimistă a conținutului sesiunii.
  • session.updateStatus: Un rezumat al rezultatului ultimei încercări de modificare a sesiunii.
Solicitarea Update Session

Puteți adăuga sau actualiza câmpurile unei sesiuni folosind apelul Update Session. Acesta permite adăugarea datelor plăților și plătitorilor într-o sesiune care poate deveni ulterior un set de date de intrare pentru determinarea riscului asociat cu plătitorul într-o operațiune de autentificare. Într-o sesiune, următoarele câmpuri sunt obligatorii:

Parametru Existență Descriere
session.id sau sourceOfFunds.provided.card.* sau sourceOfFunds.token Obligatoriu Detaliile cardului utilizat pentru plată.
Rețineți că puteți utiliza și simboluri din rețea și simboluri de plată pentru dispozitive ca sursă de fonduri în autentificarea plătitorului. Pentru mai multe informații, consultați întrebările frecvente.
order.amount Obligatoriu Valoarea totală a comenzii.
order.currency Obligatoriu Moneda comenzii.
transaction.id Obligatoriu Un identificator unic pentru autentificarea plății.
order.id Obligatoriu Identificatorul unic al comenzii.
authentication.channel Obligatoriu Canalul pe care este inițiată solicitarea de autentificare. Puteți specifica unul dintre următoarele elemente:
  • MERCHANT_REQUESTED: Dacă solicitați autentificarea unui posesor de card fără ca plătitorul să fie disponibil pentru interacțiune (de exemplu, în cadrul procesării unei plăți periodice). În prezent, această opțiune nu este acceptată.
  • PAYER_BROWSER: Dacă plătitorul interacționează prin intermediul unui browser web (de exemplu, cu site-ul web de comerț electronic al comerciantului).
authentication.redirectResponseUrl Opțional Adresa URL către care doriți să redirecționați plătitorul după finalizarea procesului Authenticate Payer. Trebuie să furnizați această adresă URL, exceptând cazul în care aveți certitudinea că nu va exista nicio interacțiune cu plătitorul.
authentication.purpose Opțional Acest câmp este setat implicit la „PAYMENT_TRANSACTION” pentru a indica faptul că autentificarea trebuie efectuată la procesarea unei plăți cu cardul. Cu toate acestea, puteți specifica un scop diferit, pentru a indica autentificarea fără plată. Consultați Trimiterea unei solicitări de autentificare fără plată.
authentication.acceptVersions Opțional Versiunea 3DS acceptată de dvs. pentru această plată. Dacă nu specificați o versiune, vor fi acceptate ambele versiuni, 3DS1 și 3DS2. Gateway-ul utilizează 3DS2 (dacă este acceptată de către emitent și card) și folosește 3DS1 ca versiune de rezervă dacă 3DS2 nu este disponibilă. Dacă nu este disponibilă nicio versiune, autentificarea nu va continua. Rețineți că scenariile cu soluție de rezervă se aplică numai piețelor cu extensie 3DS1.
order.merchantCategoryCode Opțional Furnizați codul de categorie comerciant dacă doriți să suprareglați valoarea implicită configurată pentru legătura dvs. de achizitor.
Rețineți că nu puteți să ștergeți câmpuri dintr-o sesiune, dar puteți suprascrie valorile câmpurilor existente.

Pasul 2: Inițializați API

Consultați API-ul 3DS JS (threeDS.js) de pe serverele gateway-ului. Această acțiune va plasa obiectul ThreeDS în fereastră/spațiul de nume global.

Odată ce ați creat o sesiune, inițializați API-ul prin metoda configure( ). Această metodă trebuie apelată în timpul încărcării paginii sau când DOM se află în starea pregătită. Aceasta trebuie apelată o singură dată pentru o încărcare de pagină. După apelarea acestei metode, 3DS JS va furniza valorile de configurare sub formă de variabile-membru.

Solicitarea de inițializare 3DS JS

Puteți inițializa API-ul 3DS JS invocând metoda configure() cu următoarele câmpuri obligatorii ca argumente într-un obiect de cartografiere:

  • merchantId: Identificatorul dvs. de comerciant pe gateway.
  • sessionId: ID-ul de sesiune creat prin apelul Create Session.
  • containerId: ID-ul <div> din codul dvs. HTML în care API-ul va injecta un cadru iFrame ascuns.
  • callback: O funcție care va fi invocată după inițializarea API-ului.
  • configuration: Valoarea JSON asociată elementelor de date precum userLanguage(Optional), versiunea API-ului REST (wsVersion).
Exemple
Inițializați configurarea API-ului
<html>
    <head>
    <script src="https://egenius.unicredit.ro/static/threeDS/1.3.0/three-ds.min.js"
            data-error="errorCallback"
            data-cancel="cancelCallback">
    </script>

    <script type="text/javascript">
        //The output of this call will return 'false', since the API is not configured yet
        console.log(ThreeDS.isConfigured());
        /**
        Configure method with the configuration{} parameter set and demonstrates the state change of the ThreeDS object before and after the configure method is invoked.
        */
        ThreeDS.configure({
            merchantId: {merchantId},
            sessionId: {sessionId},
            containerId: "3DSUI",
            callback: function () {
                if (ThreeDS.isConfigured())
                    console.log("Done with configure");
            },
            configuration: {
                userLanguage: "en-AU", //Optional parameter
                wsVersion: 72
            }
        });

        //The output of this call will return 'true', since the API is configured
        console.log(ThreeDS.isConfigured());

        //The output of the following code might look like "ThreeDS JS API Version : 1.2.0"
        console.log("ThreeDS JS API Version : " + ThreeDS.version);
    </script>
    </head>
    <body>
        <div id="3DSUI"></div>
    </body>
</html>
		

Pasul 3: Initiate Authentication

Odată ce toate datele plătitorului și plății au fost colectate într-o sesiune, puteți iniția autentificarea invocând metoda initiateAuthentication(). Aceasta determină versiunile de autentificare a plătitorilor disponibile pentru dvs. în cazul unui anumit card, care pot depinde de următoarele:

  • versiunile 3DS configurate în profilul dvs. de comerciant
  • tipul cardului;
  • preferințele indicate în solicitare;
  • versiunea 3DS la care a fost înscris cardul și
  • regulile de filtrare 3DS a tranzacțiilor configurate de către dvs. sau furnizorul de servicii de plată.

Operațiunea permite, de asemenea, efectuarea oricăror activități în fundal (de ex., un apel 3DS2 ACS) cu scopul colectării de date suplimentare privitoare la plătitor, pentru a permite o metodă authenticatePayer() ulterioară.

Pentru a permite finalizarea oricărui proces de apel ACS înainte de a încerca metoda authenticatePayer(), este recomandat să invocați metoda initiateAuthentication() cât mai devreme în cadrul procesului de validare și să reacționați imediat la răspuns. În mod normal, acest lucru va avea loc atunci când plătitorul termină de introdus numărul de card pe pagina de validare (de exemplu, evenimentul „onBlur” din câmpul de introducere Număr card sau atunci când selectează un card dintre cele înregistrate în contul său, dacă site-ul dvs. are capabilități de înregistrare a cardurilor). Așteptați cel puțin 10 secunde pentru finalizarea apelului de metodă ACS.
Solicitarea Initiate Authentication

Puteți iniția autentificarea completând următoarele câmpuri obligatorii în metoda initiateAuthentication():

  • transactionId: Identificatorul unic pentru această autentificare a plății.
  • orderId: Identificatorul unic al comenzii.
  • callback: Funcția callback.
  • optionalParams: (Opțional) argument cu orice câmpuri suplimentare ale solicitării API REST Initiate Authentication, cum ar fi correlationId.
Răspunsul Initiate Authentication

Dacă autentificarea 3DS a plătitorului este disponibilă, următoarele câmpuri sunt returnate în argumentul data al funcției callback. În caz contrar, răspunsul va include o eroare.

  • data.restApiResponse: Conține răspunsul brut din apelul API REST Initiate Authentication.
  • data.correlationId: Ultimul ID de corelare utilizat pentru efectuarea apelului API REST Authentication. Acesta permite corelarea răspunsului cu solicitarea.
  • data.gatewayRecommendation
  • data.authenticationVersion: Returnează varianta 3DS1 sau 3DS2 dacă autentificarea este disponibilă. Rețineți că scenariile cu soluție de rezervă se aplică numai piețelor cu extensie 3DS1.

Pentru a determina pasul următor, verificați recomandarea gateway-ului, furnizată în câmpul gatewayRecommendation. Rețineți că această recomandare se bazează numai pe regulile 3DS de filtrare a tranzacțiilor, configurate de către dvs. sau furnizorul de servicii de plată.

gatewayRecommendation Pasul următor
PROCEED Puteți continua cu autentificarea plătitorului folosind apelarea metodei authenticatePayer( ).
RETRIMITERE_CU_DETALII_ALTERNATIVE_DE_PLATĂ Solicitați plătitorului detalii alternative de plată (de exemplu, un card nou sau altă metodă de plată) și retrimiteți solicitarea cu noile detalii. Nu retrimiteți aceeași solicitare.
Exemple
Solicitarea Initiate Authentication
var optionalParams = {
    sourceOfFunds: {
        type: "CARD"
    },
    order: {
        walletProvider: "MASTERPASS_ONLINE"
    }
};

ThreeDS.initiateAuthentication({orderId}, {transactionId}, function (data) {
    if (data && data.error) {
        var error = data.error;

        //Something bad happened, the error value will match what is returned by the Authentication API
        console.error("error.code : ", error.code);
        console.error("error.msg : ", error.msg);
        console.error("error.result : ", error.result);
        console.error("error.status : ", error.status);
    } else {
        console.log("After Initiate 3DS ", data);

        //data.response will contain information like gatewayRecommendation, authentication version, etc.
        console.log("REST API raw response ", data.restApiResponse);
        console.log("Correlation Id", data.correlationId);
        console.log("Gateway Recommendation", data.gatewayRecommendation);
        console.log("HTML Redirect Code", data.htmlRedirectCode);
        console.log("Authentication Version", data.authenticationVersion);

        switch (data.gatewayRecommendation) {
            case "PROCEED":
                authenticatePayer();//merchant's method
                break;
            case "RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS":
               tryOtherPayment();//Card does not support 3DS and transaction filtering rules require 3DS on this transaction: Ask the payer to select a different payment method.
                break;
        }
    }
}, optionalParams);
		
Răspunsul Initiate Authentication – 3DS2
{ 
   "authentication":{ 
      "3ds2":{ 
         "methodCompleted":false,
         "methodSupported":"SUPPORTED"
      },
      "redirect":{ 
         "customized":{ 
            "3DS":{ 
               "methodPostData":"eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly9xYTA0LmdhdGV3YXkubWFzdGVyY2FyZC5jb20vY2FsbGJhY2tJbnRlcmZhY2UvZ2F0ZXdheS80ZjNmMGQyMjM5NzQwODE2OWIwMWFiYzg2OTQyZTY5NzBmODA2M2M0MDU4ZjAzNjNlOTFlMmJiOTNkOTA0NzU3IiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiJhYWY5YjU5ZC0yZTA0LTRjZDUtOTQzOC01OGU4MGEzNzBiNWEifQ==",
               "methodUrl":"<method_url>"
            }
         }
      },
      "redirectHtml":"<div id=\"initiate3dsSimpleRedirect\" xmlns=\"http://www.w3.org/1999/html\"> <iframe id=\"methodFrame\" name=\"methodFrame\" height=\"100\" width=\"200\" > </iframe> <form id =\"initiate3dsSimpleRedirectForm\" method=\"POST\" action=\"https://<host_name>/acs/v2/method\" target=\"methodFrame\"> <input type=\"hidden\" name=\"threeDSMethodData\" value=\"eyJ0aHJlZURTTWV0aG9kTm90aWZpY2F0aW9uVVJMIjoiaHR0cHM6Ly9xYTA0LmdhdGV3YXkubWFzdGVyY2FyZC5jb20vY2FsbGJhY2tJbnRlcmZhY2UvZ2F0ZXdheS80ZjNmMGQyMjM5NzQwODE2OWIwMWFiYzg2OTQyZTY5NzBmODA2M2M0MDU4ZjAzNjNlOTFlMmJiOTNkOTA0NzU3IiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiJhYWY5YjU5ZC0yZTA0LTRjZDUtOTQzOC01OGU4MGEzNzBiNWEifQ==\" /> </form> <script>document.getElementById(\"initiate3dsSimpleRedirectForm\").submit();</script> </div>",
      "version":"3DS2"
   },
   "order":{
      "currency":"AUD",
      "status":"AUTHENTICATION_INITIATED"
   },
   "response":{
      "gatewayCode":"AUTHENTICATION_IN_PROGRESS",
      "gatewayRecommendation":"PROCEED"
   },
   "result":"SUCCESS",
   "sourceOfFunds":{
      "provided":{
         "card":{
            "number":"512345xxxxxx0008"
         }
      },
      "type":"CARD"
   },
   "transaction":{
      "authenticationStatus":"AUTHENTICATION_AVAILABLE"
   },
   "version":"72"
}

Pasul 4: Autentificarea plătitorului

Acolo unde răspunsul la operațiunea Initiate Authentication a indicat disponibilitatea autentificării (transaction.authenticationStatus=AUTHENTICATION_AVAILABLE) pentru cardul RuPay, puteți invoca metoda authenticatePayer(). Aceasta trebuie invocată atunci când plătitorul face clic pe butonul „Plătiți acum” de pe pagina de validare.

Solicitarea Authenticate Payer

Trebuie să invocați metoda authenticatePayer() completând următoarele câmpuri obligatorii:

  • orderId: Aceeași valoare orderId cu cea a metodei initiateAuthentication() anterioare.
  • transactionId: Aceeași valoare transactionId cu cea a metodei initiateAuthentication() anterioare.
  • callback: Funcția callback.
  • optionalParams: (Opțional) argument cu orice câmpuri suplimentare ale solicitării API REST Authenticate Payer, cum ar fi billing și shipping.
Răspunsul Authenticate Payer

Următoarele câmpuri sunt returnate în argumentul data al funcției callback:

  • data.restApiResponse: Conține răspunsul brut din apelul API REST Authentication Payer.
  • data.correlationId: Ultimul ID de corelare utilizat pentru efectuarea apelului API REST Authentication Payer. Acesta permite corelarea răspunsului cu solicitarea.
  • data.gatewayRecommendation
  • data.htmlRedirectCode: Gateway-ul returnează întotdeauna acest câmp pentru inserarea în pagina afișată pentru plătitor.

Pentru a determina pasul următor, verificați recomandarea gateway-ului, furnizată în câmpul gatewayRecommendation returnat în funcția callback. Rețineți că această recomandare se bazează numai pe regulile 3DS de filtrare a tranzacțiilor, configurate de către dvs. sau furnizorul de servicii de plată.

gatewayRecommendation Pasul următor
PROCEED Puteți continua cu finalizarea procesului de autentificare (procesul de testare) sau puteți finaliza plata (proces optimizat). Dacă autorizarea plății a reușit, cu rambursarea fondurilor și, dacă este cazul, cu expedierea bunurilor.
NU_CONTINUAȚI_ABANDONAȚI_COMANDA Nu trimiteți din nou aceeași solicitare. Furnizorul de servicii de plată, schema sau emitentul vă solicită să abandonați comanda.
RETRIMITERE_CU_DETALII_ALTERNATIVE_DE_PLATĂ Solicitați plătitorului detalii alternative de plată (de exemplu, un card nou sau altă metodă de plată) și retrimiteți solicitarea cu noile detalii. Nu retrimiteți aceeași solicitare.

Dacă gateway-ul recomandă PROCEED, atunci lipiți conținutul câmpului htmlRedirectCode din răspuns pe pagina afișată pentru plătitor.

Procesul fluidizat

Acest lucru va redirecționa browserul plătitorului înapoi la site-ul dvs. web. Puteți continua cu trimiterea unei tranzacții ulterioare către gateway. Gateway-ul va obține datele de autentificare asociate plății și se va asigura că plățile vor fi procesate numai dacă toate regulile 3DS de filtrare a tranzacțiilor (configurate de dvs. sau furnizorul de servicii de plată) sunt respectate.

Procesul de testare

Acesta redirecționează browserul plătitorului către ACS, unde va apărea IU de testare a emitentului, după care plătitorul va fi redirecționat înapoi la site-ul dvs. web. Următoarele câmpuri sunt returnate în callback odată ce browserul plătitorului revine la site-ul dvs web.

  • orderId
  • transactionId
  • gatewayRecommendation
  • restApiResponse

Puteți determina rezultatul autentificării folosind valoarea returnată în câmpul gatewayRecommendation. Rețineți că această recomandare se bazează numai pe regulile 3DS de filtrare a tranzacțiilor, configurate de către dvs. sau furnizorul de servicii de plată.

gatewayRecommendation Pasul următor
PROCEED Puteți continua cu plata, deoarece autentificarea a fost efectuată. Dacă autorizarea plății a reușit, cu rambursarea fondurilor și, dacă este cazul, cu expedierea bunurilor.
NU_CONTINUAȚI_ABANDONAȚI_COMANDA Nu trimiteți din nou aceeași solicitare. Furnizorul de servicii de plată, schema sau emitentul vă solicită să abandonați comanda.
RETRIMITERE_CU_DETALII_ALTERNATIVE_DE_PLATĂ Solicitați plătitorului detalii alternative de plată (de exemplu, un card nou sau altă metodă de plată) și retrimiteți solicitarea cu noile detalii. Nu retrimiteți aceeași solicitare.
Câmpurile răspunsului Authenticate Payer

Câmpurile returnate în restApiResponse depind de procesul utilizat (fluidizat sau de testare) și de modul de inițiere a solicitării de autentificare (authentication.channel).

Pentru solicitarea de autentificare pe baza sesiunii, răspunsul este filtrat pentru eliminarea datelor care nu sunt legate de plătitor, fiind returnate numai câmpurile de pe lista albă. Pentru mai multe informații, consultați Operațiunile autentificate pe baza sesiunii.

Integrările avansate

Solicitarea trimisă de browserul plătitorului către site-ul dvs. web la finalizarea metodei authenticatePayer() va fi parametrizată într-un mod care să permită determinarea rezultatului autentificării. Fiecare parametru de autentificare, cum ar fi authentication.3ds2.transactionStatus.data, poate fi util pentru o integrare avansată sau dacă este necesar să furnizați datele de autentificare într-o plată procesată printr-un alt gateway. Consultați Integrări sesiuni de plată avansate.

Exemple
Solicitarea Authenticate Payer
var optionalParams = {
    fullScreenRedirect: true,
    billing: {
        address: {
            city: "London",
            country: "GBR"
        }
    }
};
 
ThreeDS.authenticatePayer({orderId}, {transactionId}, function (data) {
    if (!data.error) {
        //data.response will contain all the response payload from the AUTHENTICATE_PAYER call.
        console.log("REST API response ", data.restApiResponse);
        console.log("HTML redirect code", data.htmlRedirectCode);
        displayReceipt(data);
    }
}, optionalParams);
 
 
function displayReceipt(apiResponse) {
    var responseBody = {
        "apiResponse": apiResponse
    };
 
    var xhr = new XMLHttpRequest();
    xhr.open('PUT', '3dsreceipt', true);
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.onreadystatechange = function () {
        if (xhr.readyState == XMLHttpRequest.DONE) {
            document.documentElement.innerHTML = this.response;
        }
    }
    xhr.send(JSON.stringify(responseBody));
}
		
Răspunsul de autentificare a plătitorului – 3DS2
{
   "authentication":{
      "3ds":{
         "transactionId":"6dfa4509-1bf2-425b-965b-d44dd11f5f91"
      },
      "3ds2":{
         "3dsServerTransactionId":"8c4a911c-289a-46c2-a615-887e1cc01a6a",
         "acsTransactionId":"2a8234c9-e8ac-449d-a693-97a113b491fc",
         "directoryServerId":"A000000004",
         "dsTransactionId":"6dfa4509-1bf2-425b-965b-d44dd11f5f91",
         "methodCompleted":false,
         "methodSupported":"SUPPORTED",
         "protocolVersion":"2.1.0",
         "requestorId":"test2ID",
         "requestorName":"test2Name",
         "transactionStatus":"C"
      },
      "method":"OUT_OF_BAND",
      "payerInteraction":"REQUIRED",
      "redirect":{
         "customized":{
            "3DS":{
               "acsUrl":"https://<host_name>/acs/v2/prompt",
               "cReq":"eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6ImNhODM1ZDQxLTBlMDktNGI3OC1hNmUyLWQwZjJiNjFlZjBjOCJ9"
            }
         },
         "domainName":"<domain_name>"
      },
      "redirectHtml":"<div id=\"threedsChallengeRedirect\" xmlns=\"http://www.w3.org/1999/html\"> <form id =\"threedsChallengeRedirectForm\" method=\"POST\" action=\"https://<host_name>/acs/v2/prompt\" target=\"challengeFrame\"> <input type=\"hidden\" name=\"creq\" value=\"eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6ImNhODM1ZDQxLTBlMDktNGI3OC1hNmUyLWQwZjJiNjFlZjBjOCJ9\" /> </form> <iframe id=\"challengeFrame\" name=\"challengeFrame\" width=\"100%\" height=\"100%\" ></iframe> <script id=\"authenticate-payer-script\"> var e=document.getElementById(\"threedsChallengeRedirectForm\"); if (e) { e.submit(); e.remove(); } </script> </div>",
      "version":"3DS2"
   },
   "correlationId":"test",
   "device":{
      "browser":"MOZILLA",
      "ipAddress":"127.0.0.1"
   },
   "merchant":"TEST_3DS2-1",
   "order":{
      "amount":100,
      "authenticationStatus":"AUTHENTICATION_PENDING",
      "creationTime":"2021-04-13T02:22:59.113Z",
      "currency":"AUD",
      "id":"807a01b6-e6c8-4aa7-b8da-799bfff89496",
      "lastUpdatedTime":"2021-04-13T02:44:07.161Z",
      "merchantCategoryCode":"1234",
      "status":"AUTHENTICATION_INITIATED",
      "totalAuthorizedAmount":0,
      "totalCapturedAmount":0,
      "totalRefundedAmount":0,
      "valueTransfer":{
         "accountType":"NOT_A_TRANSFER"
      }
   },
   "response":{
      "gatewayCode":"PENDING",
      "gatewayRecommendation":"PROCEED"
   },
   "result":"PENDING",
   "sourceOfFunds":{
      "provided":{
         "card":{
            "expiry":{
               "month":"1",
               "year":"39"
            },
            "number":"512345xxxxxx0008",
            "scheme":"MASTERCARD"
         }
      },
      "type":"CARD"
   },
   "timeOfLastUpdate":"2021-04-13T02:44:07.161Z",
   "timeOfRecord":"2021-04-13T02:22:59.113Z",
   "transaction":{
      "acquirer":{
         "merchantId":"99554411"
      },
      "amount":100,
      "authenticationStatus":"AUTHENTICATION_PENDING",
      "currency":"AUD",
      "id":"42090084",
      "type":"AUTHENTICATION"
   },
   "version":"60"
}

Pasul 5: Utilizarea rezultatului autentificării într-o operațiune de plată

Dacă rezultatul metodei authenticatePayer() indică faptul că puteți continua plata (gatewayRecommendation=PROCEED), puteți să inițiați o operațiune Authorize sau Pay. În plus față de câmpurile standard, trebuie să completați următoarele câmpuri:

  • order.id: Furnizați orderId utilizat în metodele initiateAuthentication() și authenticatePayer().
  • authentication.transactionId: Furnizați transactionId utilizat în metodele initiateAuthentication() și authenticatePayer(). Nu este necesar să includeți niciunul dintre câmpurile din grupul de parametri de autentificare, deoarece gateway-ul va utiliza valoarea authentication.transactionId pentru a căuta rezultatele autentificării pe care le-a salvat în momentul în care ați solicitat efectuarea autentificării. Gateway-ul va transmite achizitorului informațiile solicitate.
Exemple
Solicitarea Pay
URL https://egenius.unicredit.ro/api/rest/version/<version>/merchant/<your_merchant_ID>/order/<your_order_ID>/transaction/<unique_transaction_ID>
Metoda HTTP PUT
 
{
    "apiOperation":"PAY",
    "authentication":{
        "transactionId":"<your_transaction_ID>"
    },
    "order":{
        "amount":"100",
        "currency":"AUD",
        "reference":"<your_order_ID>"
    },
    "sourceOfFunds":{
        "provided":{ 
            "card":{ 
                "number":"<card_number>",
                "expiry":{
                    "month":"1",
                    "year":"39"
                }
            }
        },
        "type":"CARD"
    },
    "transaction":{
        "reference":"<your_order_ID>"
    }
}
	
Răspunsul Pay – 3DS2
{
   "authentication":{
      "3ds":{
         "acsEci":"02",
         "authenticationToken":"kHyn+7YFi1EUAREAAAAvNUe6Hv8=",
         "transactionId":"39c25b96-7bc3-4586-bee8-056479fed3af"
      },
      "3ds2":{
         "dsTransactionId":"39c25b96-7bc3-4586-bee8-056479fed3af",
         "protocolVersion":"2.1.0",
         "transactionStatus":"Y"
      },
      "transactionId":"249213216",
      "version":"3DS2"
   },
   "authorizationResponse":{
      "posData":"1605S0100130",
      "transactionIdentifier":"TidTest"
   },
   "device":{
      "browser":"MOZILLA",
      "ipAddress":"127.0.0.1"
   },
   "gatewayEntryPoint":"WEB_SERVICES_API",
   "merchant":"TEST_3DS2-1",
   "order":{
      "amount":100.00,
      "authenticationStatus":"AUTHENTICATION_SUCCESSFUL",
      "chargeback":{
         "amount":0,
         "currency":"AUD"
      },
      "creationTime":"2021-04-13T02:11:06.102Z",
      "currency":"AUD",
      "id":"807a01b6-e6c8-4aa7-b8da-799bfff89496",
      "lastUpdatedTime":"2021-04-13T02:11:57.049Z",
      "merchantAmount":100.00,
      "merchantCategoryCode":"1234",
      "merchantCurrency":"AUD",
      "reference":"807a01b6-e6c8-4aa7-b8da-799bfff89496",
      "status":"CAPTURED",
      "totalAuthorizedAmount":100.00,
      "totalCapturedAmount":100.00,
      "totalRefundedAmount":0.00
   },
   "response":{
      "acquirerCode":"00",
      "gatewayCode":"APPROVED"
   },
   "result":"SUCCESS",
   "sourceOfFunds":{
      "provided":{
         "card":{
            "brand":"MASTERCARD",
            "expiry":{
               "month":"1",
               "year":"39"
            },
            "fundingMethod":"CREDIT",
            "issuer":"<issuer>",
            "number":"512345xxxxxx0008",
            "scheme":"Mastercard",
            "storedOnFile":"NOT_STORED"
         }
      },
      "type":"CARD"
   },
   "timeOfLastUpdate":"2021-04-13T02:11:57.049Z",
   "timeOfRecord":"2021-04-13T02:11:56.973Z",
   "transaction":{
      "acquirer":{
         "batch":1,
         "id":"<acquirer_id>",
         "merchantId":"99554411"
      },
      "amount":100.00,
      "authenticationStatus":"AUTHENTICATION_SUCCESSFUL",
      "authorizationCode":"028941",
      "currency":"AUD",
      "id":"1",
      "receipt":"1908266016",
      "reference":"807a01b6-e6c8-4aa7-b8da-799bfff89496",
      "source":"INTERNET",
      "stan":"496",
      "terminal":"1234",
      "type":"PAYMENT"
   },
   "version":"60"
}

Întrebări frecvente

Pentru întrebări generale despre 3-D Secure, consultați Întrebări frecvente despre autentificare.

Testați integrarea

Pentru a vă testa integrarea, vă puteți utiliza profilul de comerciant de TEST în mediul de lucru, a se vedea Testarea integrării.

Copyright © 2023 UniCredit Bank