- Ghid de integrare
- Caracteristici acceptate (Securitate)
- Autentificarea plătitorului pentru RuPay
- Implementarea autentificării RuPay cu ajutorul API de autentificare
Implementarea autentificării RuPay folosind API-ul de autentificare
Această pagină descrie modul de integrare pe gateway pentru utilizarea autentificării RuPay cu ajutorul API de autentificare.
Flux 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 pentru o autentificare RuPay efectuată cu succes este următorul:
- 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.
- Inițierea autentificării: Solicitați gateway-ului să verifice în RuPay PaySecure dacă respectivul card este eligibil pentru autentificarea RuPay a plătitorului.
- Dacă autentificarea RuPay a plătitorului este disponibilă, gateway-ul returnează detaliile de autentificare în cadrul răspunsului.
- 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.
- Gateway-ul returnează URL-ul de redirecționare și ID-ul tranzacției de autentificare RuPay din RuPay PaySecure, în răspunsul Authenticate Payer.
- 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.
- Utilizarea ID-ului unei tranzacții de autentificare RuPay într-o operațiune de plată: Trimiteți plata pentru procesare.
- 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]
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.
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 |
---|---|---|---|---|
|
PROCEED | AUTHENTICATION_AVAILABLE | AUTHENTICATION_IN_PROGRESS | SUCCESS |
|
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS | AUTHENTICATION_NOT_SUPPORTED | DECLINED | FAILURE |
|
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS | AUTHENTICATION_UNAVAILABLE | DECLINED | FAILURE |
|
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS | AUTHENTICATION_NOT_SUPPORTED | DECLINED | FAILURE |
|
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS | AUTHENTICATION_UNAVAILABLE | DECLINED | FAILURE |
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" } } } }
{ "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: Autentificare plătitor
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.
Referința API Authenticate Payer [REST] [NVP]
Trebuie să trimiteți această operațiune completând următoarele câmpuri obligatorii:
- order.id: Aceeași valoare order.id cu cea din operațiunea Initiate Authentication precedentă.
- 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.
- device.ipAddress: Adresa IP a dispozitivului folosit de plătitor, în format IPv4 nnn.nnn.nnn.nnn. Formatul IPv6 nu este acceptat.
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 |
---|---|---|---|---|---|
|
PROCEED | AUTHENTICATION_PENDING | REQUIRED | PENDING | PENDING |
|
DO_NOT_PROCEED_ABANDON_ORDER | AUTHENTICATION_REJECTED | NOT_REQUIRED | DECLINED | FAILURE |
|
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS | AUTHENTICATION_UNAVAILABLE | NOT_POSSIBLE | DECLINED | FAILURE |
|
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS | AUTHENTICATION_UNAVAILABLE | NOT_POSSIBLE | DECLINED | FAILURE |
|
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS | AUTHENTICATION_UNAVAILABLE | NOT_POSSIBLE | DECLINED | FAILURE |
|
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 decontarea 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 |
---|---|---|---|---|---|
|
PROCEED | AUTHENTICATION_SUCCESSFUL | REQUIRED | APPROVED | SUCCESS |
|
RESUBMIT_WITH_ALTERNATIVE_PAYMENT_DETAILS | AUTHENTICATION_FAILED | REQUIRED | DECLINED | FAILURE |
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" } }
{ "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]
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" } }
{ "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" }