Integration Types
Alte caracteristici
Card Payments
Mobile Wallets
Alternative Payment Methods
Resources
Puteți vizualiza detaliile de autentificare atât pentru autentificările individuale, cât și pentru cele care au continuat cu efectuarea plății pe portalul Merchant Administration. Căutați comanda sau tranzacția pe pagina de căutare și consultați detaliile autentificării.
Dacă doriți să vedeți detaliile unei autentificări 3DS1, de exemplu, pentru a vedea datele din câmpuri precum PARes, PAReq, utilizați funcția de căutare Autentificări de pe portalul Merchant Administration.
Dacă utilizați API-ul de autentificare, puteți vedea detaliile de autentificare pe portalul Merchant Administration când autentificarea plătitorului este finalizată. Dacă autentificarea plătitorului nu este încă finalizată, este posibil să observați o întârziere în tranzacția de autentificare care se afișează atunci când căutați o comandă sau o tranzacție pe portalul Merchant Administration. De exemplu, trecerea printr-un flux de provocări.
Între timp, puteți prelua starea curentă a autentificării utilizând operația Retrieve Order sau Retrieve Transaction.
Dacă doriți să recuperați rezultatele autentificării, în orice moment, utilizați operațiunea Retrieve Transaction. Rețineți că acele câmpuri care sunt utilizate numai în timpul autentificării, cum ar fi authentication.redirect.html
, nu rămân pe gateway și, prin urmare, nu vor fi returnate.
Dacă ați utilizat un MPI 3DS extern pentru a autentifica plătitorul, trebuie să furnizați informațiile referitoare la autentificare în grupul de parametri de autentificare pentru operațiunea Authorize sau Pay.
Toate câmpurile sunt opționale, deoarece, dacă v-au fost sau nu furnizate de către MPI 3DS extern depinde de versiunea de autentificare a tranzacției (3DS1 sau 3DS2) și de starea tranzacției. Dacă, însă, dispuneți de aceste date, este recomandat să le furnizați.
authentication.3ds.acsEci
: Indicatorul de comerț electronic care vă poate fi returnat în mesajul de răspuns de autentificare.authentication.3ds.authenticationToken
: Valoarea codificată base64 generată de emitentul cardului care vă poate fi returnată în mesajul de răspuns de autentificare.authentication.3ds.transactionId
: Un identificator unic al tranzacției, generat de gateway pentru autentificarea 3DS.authentication.3ds2.protocolVersion
: Versiunea protocolului EMV 3-D Secure utilizat pentru autentificarea 3-D Secure, în formatul specificat de EMVCo. De exemplu, 2.1.0authentication.3ds2.transactionStatus
: Indică rezultatul autentificării plătitorului la emitent.authentication.3ds2.statusReasonCode
: Un cod care indică motivul pentru starea tranzacției, returnată în authentication.3ds2.transactionStatus
. Acesta trebuie furnizat atunci când authentication.3ds2.transactionStatus
returnează N, U sau R.authentication.amount
: Acest câmp este opțional. Indică suma autentificării. Trebuie să completați acest câmp atunci când suma autentificării diferă de order.amount
. Consultați furnizorul de servicii de plată înainte de a completa acest câmp.authentication.time
: Acest câmp este opțional. Indică data și ora autentificării plătitorului. Consultați furnizorul de servicii de plată înainte de a completa acest câmp.authentication.3ds.authenticationToken
.Dacă doriți să efectuați autentificarea doar pentru a verifica identitatea plătitorului, fără procesarea unei plăți, trebuie să indicați scopul autentificării în solicitarea Initiate Authentication
. De exemplu, doriți să autentificați plătitorul după ce acesta introduce detaliile cardului pentru o utilizare ulterioară, în timpul sesiunii de înregistrare a clientului sau de creare a contului pe site-ul dvs. web. Abilitatea de a finaliza procesul de autentificare într-un mediu fără plată îmbunătățește experiența plătitorului și reduce frecvența renunțărilor din partea plătitorilor.
Pentru a efectua o autentificare fără plată, trebuie să completați următoarele câmpuri în solicitarea Initiate Authentication
:
Dacă schema de autentificare nu acceptă scopul solicitat, gateway-ul returnează AUTHENTICATION_NOT_SUPPORTED
drept răspuns. Rețineți că gateway-ul setează implicit acest câmp la PAYMENT_TRANSACTION
pentru a permite autentificarea care va fi utilizată pentru o tranzacție de plată.
Comercianții agregatori pot activa utilizarea API-ului de autentificare pe gateway de către sub-comercianții lor. Nu este necesar ca sub-comercianții să aibă o relație contractuală cu achizitorul sau gateway-ul. Comerciantul agregator poate trimite detaliile sub-comercianților necesare pentru inițierea autentificării prin operațiunea Initiate Authentication
. Pentru mai multe informații, consultați secțiunea Asistența pentru agregatori.
API-ul de autentificare înregistrează detaliile de autentificare a plătitorului folosind 3DS2 ca tranzacție AUTHENTICATION separată în cadrul comenzii.
Când apelați o comandă folosind operațiunea Retrieve Order sau primiți un răspuns Reporting API, acesta poate conține o tranzacție AUTHENTICATION suplimentară. De asemenea, dacă utilizați Notificări Webhook, puteți primi o notificare suplimentară pentru tranzacția AUTHENTICATION.
Pentru detalii privind tranzacțiile AUTHENTICATION, consultați lista de parametri de răspuns pentru operațiunea Authenticate Payer.
Puteți utiliza simboluri din rețea pentru autentificarea plătitorului începând cu API v57. În prezent, eGenius Platform acceptă numai procesarea simbolurilor din rețea obținute de la următorii furnizori de servicii de creare de simboluri: Mastercard Digital Enablement Service (MDES), Visa Token Service (VTS).
Dacă ați obținut un simbol în rețea prin integrarea directă în furnizorul de servicii de creare de simboluri, atunci trebuie să furnizați detaliile simbolului folosind următoarele câmpuri:
sourceOfFunds.type=SCHEME_TOKEN
: Permite gateway-ului să identifice sursa fondurilor, introdusă în solicitare sub forma unui simbol din rețea. MDES și VTS sunt acceptate din API v51 și respectiv v53.sourceOfFunds.provided.card.number
: Simbolul din rețea. Completați valoarea pentru „PAN simbol” în MDES sau „Simbol” în VTS.sourceOfFunds.provided.card.expiry
: (opțional) Data expirării simbolului din rețea. Dacă furnizorul de servicii de plată vă permite crearea de simboluri în rețea, orice solicitare pentru un simbol de pe gateway trimisă de comerciant către gateway va determina și încercarea de generare a unui simbol corespunzător în rețea pentru schemele activate, dacă sunt acceptate de emitentul cardului. Gateway-ul va încerca, de asemenea, crearea de simboluri în rețea pentru orice carduri aplicabile deja stocate în depozitul de simboluri de pe gateway. Solicitarea Initiate Authentication va utiliza simbolul din rețea, dacă este disponibil; în caz contrar, va fi utilizat PAN de finanțare (FPAN) stocat împreună cu simbolul de pe gateway. Acest model acceptă momentan doar simboluri MDES.
Dacă ați utilizat o sesiune de plată (ID sesiune) pentru a stoca detaliile de autentificare, solicitarea POST trimisă de browserul plătitorului către site-ul dvs. web la finalizarea solicitării Authenticate Payer va fi parametrizată, permițându-vă să determinați rezultatul 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. În acest scop, puteți trimite solicitarea Retrieve Transaction sau puteți alege să decriptați datele de autentificare criptate (a se vedea pașii de mai jos):
encryptedData
. Acesta este un obiect JSON criptat conținând datele de autentificare obținute în timpul procesului de autentificare. Acesta conține următoarele câmpuri:
encryptedData.ciphertext
authentication.3ds.acsEci
authentication.3ds.authenticationToken
authentication.3ds.transactionId
authentication.3ds1.veResEnrolled
authentication.3ds1.paResStatus
authentication.3ds2.transactionStatus
authentication.3ds2.dsTransactionId
transaction.authenticationStatus
authentication.3ds2.statusReasonCode
sourceOfFunds.provided.card.number
sourceOfFunds.provided.card.expiry.month
sourceOfFunds.provided.card.expiry.year
sourceOfFunds.token
order.id
transaction.id
encryptedData.nonce
encryptedData.tag
public final class SessionDataDecrypter { /** * The algorithm used for encryption/decryption */ private static final String SYMMETRIC_ALGORITHM = "AES/GCM/NoPadding"; /** * The algorithm to be associated with the secret key material */ private static final String SYMMETRIC_KEY_TYPE = "AES"; /** * The secret key associated with the session, as returned in the session.aes256Key in a Create Session response. */ private final byte[] key; /** * Constructs a new object with the given key. The key is Base64 encoded, as returned in the session.aes256Key * field in a Create Session response. This key must be kept secret, as it may be used to encrypt, decrypt and * authenticate data for that session. * * @param encodedKey Key to be used for decryption. */ public SessionDataDecrypter(String encodedKey) { key = Base64.getDecoder().decode(encodedKey); } /** * Performs decryption of the given ciphertext, using the key passed in the constructor and the associated nonce. * The tag is used to authenticate the ciphertext. * * @param ciphertext Encrypted and authenticated session data * @param nonce Nonce/Initialization vector associated with the ciphertext * @param tag Authentication tag * @return The decrypted session data * @throws AEADBadTagException if the data cannot be authenticated with the given tag * @throws InvalidKeyException if the key cannot be constructed properly. This may indicate that it has not been * correctly retrieved from the response field * @throws GeneralSecurityException other than {@link AEADBadTagException} and {@link InvalidKeyException}, should * not be thrown in a correctly set up environment */ public String decrypt(String ciphertext, String nonce, String tag) throws GeneralSecurityException { Key keySpec = new SecretKeySpec(key, SYMMETRIC_KEY_TYPE); // The Java crypto classes expect the ciphertext and tag to be a single input, so they need to be concatenated byte[] encryptedBytes = Base64.getDecoder().decode(ciphertext); byte[] tagBytes = Base64.getDecoder().decode(tag); byte[] input = new byte[encryptedBytes.length + tagBytes.length]; System.arraycopy(encryptedBytes, 0, input, 0, encryptedBytes.length); System.arraycopy(tagBytes, 0, input, encryptedBytes.length, tagBytes.length); // Configure the cipher with AES, using GCM parameter specifying the nonce/initialization vector byte[] iv = Base64.getDecoder().decode(nonce); GCMParameterSpec parameterSpec = new GCMParameterSpec(tagBytes.length * Byte.SIZE, iv); final Cipher decrypter = Cipher.getInstance(SYMMETRIC_ALGORITHM); decrypter.init(Cipher.DECRYPT_MODE, keySpec, parameterSpec); // Perform the decryption and return the value. byte[] decryptedBytes = decrypter.doFinal(input); return new String(decryptedBytes, StandardCharsets.UTF_8); } }
Solicitarea Authenticate Payer poate necesita un volum mare de informații despre plătitor și tranzacție. De exemplu, puteți furniza următoarele date în solicitare, utilizând câmpurile din grupul de parametri customer.account
, ceea ce va permite ACS-ului emitentului să evalueze nivelul de risc asociat cu activitatea. Acest lucru înseamnă că, în cazul plăților legitime, ACS poate confirma faptul că plătitorul este, cel mai probabil, posesorul real al cardului.
customer.account.history.creationDate
customer.account.history.lastUpdated
customer.account.history.passwordLastChanged
customer.account.history.addCardAttempts
customer.account.history.annualActivity
customer.account.history.recentActivity
customer.account.history.shippingAddressDate
customer.account.history.issuerAuthentication.acsTransactionId
customer.account.history.issuerAuthentication.time
customer.account.history.issuerAuthentication.type
customer.account.history.suspiciousActivity
customer.account.authentication.method
customer.account.authentication.time
Puteți, de asemenea, să furnizați următoarele câmpuri recomandate pentru fiecare schemă de carduri din solicitarea Authenticate Payer. Rețineți că această listă nu este definitivă și poate fi modificată.
Câmp | Mastercard | Visa | American Express | Note |
---|---|---|---|---|
shipping.contact.email | - | - | Y | Necesar pentru calcularea riscului comerciantului |
shipping.method | - | - | Y | Necesar pentru calcularea riscului comerciantului |
order.valueTransfer.amount | - | - | Y | Necesar pentru calcularea riscului comerciantului. Se aplică numai cardurilor cadou. |
order.valueTransfer.numberOfCards | - | - | Y | Necesar pentru calcularea riscului comerciantului. Se aplică numai cardurilor cadou. |
order.valueTransfer.currency | - | - | Y | Necesar pentru calcularea riscului comerciantului. Se aplică numai cardurilor cadou. |
order.supply.preorderAvailabilityDate | - | - | Y | Necesar pentru calcularea riscului comerciantului |
order.supply.preorder | - | - | Y | Necesar pentru calcularea riscului comerciantului |
order.supply.reorder | - | - | Y | Necesar pentru calcularea riscului comerciantului |
order.valueTransfer.accountType | - | Y | - | Este impus de Visa și alte scheme pe anumite piețe (de ex., Brazilia). Nu se aplică dacă order.valueTransfer.accountType=NOT_A_TRANSFER |
Gateway-ul furnizează starea de autentificare în câmpul transaction.authenticationStatus
. Acest câmp poate returna una dintre următoarele valori, în funcție de etapa autentificării:
AUTHENTICATION_ATTEMPTED
: S-a încercat autentificarea plătitorului și a fost obținută o dovadă a tentativei de autentificare.AUTHENTICATION_AVAILABLE
: Autentificarea plătitorului este disponibilă pentru metoda de plată furnizată.AUTHENTICATION_FAILED
: Plătitorul nu a fost autentificat. Nu trebuie să continuați tranzacția.AUTHENTICATION_NOT_SUPPORTED
: Metoda de autentificare solicitată nu este acceptată pentru această metodă de plată.AUTHENTICATION_NOT_IN_EFFECT
: Nu există informații de autentificare asociate cu această tranzacție.AUTHENTICATION_PENDING
: Autentificarea plătitorului se află în așteptarea finalizării unui proces de testare.AUTHENTICATION_REJECTED
: Emitentul a respins solicitarea de autentificare și a solicitat să nu încercați autorizarea unei plăți.AUTHENTICATION_REQUIRED
: Autentificarea plătitorului este obligatorie pentru plata respectivă, însă nu a fost furnizată.AUTHENTICATION_SUCCESSFUL
: Plătitorul a fost autentificat cu succes.AUTHENTICATION_UNAVAILABLE
: Plătitorul nu a putut fi autentificat din cauza unei probleme tehnice sau de altă natură.Da, puteți evita autentificarea 3DS pentru plătitori atunci când asiguratorul extern al riscului consideră că plata are un nivel scăzut de risc. Pentru mai multe informații despre omiterea autentificării 3DS, consultați 3DS dinamic.
Pentru a utiliza tranzacțiile recurente împreună cu autentificarea, consultați Acreditare înregistrată, tranzacții inițiate de posesorul cardului și de comerciant.
Puteți utiliza simboluri ale plăților de pe dispozitiv pentru autentificarea plătitorului începând din API v55. Sunt acceptate numai simbolurile de plată obținute din SDK-ul Google Pay. Puteți furniza un simbol de plată criptat sau codul „PAN” obținut dintr-un simbol de plată decriptat pentru autentificarea plătitorului. Gateway-ul acceptă numai solicitările de autentificare care conțin un FPAN; cele care conțin coduri DPAN vor fi respinse. Pentru a furniza detaliile cardului prin simboluri de plată, completați câmpul de mai jos:
order.walletProvider
=GOOGLE_PAY
sourceOfFunds.provided.card.devicePayment.paymentToken
: Se aplică numai dacă simbolul de plată este decriptat de către gateway. Este simbolul criptat al plății obținut din SDK-ul Google Pay.sourceOfFunds.provided.card.number
: Se aplică doar dacă simbolul de plată este decriptat de către dvs. Valoarea care corespunde cheii JSON „pan” din Google Pay.Înainte de a iniția autentificarea plătitorului, puteți obține o cotație de schimb Conversie valutară dinamică (DCC) de la furnizorul DCC prin trimiterea solicitării Payment Options Inquiry.
Dacă furnizorul DCC a făcut o ofertă, ați transmis această ofertă plătitorului, iar plătitorul a acceptat-o, în solicitarea Initiate Authentication va trebui să includeți următoarele:
Dacă plătitorul a refuzat oferta, în solicitarea Initiate Authentication, indicați:
Dacă DCC nu este necesară pentru această tranzacție, trimiteți solicitarea Initiate Authentication cu:
Dacă sunteți configurat(ă) să utilizați DCC și nu furnizați currencyConversion.uptake
în solicitarea Initiate Authentication, răspunsul Initiate Authentication indică currencyConversion.uptake=NOT_REQUIRED
.
Dacă plătitorul acceptă oferta DCC, procesul de autentificare a plătitorului utilizează moneda plătitorului și suma plătitorului. În toate celelalte cazuri, procesul de autentificare a plătitorului utilizează valoarea comenzii și moneda comenzii.
Puteți utiliza informațiile DCC furnizate în solicitarea Initiate Authentication pe solicitarea de plată ulterioară făcând referire la tranzacția de autentificare, adică authentication.transactionId. Informațiile DCC transmise în timpul autentificării plătitorului se vor aplica tranzacției dvs. de plată.
De asemenea, puteți alege să trimiteți aceleași informații DCC pentru autentificare, precum și pentru tranzacția de plată ulterioară.
Dacă tranzacția de plată ulterioară, care face referire la tranzacția de autentificare, conține informații DCC diferite, tranzacția de plată este respinsă.