Implementarea autentificării RuPay cu ajutorul API de autentificare

Această pagină descrie modul de integrare pe gateway pentru utilizarea autentificării RuPay cu ajutorul API de autentificare.

Procesul de autentificare RuPay

Diagrama de mai jos ilustrează procesul de autentificare pentru o plată în cazul căreia plătitorul este autentificat prin RuPay PaySecure.

Procesul de autentificare RuPay

Procesul de autentificare pentru o autentificare RuPay efectuată cu succes este următorul:

  1. Un plătitor navighează pe site-ul magazinului dvs., selectează unul sau mai multe produse, continuă către pagina de plată și selectează ca metodă de plată un card RuPay care acceptă RuPay PaySecure.
  2. Inițierea autentificării: Solicitați gateway-ului să verifice în RuPay PaySecure dacă respectivul card este eligibil pentru autentificarea RuPay a plătitorului.
  3. Dacă autentificarea RuPay a plătitorului este disponibilă, gateway-ul returnează detaliile de autentificare în cadrul răspunsului.
  4. Autentificarea plătitorului: Solicitați gateway-ului să efectueze autentificarea inițiată. Aceasta trebuie invocată atunci când plătitorul face clic pe butonul „Plătiți acum” de pe pagina de validare.
  5. Gateway-ul returnează URL-ul de redirecționare și ID-ul tranzacției de autentificare RuPay din RuPay PaySecure, în răspunsul Authenticate Payer.
  6. Redirecționați browserul web al plătitorului către emitent, unde plătitorul își validează parola OTP. Emitentul returnează rezultatul autentificării către gateway. Gateway-ul redirecționează plătitorul direct către site-ul dvs. web.
  7. Utilizarea ID-ului unei tranzacții de autentificare RuPay într-o operațiune de plată: Trimiteți plata pentru procesare.
  8. Afișați pentru plătitor pagina de confirmare a comenzii.

Integrarea pentru utilizarea autentificării RuPay a plătitorului

Această secțiune descrie modul de integrare pe gateway pentru utilizarea autentificării RuPay a plătitorului.

Pasul 1: Inițierea autentificării

Operațiunea Initiate Authentication este utilizată pentru a determina dacă autentificarea RuPay a plătitorului este disponibilă pentru comerciant și cardul respectiv. Dacă tipul cardului este RuPay, gateway-ul determină eligibilitatea codului BIN al cardului RuPay pentru tranzacțiile de comerț electronic.

Referința API Initiate Authentication [REST] [NVP]

Solicitarea Initiate Authentication

Puteți iniția autentificarea RuPay completând următoarele câmpuri în solicitarea Initiate Authentication:

  • session.id sau sourceOfFunds.provided.card sau sourceOfFunds.token: Detaliile cardului utilizat pentru plată
  • order.currency: Moneda comenzii.
  • transaction.id: Un identificator unic pentru autentificarea plății.
  • order.id: Identificatorul unic al comenzii.
Răspunsul Initiate Authentication

Dacă autentificarea RuPay a plătitorului este disponibilă, gateway-ul returnează authentication.version=RUPAY și următoarele câmpuri:

  • response.gatewayCode
  • transaction.authenticationStatus: Furnizează mai multe detalii privind starea de autentificare.
  • result
  • response.gatewayRecommendation

Pentru a determina pasul următor, verificați recomandarea gateway-ului, furnizată în câmpul response.gatewayRecommendation.

response.gatewayRecommendation Pasul următor
PROCEED Puteți continua cu autentificarea plătitorului folosind operațiunea Authenticate Payer.
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.

Tabelul de mai jos prezintă răspunsul Initiate Authentication pentru diferitele scenarii de autentificare RuPay.

Stare response.gatewayRecommendation transaction.authenticationStatus response.gatewayCode result
  • Initiate Authentication finalizată
  • Înscris (eligibil pentru comerț electronic)
PROCEED AUTHENTICATION_AVAILABLE AUTHENTICATION_IN_PROGRESS SUCCESS
  • Initiate Authentication finalizată
  • Neînscris (neeligibil pentru comerț electronic)
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS AUTHENTICATION_NOT_SUPPORTED DECLINED FAILURE
  • Expirare timp achizitor
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS AUTHENTICATION_UNAVAILABLE DECLINED FAILURE
  • Răspuns BIN nevalid de la RuPay PaySecure
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS AUTHENTICATION_NOT_SUPPORTED DECLINED FAILURE
  • Dacă RuPay PaySecure nu poate procesa tranzacțiile dintr-un motiv nespecificat.
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS AUTHENTICATION_UNAVAILABLE DECLINED FAILURE
Exemple
Solicitarea Initiate Authentication
URL https://egenius.unicredit.ro/api/rest/version/72/merchant/{merchantId}/order/{orderid}/transaction/{RuPayAuthId}
Metoda HTTP PUT
{
    "apiOperation": "INITIATE_AUTHENTICATION",
    "order": {
        "currency": "INR"
    },

    "sourceOfFunds": {

        "provided": {

            "card": {

                "number": "6074829900004946"
            }
        }
    }
}
	
Răspunsul Initiate Authentication
{
    "authentication": {
        "version": "RUPAY"
    },
    "merchant": "TESTMERCHANT",
    "order": {
        "authenticationStatus": "AUTHENTICATION_AVAILABLE",
        "creationTime": "2019-06-12T07:42:39.070Z",
        "currency": "INR",
        "id": "802014086",
        "merchantCategoryCode": "5411",
        "status": "AUTHENTICATION_INITIATED",
        "totalAuthorizedAmount": 0,
        "totalCapturedAmount": 0,
        "totalRefundedAmount": 0
    },
    "response": {
        "gatewayCode": "AUTHENTICATION_IN_PROGRESS",
        "gatewayRecommendation": "PROCEED"
    },
    "result": "SUCCESS",
    "sourceOfFunds": {
        "provided": {
            "card": {
                "number": "607484xxxxxx4936",
                "scheme": "RUPAY"
            }
        },
        "type": "CARD"
    },
    "timeOfRecord": "2019-06-12T07:42:39.070Z",
    "transaction": {
        "amount": 0,
        "authenticationStatus": "AUTHENTICATION_AVAILABLE",
        "currency": "INR",
        "id": "8286737",
        "type": "AUTHENTICATION"
    },
    "version": "72"
}

Pasul 2: Autentificarea plătitorului

Acolo unde răspunsul la operațiunea Initiate Authentication a indicat disponibilitatea autentificării (authentication.version=RUPAY) pentru cardul RuPay, puteți trimite solicitarea Authenticate Payer. Aceasta trebuie invocată atunci când plătitorul face clic pe butonul „Plătiți acum” de pe pagina de validare.

Operațiunea Authenticate Payer transmite în mod securizat informațiile necesare, inclusiv numărul cardului, între banca achizitoare și RuPay PaySecure. PaySecure returnează un ID unic al tranzacției (tran_ID), care poate fi utilizat pentru operațiunile de autorizare sau plată ulterioare.

Utilizați aceeași versiune a API cu cea din solicitarea Initiate Authentication pentru solicitarea Authenticate Payer.

Referința API Authenticate Payer [REST] [NVP]

Solicitarea Authenticate Payer

Trebuie să trimiteți această operațiune completând următoarele câmpuri obligatorii:

  • order.id: Valoarea order.id trebuie să fie identică cu cea a operațiunii Initiate Authentication precedente.
  • transaction.id: Valoarea transaction.id trebuie să fie identică cu cea a operațiunii Initiate Authentication precedente.
  • order.amount: Valoarea totală a comenzii.
  • order.currency: Moneda comenzii.
  • session.id sau sourceOfFunds.provided.card sau sourceOfFunds.token: Detaliile cardului utilizat pentru plată.
  • authentication.redirectResponseUrl: Adresa URL către care doriți să redirecționați plătitorul după finalizarea procesului Authenticate Payer.
  • device.browserDetails.acceptHeaders: Conținutul câmpului antet al solicitării Accept așa cum este trimis din browserul plătitorului. Acesta este utilizat pentru a determina ce tipuri de conținut sunt acceptate de browser.
Răspunsul Authenticate Payer

Operațiunea Authenticate Payer returnează următoarele câmpuri:

  • response.gatewayCode
  • transaction.authenticationStatus: Furnizează mai multe detalii privind starea de autentificare.
  • authentication.payerInteraction: Indică dacă interacțiunea cu plătitorul a fost utilizată pentru finalizarea procesului de autentificare.
  • result
  • authentication.redirect.html: Cod de creare a IU de autentificare. Introduceți acest conținut într-un element <DIV> gol care reprezintă ultimul element din <CORPUL> paginii de plată.
  • response.gatewayRecommendation

Pentru a determina pasul următor, verificați recomandarea gateway-ului, furnizată în câmpul response.gatewayRecommendation.

response.gatewayRecommendation Pasul următor
PROCEED Puteți continua cu finalizarea procesului de autentificare, permițând plătitorului să răspundă la autentificarea OTP solicitată de emitent.
DO_NOT_PROCEED_ABANDON_ORDER Nu trimiteți din nou aceeași solicitare. Furnizorul de servicii de plată, schema sau emitentul vă solicită să abandonați comanda.
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.

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

Tabelul de mai jos prezintă răspunsul Initiate Authentication pentru diferitele scenarii de autentificare RuPay.

Stare response.gatewayRecommendation transaction.authenticationStatus authentication.payerInteraction response.gatewayCode result
  • Autentificare plătitor realizată cu succes
  • Proces de testare inițiat.
PROCEED AUTHENTICATION_PENDING REQUIRED PENDING PENDING
  • Autentificarea la emitent a eșuat din cauza detaliilor nevalide ale cardului.
DO_NOT_PROCEED_ABANDON_ORDER AUTHENTICATION_REJECTED NOT_REQUIRED DECLINED FAILURE
  • Expirare timp achizitor
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS AUTHENTICATION_UNAVAILABLE NOT_POSSIBLE DECLINED FAILURE
  • Răspuns BIN nevalid de la NPCI
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS AUTHENTICATION_UNAVAILABLE NOT_POSSIBLE DECLINED FAILURE
  • Dacă RuPay PaySecure nu poate procesa tranzacțiile dintr-un motiv nespecificat.
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS AUTHENTICATION_UNAVAILABLE NOT_POSSIBLE DECLINED FAILURE
  • Eroare sistem (eroare tehnică la RuPay PaySecure)
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS AUTHENTICATION_UNAVAILABLE NOT_POSSIBLE DECLINED FAILURE

Autentificare OTP

Gateway-ul redirecționează browserul plătitorului către IU de validare OTP (folosind authentication.redirect.html), unde plătitorului i se va solicita să introducă o OTP validă, după care plătitorul va fi redirecționat înapoi către site-ul dvs. web. Următoarele câmpuri sunt returnate în callback odată ce browserul plătitorului revine la site-ul dvs web.

  • order.id
  • transaction.id
  • result
  • response.gatewayRecommendation

Puteți determina rezultatul autentificării folosind valoarea returnată în câmpul response.gatewayRecommendation.

response.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.
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.

Gateway-ul actualizează câmpurile răspunsului Authenticate Payer după apelarea rezultatelor din cadrul autentificării OTP.

Stare response.gatewayRecommendation transaction.authenticationStatus authentication.payerInteraction response.gatewayCode result
  • Proces de testare realizat cu succes.
PROCEED AUTHENTICATION_SUCCESSFUL REQUIRED APPROVED SUCCESS
  • Proces de testare eșuat; de exemplu, timp expirat, OTP nevalidă etc.
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS AUTHENTICATION_FAILED REQUIRED DECLINED FAILURE
Exemple
Solicitarea Authenticate Payer
URL https://egenius.unicredit.ro/api/rest/version/72/merchant/{merchantId}/order/{orderid}/transaction/{RuPayAuthId}
Metoda HTTP PUT
{
    "apiOperation": "AUTHENTICATE_PAYER",
    "order": {
        "amount": "33.00",
        "currency": "INR"
    },
    "sourceOfFunds": {
        "provided": {
            "card": {
                "number": "6074849900004936",
                "expiry": {
                    "month": "01",
                    "year": "39"
                },
                "securityCode": "111"
            }
        }
    },
    "device": {
        "ipAddress": "103.14.160.193",
        "browser": "MOZILLA/4.0 (COMPATIBLE; MSIE 5.0; WINDOWS 95)",
        "browserDetails": {
            "acceptHeaders": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        }
    },
    "authentication": {
        "redirectResponseUrl": "<host>/merchantSimulator/jsp/simple/output.jsp"
    }
}
	
Răspunsul Authenticate Payer
{
    "authentication": {
        "method": "DYNAMIC",
        "payerInteraction": "REQUIRED",
        "redirectHtml": "document.getElementById('redirectToNpciForm').submit();",
        "version": "RUPAY"
    },
    "merchant": "TESTMERCHANT",
    "order": {
        "authenticationStatus": "AUTHENTICATION_PENDING",
        "creationTime": "2019-06-12T07:53:52.190Z",
        "currency": "INR",
        "id": "983684879",
        "merchantCategoryCode": "5411",
        "status": "AUTHENTICATION_INITIATED",
        "totalAuthorizedAmount": 0,
        "totalCapturedAmount": 0,
        "totalRefundedAmount": 0
    },
    "response": {
        "gatewayCode": "PENDING",
        "gatewayRecommendation": "PROCEED"
    },
    "result": "PENDING",
    "sourceOfFunds": {
        "provided": {
            "card": {
                "expiry": {
                    "month": "1",
                    "year": "39"
                },
                "number": "607484xxxxxx4936",
                "scheme": "RUPAY"
            }
        },
        "type": "CARD"
    },
    "timeOfRecord": "2019-06-12T07:53:52.190Z",
    "transaction": {
        "acquirer": {
            "merchantId": "TESTMERCHANT"
        },
        "amount": 33,
        "authenticationStatus": "AUTHENTICATION_PENDING",
        "currency": "INR",
        "id": "745991098",
        "type": "AUTHENTICATION"
    },
    "version": "72"
}
		

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

Dacă rezultatul operațiunii Authenticate Payer indică faptul că puteți continua plata (response.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 valoarea order.id completată în cadrul operațiunilor Initiate Authentication și Authenticate Payer.
  • authentication.transactionId: Furnizați valoarea transaction.id completată în cadrul operațiunilor Initiate Authentication și Authenticate Payer. 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.

Referință API ID tranzacție de autentificare [REST] [NVP]

Exemple
Solicitare Pay
URL https://egenius.unicredit.ro/api/rest/version/72/merchant/{merchantId}/order/{orderid}/transaction/{transactionid}
Metoda HTTP PUT
{
      "apiOperation":"PAY",
      "order":{
         "amount":"100",
         "currency":"INR"
     },
     "sourceOfFunds":{
         "provided":{
            "card":{
               "expiry":{
                  "month":"01",
                  "year":"39"
               },
               "number":"6074819900004939",
               "securityCode":"111"
            }
         },
         "type":"CARD"
      },
         "authentication": {
           "transactionId":"8286737"
       }
   }
	
Răspuns de plată
	{
        "authentication": {
            "transactionId": "471707320"
        },
        "authorizationResponse": {
            "transactionIdentifier": "500000000000000000000002347854"
        },
        "gatewayEntryPoint": "WEB_SERVICES_API",
        "merchant": "TESTMERCHANT",
        "order": {
            "amount": 100.00,
            "chargeback": {
                "amount": 0,
                "currency": "INR"
            },
            "creationTime": "2019-07-03T09:08:28.309Z",
            "currency": "INR",
            "id": "802014086",
            "merchantCategoryCode": "4511",
            "status": "CAPTURED",
            "totalAuthorizedAmount": 100.00,
            "totalCapturedAmount": 100.00,
            "totalRefundedAmount": 0.00
        },
        "response": {
            "acquirerCode": "00",
            "acquirerMessage": "Success",
            "gatewayCode": "APPROVED"
        },
        "result": "SUCCESS",
        "sourceOfFunds": {
            "provided": {
                "card": {
                    "brand": "RUPAY",
                    "expiry": {
                        "month": "1",
                        "year": "39"
                    },
                    "fundingMethod": "DEBIT",
                    "issuer": "DMBB9990001",
                    "number": "607481xxxxxx4939",
                    "scheme": "RUPAY",
                    "storedOnFile": "NOT_STORED",
                    "tags": "{\"RUPAY_BIN_STATUS_FLAG\":\"ACTIVE\",\"RUPAY_BIN_MESSAGE_TYPE\":\"SMS\"}"
                }
            },
            "type": "CARD"
        },
        "timeOfRecord": "2019-07-03T09:08:28.309Z",
        "transaction": {
            "acquirer": {
                "id": "<acquirer_id>",
                "merchantId": "423555234334123"
            },
            "amount": 100.00,
            "authorizationCode": "143835",
            "currency": "INR",
            "frequency": "SINGLE",
            "id": "108379916",
            "receipt": "918409000035",
            "source": "INTERNET",
            "terminal": "88011019",
            "type": "PAYMENT"
        },
        "version": "72"
    }
	

Copyright © 2023 UniCredit Bank