Plăți cu card cadou

eGenius Platform vă permite să oferiți carduri cadou ca metodă de plată pentru plătitorii dvs.

Cerințe preliminare

  • Trebuie să vă înscrieți ca furnizor terț de carduri.
  • Furnizorul dvs. de servicii de plată trebuie să vă configureze profilul de comerciant de pe eGenius Platform folosind detaliile contului dvs. de furnizor terț.

Adăugarea cardurilor cadou în integrarea dvs.

Gateway-ul oferă trei opțiuni de integrare a cardurilor cadou pe pagina dvs. de plată:

Carduri cadou prin Hosted Checkout

Dacă aveți deja o integrare Hosted Checkout, puteți utiliza Hosted Checkout pentru a verifica detaliile cardurilor cadou.

Puteți face acest lucru configurând interaction.operation=VERIFY în solicitarea Create Checkout Session. Hosted Checkout va afișa cardul-cadou ca opțiune de plată pentru plătitor. Datele introduse de plătitor sunt verificate prin metodele de verificare acceptate de achizitorul configurat.

Puteți afla succesul operațiunii de verificare comparând resultIndicator și successIndicator. Dacă interacțiunea a eșuat, Hosted Checkout afișează un mesaj care indică faptul că verificarea a eșuat și afișează un mesaj solicitând plătitorului să încerce din nou.

Carduri cadou prin Hosted Session

Dacă aveți propria dvs. pagină de plată, puteți alege opțiunea de integrare Hosted Session pentru a permite eGenius Platform să captureze în mod securizat detaliile cardului cadou și să le stocheze într-o sesiune de plată.

Exemplu de cod pentru colectarea detaliilor cardurilor cadou
<html>
<head>
<!-- INCLUDE SESSION.JS JAVASCRIPT LIBRARY -->
<script src="https://egenius.unicredit.ro/form/version/72/merchant/<MERCHANTID>/session.js"></script>
<!-- APPLY CLICK-JACKING STYLING AND HIDE CONTENTS OF THE PAGE -->
<style id="antiClickjack">body{display:none !important;}</style>
</head>
<body>

<!-- CREATE THE HTML FOR THE PAYMENT PAGE -->

<div>Please enter your Gift Card details:</div>
<div>Card Number: <input type="text" id="gift-card-number" class="input-field" value="" readonly></div>
<div>Pin:<input type="text" id="gift-card-pin" class="input-field" value="" readonly></div>
<div><button id="payButton" onclick="pay();">Pay Now</button></div>

<!-- JAVASCRIPT FRAME-BREAKER CODE TO PROVIDE PROTECTION AGAINST IFRAME CLICK-JACKING -->
<script type="text/javascript">
if (self === top) {
    var antiClickjack = document.getElementById("antiClickjack");
    antiClickjack.parentNode.removeChild(antiClickjack);
} else {
    top.location = self.location;
}

PaymentSession.configure({
    fields: {
        // ATTACH HOSTED FIELDS TO YOUR PAYMENT PAGE FOR A GIFT CARD
        giftCard: {
        	number: "#gift-card-number",
        	pin: "#gift-card-pin",
        }
    },
    //SPECIFY YOUR MITIGATION OPTION HERE
    frameEmbeddingMitigation: ["javascript"],
    callbacks: {
        initialized: function(response) {
            // HANDLE INITIALIZATION RESPONSE
        },
        formSessionUpdate: function(response) {
            // HANDLE RESPONSE FOR UPDATE SESSION
            if (response.status) {
                if ("ok" == response.status) {
                    console.log("Session updated with data: " + response.session.id);
  
                } else if ("fields_in_error" == response.status)  {
  
                    console.log("Session update failed with field errors.");
                    if (response.errors.number) {
                        console.log("Gift card number invalid or missing");
                    }
                    if (response.errors.pin) {
                        console.log("Pin invalid.");
                    }
                } else if ("request_timeout" == response.status)  {
                    console.log("Session update failed with request timeout: " + response.errors.message);
                } else if ("system_error" == response.status)  {
                    console.log("Session update failed with system error: " + response.errors.message);
                }
            } else {
                console.log("Session update failed: " + response);
            }
        }
      }
  });

function pay() {
    // UPDATE THE SESSION WITH THE INPUT FROM HOSTED FIELDS
    PaymentSession.updateSessionFromForm('giftCard', '<localCardBrand>');
}
</script>
</body>
</html>
   
  1. Includeți biblioteca JavaScript client session.js găzduită de gateway în pagina dvs. de plată. Calea către acest fișier include atât versiunea API, cât și identificatorul comerciantului pentru sesiune.
  2. Creați codul HTML pentru pagina de plată care conține câmpurile cardului cadou.
    Pentru a preveni trimiterea datelor sensibile către server, asigurați-vă că toate câmpurile cu date sensibile sunt readonly și NU au atributul name .
  3. Invocați funcția PaymentSession.configure(configuration).

    Obiectul configuration vă permite să anexați câmpuri găzduite paginii dvs. de plată. Este necesar să furnizați următoarele:

    • sesiunea (opțional); dacă nu o furnizați, biblioteca client va crea o sesiune de plată.
    • selectoarele de câmpuri pentru câmpurile cardului cadou; odată furnizate, acestea sunt înlocuite cu câmpurile proxy corespunzătoare încorporate în cadrele iFrame găzduite de eGenius Platform. Câmpurile proxy vor avea același aspect și stil cu cele ale câmpurilor înlocuite.
    • opțiuni de neutralizare a fraudării prin clickjacking

      Clickjackingul, cunoscut și sub numele de „atac prin mascarea IU” este o metodă prin care atacatorul utilizează mai multe straturi transparente sau opace pentru a determina utilizatorul să facă clic pe un buton sau un link către o altă pagină atunci când acesta intenționează să facă clic pe pagina de nivel superior. Pentru a utiliza Hosted Session, trebuie să implementați unul sau mai multe dintre următoarele mijloace de protecție împotriva atacurilor prin clickjacking.

      Opțiunea de neutralizare a cadrelor Implementare
      javascript includeți codul JavaScript „frame-breaker” pe pagina dvs. de plată.
      x-frame-options serverul dvs. trebuie să returneze un antet de răspuns HTTP cu opțiuni X-Frame.
      csp serverul dvs. trebuie să returneze un antet de răspuns HTTP cu politica de securitate a conținutului, care să includă o directivă de tip frame-ancestors.

      Trebuie să specificați mijloacele de protecție implementate prin parametrul frameEmbeddingMitigation din apelul PaymentSession.configure(configuration). Pentru informații privind protecția împotriva atacurilor prin clickjacking, consultați Ghidul de protecție împotriva atacurilor prin clickjacking de pe site-ul web extern OWASP.

    • funcțiile callback pentru gestionarea diferitelor evenimente din timpul interacțiunii cu Hosted Session
      • initialized( ): invocate când câmpurile găzduite sunt atașate paginii dvs. de plată.
      • formSessionUpdate( ): invocate ca reacție la funcția PaymentSession.updateSessionFromForm('giftCard', <localCardBrand>) (a se vedea pasul următor)

  4. Invocați PaymentSession.updateSessionFromForm('giftCard', <localCardBrand>) pentru a stoca detaliile colectate ale cardului cadou într-o sesiune de plată. După finalizarea operațiunii, funcția callback formSessionUpdate( ) este invocată cu un parametru de rezultat. Trebuie să verificați valoarea result.status pentru a determina dacă operațiunea a avut succes. Consultații secțiunea Gestionarea răspunsurilor callback.
  5. Puteți utiliza sesiunea de plată returnată (session.id) pentru a efectua o creare de simbol sau o tranzacție de plată atunci când este necesar. Pentru mai multe informații, consultați secțiunea Realizarea unei operațiuni prin utilizarea sesiunii.

Referința session.js[JavaScript]

Carduri cadou prin Direct Payment

Dacă doriți controlul total asupra interacțiunii cu cardurile cadou de pe pagina dvs. de plată, puteți alege opțiunea Direct Payment.

Cardurile cadou sunt acceptate de API începând cu versiunea 31.
Solicitarea unei autorizări sau plăți care utilizează un card cadou

Trebuie să completați următoarele câmpuri în solicitarea Authorize:

  • sourceOfFunds.type=GIFT_CARD
  • sourceOfFunds.provided.giftCard.number: Număr card cadou.
  • sourceOfFunds.provided.giftCard.pin: Cod PIN card cadou. (Nu este întotdeauna obligatoriu, în funcție de cardul cadou.)
  • order.amount: Suma de plată.
  • order.currency: Moneda de plată.
  • order.acceptPartialAmount: (Opțional) Indică dacă sunteți pregătit să acceptați cardul pentru plata parțială a sumei totale. Valoarea implicită pentru acest câmp este FALSE.

În plus față de câmpurile standard, vor fi returnate următoarele câmpuri pentru efectuarea cu succes a autorizării:

  • sourceOfFunds.type: GIFT_CARD, oglindește solicitarea dvs.
  • sourceOfFunds.provided.giftCard.number: Număr card cadou (mascat).
  • sourceOfFunds.provided.giftCard.pin: Codul PIN al cardului cadou (complet ascuns).
  • sourceOfFunds.provided.giftCard.scheme: Organizația care deține un tip de card cadou și definește regulamentele de operare pentru utilizarea sa.
  • sourceOfFunds.provided.giftCard.brand: Tipul (brandul) cardului utilizat pentru a descrie cardul cadou, recunoscut și acceptat la nivel mondial. Pentru multe dintre tipurile principale de carduri acesta este identic cu numele schemei.
  • sourceOfFunds.provided.giftCard.localBrand: Tipul cardului utilizat pentru a descrie un card cadou, cum a fost stabilit de gateway pe baza intervalului cod BIN al cardului.
  • availableBalance.funds.amount: Suma disponibilă plătitorului pentru plată utilizând acest card cadou după această plată. (Accesul la această informație depinde de furnizorul terț.)
  • availableBalance.funds.currency: Moneda soldului disponibil de pe card, exprimată sub forma unui cod alfabetic ISO 4217, cum ar fi USD.
  • order.amount: Suma acceptată. Rețineți că aceasta poate fi mai mică decât suma solicitată, în cazul în care cardul nu are fonduri suficiente și dvs. ați setat order.acceptPartialAmount=TRUE.
  • transaction.requestedAmount: Dacă tranzacția a fost parțial aprobată (response.gatewayCode=PARTIALLY_APPROVED), acesta conține suma solicitată inițial.

    Dacă ați setat order.acceptPartialAmount=TRUE atunci transaction.amount și order.amount sunt setate cu valoarea sumei aprobate în fapt.
Verificarea cardurilor cadou

Puteți verifica dacă un card cadou cu un număr de card și un cod PIN furnizate este un card cadou valid, emis de către furnizor prin trimiterea unei solicitări APIVERIFY.

Referință API verificare [REST][NVP]

Balance Inquiry

Puteți interoga soldul disponibil de pe un card cadou trimițând o solicitare API BALANCE_INQUIRY. Trebuie să completați următoarele câmpuri în solicitare:

  • sourceOfFunds.type=GIFT_CARD
  • sourceOfFunds.provided.card.number: Numărul cardului cadou pentru care solicitați informații privind soldul.

Referință API Balance Inquiry[REST][NVP]

Administrarea aprobărilor parțiale

Dacă sunteți pregătit să acceptați aprobarea unei plăți parțiale cu un card cadou pentru o tranzacție, trebuie să trimiteți order.acceptPartialAmount=TRUE în cadrul solicitării dvs. În acest caz, aveți responsabilitatea de a crea o altă tranzacție pentru soldul rămas, utilizând o altă metodă de plată.

Dacă nu sunteți pregătit să face acest lucru, setați order.acceptPartialAmount=FALSE în solicitarea dvs. Dacă pe cardul cadou nu există fonduri suficiente, eGenius Platform va răspunde cu response.gatewayCode=INSUFFICIENT_FUNDS.

Referință API Detalii card[REST][NVP]

Testare și activare

Vă puteți testa integrarea cardurilor cadou utilizându-vă profilul de testare comerciant.

Copyright © 2023 UniCredit Bank