3DS cu API-ul JavaScript 3DS

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

Pentru a vedea exemple de solicitări și răspunsuri API utilizate în fluxul 3DS cu API-ul JavaScript 3DS, descărcați colecția Postman.

Pentru mai multe informații despre unele caracteristici 3DS generice de care puteți profita în integrarea dvs., consultați Întrebări frecvente. După ce ați finalizat integrarea, vedeți Testarea integrării 3DS pentru a o testa.

Cerințe preliminare Copied to Clipboard

Pentru a utiliza 3DS cu API-ul JS 3DS:

Pasul 1: Crearea și actualizarea unei sesiuni Copied to Clipboard

3DS JS utilizează autentificarea pe baza sesiunii. Pentru mai multe informații despre autentificarea bazată pe sesiune, consultați Opțiuni de autentificare. 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 solicitarea CREATE SESSION. Aceasta este o solicitare API WS pe partea de server și este o condiție prealabilă pentru integrarea cu API-ul 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.
    Orice reîncercări de autentificare pe care le inițiați sunt verificate cu limită de autentificare.
  • session.aes256Key
    Cheie 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
    Versiunea de sesiune. 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.

După ce ați creat sesiunea, puteți adăuga sau actualiza câmpuri într-o sesiune utilizând solicitarea UPDATE SESSION. Acest lucru 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. Următorul tabel definește câmpurile utilizate în mod obișnuit într-o sesiune.
Tabel: Câmpurile de sesiune

Câmp Obligatoriu/Opțional Descriere
session.id
sau
sourceOfFunds.provided.card.* sau
sourceOfFunds.token
Obligatoriu Detaliile cardului utilizat pentru plată.
De asemenea, 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 Identificator unic pentru autentificarea plății.
order.id Obligatoriu Identificator unic pentru această comandă.
authentication.channel Obligatoriu Canalul pe care este inițiată solicitarea de autentificare. Puteți specifica unul dintre următoarele elemente:
  • MERCHANT_REQUESTED: Indică faptul că solicitați autentificarea unui deținător de card fără ca plătitorul să fie disponibil pentru interacțiune. De exemplu, ca parte a procesării unei plăți periodice. În prezent, această opțiune nu este acceptată.
  • PAYER_BROWSER: Indică faptul că plătitorul interacționează printr-un browser web. De exemplu, cu site-ul web de comerț electronic al comerciantului.
authentication.redirectResponseUrl Obligatoriu Adresa URL către care doriți să redirecționați plătitorul după finalizarea procesului de autentificare a plătitorului. Nu este necesar să furnizați această adresă URL dacă sunteți sigur că nu va exista nicio interacțiune cu plătitorul.
authentication.purpose Opțional Scopul autentificării.
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ă. Dacă stabiliți un acord de plată și nu procesați o plată împreună cu acesta, introduceți ADD_CARD ca scop al autentificării. Aflați cum puteți trimite o solicitare de autentificare fără plată? Trebuie completate detaliile de plată.
authentication.acceptVersions Opțional Versiunile 3DS pe care le acceptați pentru această plată. Dacă nu specificați o versiune, 3DS2 este acceptat. Gateway-ul utilizează 3DS2, dacă această opțiune este acceptată de emitent și de card. Dacă 3DS2 nu este disponibil, autentificarea nu continuă.
order.merchantCategoryCode Opțional Codul categoriei comerciantului.
Furnizați o valoare doar dacă doriți să suprareglați valoarea implicită configurată pentru legătura dvs. de achizitor.
Nu puteți elimina câmpuri dintr-o sesiune. Puteți suprascrie numai valori pentru câmpurile existente.

Pasul 2: Inițializați API Copied to Clipboard

Consultați API-ul 3DS JS (threeDS.js) de pe serverele gateway-ului. Aceasta plasează un obiect ThreeDS în fereastra/spațiul de nume global.
După ce ați creat o sesiune, inițializați 3DS JS API utilizând funcția configure(), cu următoarele argumente obligatorii în obiectul map threedsConfig:

  • merchantId
    Identificatorul dvs. de comerciant pe gateway.
  • sessionId
    ID-ul de sesiune pe care l-ați creat folosind solicitarea CREATE SESSION.
  • containerId
    <div> ID în codul HTML în care API-ul injectează un iFrame ascuns.
  • callback
    Funcție care trebuie invocată odată ce API-ul a fost inițializat.
  • configuration
    Valoare JSON care acceptă elemente de date precum userLanguage (limba paginii de plată afișată utilizatorului; opțional) și wsVersion (versiunea API WS).

Funcția configure() trebuie apelată în timpul încărcării paginii sau când DOM-ul este în starea pregătită. Trebuie apelat o singură dată pentru încărcarea paginii. După apelarea acestei metode, 3DS JS furnizează valorile de configurare sub formă de variabile-membru.

Exemplu de inițializare a configurației API

<html>
    <head>
    <script src="../../../../../../../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: 81
            }
        });

        //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: Inițierea autentificării Copied to Clipboard

Odată ce toate datele plătitorului și plății au fost colectate într-o sesiune, puteți iniția autentificarea invocând metoda initiateAuthentication() function. Apelează la solicitarea INITIATE AUTHENTICATION a API de autentificare plătitor și determină versiunile de autentificare plătitor disponibile pentru un anumit card, pe baza următoarelor:

  • versiunile 3DS configurate în profilul dvs. de comerciant
  • Tip de card
  • preferințele indicate în solicitare
  • Versiunea 3DS la care a fost înscris cardul
  • regulile de filtrare 3DS a tranzacțiilor configurate de către dvs. sau Your payment service provider (PSP)

Funcția 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 operațiune authenticatePayer() ulterioară.

Pentru a permite finalizarea oricărui apel prin metoda ACS înainte de a încerca operațiunea authenticatePayer(), este recomandat să trimiteți operațiunea initiateAuthentication() cât mai devreme în cadrul procesului de validare și să reacționați imediat la răspuns. Prima oportunitate este 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.

Puteți iniția autentificarea apelând funcția initiateAuthentication() cu următoarele argumente obligatorii:

  • transactionId
    Identificator unic pentru autentificarea plății.
  • orderId
    Identificator unic pentru această comandă.
  • callback
    Funcția callback
  • optionalParams (optional)
    Câmpuri suplimentare, cum ar fi correlationId.

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 include o eroare.

  • data.restApiResponse
    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
    Recomandare cu privire la următoarele acțiuni, bazată pe regulile de filtrare a tranzacțiilor 3DS configurate de dvs. sau de PSP:
    • PROCEED: Puteți trece la Pasul 4 pentru autentificarea plătitorului.
    • RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS: 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.
  • data.authenticationVersion
    Returnează 3DS2 dacă autentificarea este disponibilă.
Exemplu de solicitare 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, and so on.
        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);
		
Exemplu de răspuns Initiate Authentication
{ 
   "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 Copied to Clipboard

Dacă răspunsul INITIATE AUTHENTICATION a indicat că autentificarea este disponibilă (transaction.authenticationStatus=AUTHENTICATION_AVAILABLE), vă puteți autentifica plătitorul. Invocați funcția authenticatePayer() când plătitorul face clic pe butonul Plătiți acum de pe pagina de validare. Funcția apelează solicitarea AUTHENTICATE PAYER a API-ului de autentificare a plătitorului.

Trebuie să invocați funcția authenticatePayer() furnizând următoarele argumente obligatorii:

  • orderId
    Același ID de comandă pe care l-ați folosit în funcția initiateAuthentication() precedentă.
  • transactionId
    Același ID de tranzacție pe care l-ați folosit în funcția initiateAuthentication() precedentă.
  • callback
    Funcția callback.
  • optionalParams(Optional)
    Câmpuri suplimentare de solicitare AUTENTIFICARE PAYER, cum ar fi facturarea și expedierea.

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

  • data.restApiResponse
    Răspuns brut de la solicitarea de AUTHENTICATE PAYER. Câmpurile returnate depind de fluxul (fluidizat sau cu testare) și de canalul de autentificare definit pentru sesiune. 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 Noțiuni de bază privind sesiunile.
  • data.correlationId
    Ultimul ID de corelare care a fost folosit pentru solicitarea AUTHENTICATE PAYER. Acesta permite corelarea răspunsului cu solicitarea.
  • data.gatewayRecommendation

  • Recomandare cu privire la următoarele acțiuni, bazată pe regulile de filtrare a tranzacțiilor 3DS configurate de dvs. sau your payment service provider:
    • 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, continuați cu decontarea fondurilor și, dacă este cazul, cu expedierea bunurilor.
    • DO_NOT_PROCEED_ABANDON_ORDER:Nu trimiteți din nou aceeași solicitare. PSP, schema sau emitentul vă solicită să renunțați la comandă.
    • RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS: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.
  • data.htmlRedirectCode
    Cod de redirecționare. Dacă gatewayRecommendation este PROCEED, introduceți acest cod în pagina afișată plătitorului.

Dacă gateway-ul vă recomandă să PROCEED:

  • Dacă ACS a selectat un flux fluidizat pentru plătitor, acesta redirecționează browserul plătitorului înapoi către site-ul dvs. web și puteți trece la pasul 5 pentru a trimite o altă plată către gateway. Gateway-ul obține datele de autentificare legate de plată și se asigură că plățile sunt procesate numai dacă toate regulile de filtrare a tranzacțiilor 3DS (configurate de dvs. sau your payment service provider) au fost satisfăcute.
  • Dacă ACS a selectat un flux cu testare pentru plătitor, redirecționați plătitorul către ACS utilizând câmpul htmlRedirectCode indicat în răspuns. După finalizarea provocării, ACS redirecționează plătitorul înapoi către site-ul dvs. și declanșează un apel invers care conține câmpurile orderId, transactionId, gatewayRecommendation și restApiResponse. Determinați rezultatul testării pe baza câmpului gatewayRecommendation. Se aplică aceleași reguli ca cele descrise mai sus pentru răspunsul la funcția authenticatePayer(). Dacă recomandarea este PROCEED, continuați cu Pasul 5.
Exemplu de solicitare 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));
}

	
Exemplu de răspuns Authenticate Payer
{
   "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"
}

Integrări avansate

Solicitarea trimisă de browserul plătitorului către site-ul dvs. web la finalizarea metodei authenticatePayer() este parametrizată într-un mod care să permită determinarea rezultatului autentificării. Fiecare câmp de autentificare, cum ar fi authentication.3ds2.transactionStatus.data, poate fi util pentru o integrare avansată sau dacă trebuie să furnizați datele de autentificare într-o plată procesată printr-un alt gateway. Pentru mai multe detalii, vedeți Cum implementez integrările avansate ale sesiunilor de plată?

Pasul 5: Utilizarea autentificării într-o plată Copied to Clipboard

Când rezultatul funcției authenticatePayer() indică faptul că puteți continua cu plata (gatewayRecommendation=PROCEED), puteți iniția o operațiune WS API AUTHORIZE sau PAY. În plus față de câmpurile standard, trebuie să completați următoarele câmpuri:

  • order.id
    Folosiți același orderId pe care l-ați furnizat în funcțiile initiateAuthentication() și authenticatePayer().
  • authentication.transactionId: Utilizați același transactionId pe care l-ați furnizat pentru funcțiile initiateAuthentication() și authenticatePayer(). Nu trebuie să includeți niciunul dintre câmpurile din obiectul authentication, deoarece gateway-ul folosește authentication.transactionId pentru a căuta rezultatele de autentificare pe care le-a stocat atunci când i-ați cerut să efectueze autentificarea. Gateway-ul transmite achizitorului informațiile solicitate.
Exemplu de solicitare Pay
URL https://mtf.gateway.mastercard.com/api/rest/version/<version>/merchant/<your_merchant_ID>/order/<your_order_ID>/transaction/<your_transaction_ID>
Metoda HTTP PUT
 
   {
      "apiOperation":"PAY",
      "authentication":{
          "transactionId":"<your_transaction_ID>"
      },
      "session": {
          "id": "<your_session_id>"
      },
      "transaction":{
          "reference":"<your_order_ID>"
      }
  } 
  
	
Exemplu de răspuns de plată
{
   "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"
}