# Fizetési folyamat (fizetőeszköz-regisztrációhoz)

A fizetési folyamat leírását három részre bontottuk a könnyebb átláthatóság miatt. Az elválasztás alapját a kereskedő boltjából indított három fő lépés adja, ezek a lépések a következők:

A. **`Init`** - a tranzakció inicializálása és a vásárló adatainak átadása rendszerünknek\
B. **`Start`** - a tranzakció indítása és a vásárló átirányítása a fizetési szolgáltatóhoz\
C. **`Result`** - a tranzakció eredményének lekérése rendszerünkből

{% hint style="info" %}
A hármas felosztás ellenére a felsorolt pontok együttesen adják ki a teljes fizetési folyamatot. A felsorolt pontok egy sikeres fizetési folyamatot írnak le.
{% endhint %}

#### **A. `Init` - a tranzakció inicializálása és a vásárló adatainak átadása rendszerünknek**

1. A kereskedő oldala rögzíti a vásárló elektronikus fizetési szándékát,
2. ezután a kereskedő oldala új fizetési tranzakciót kezdeményez rendszerünkben.
3. Rendszerünk hitelesíti a beérkezett kérést (autentikáció),
4. ezután rendszerünk egy egyedi tranzakció azonosítót (`TransactionId`) küld vissza a kereskedőnek (sikeres hitelesítés esetén). Ez a tranzakció azonosító lesz a referencia tranzakció azonosító, amit később a rákövetkező fizetéseknél meg kell adni.
5. A kereskedő oldala tárolja az egyedi referencia tranzakció azonosítót.

Hitelesítés (autentikáció) során rendszerünk a következőket ellenőrzi:

* a kereskedő boltja szerepel rendszerünkben a megadott boltnév (`StoreName`) és API kulcs (`ApiKey`) párossal
* az API kérés a kereskedő által előre megadott IP címről érkezik (az engedélyezett IP címeket a *PayAdmin* felületén adhatja meg a megfelelő jogosultsággal rendelkező felhasználó)
* a kereskedő boltjához hozzá van rendelve a tranzakcióban szereplő szolgáltatás, devizanem és végrehajtási mód (a szolgáltatás ebben az esetben a fizetési szolgáltatót takarja, a végrehajtási mód pedig az azonnali vagy későbbi terhelést jelöli)
* a kereskedő boltjánál engedélyezve van az ismétlődő fizetés funkció

{% hint style="info" %}
A `TransactionId` olyan egyedi azonosító melyet a *Nevogate* rendszere hoz létre. Segítségével egy tranzakció egyértelműen beazonosítható rendszerünkben és a *PayAdmin* felületén. Fontos, hogy a `TransactionId` nem azonos a `ProviderTransactionId` azonosítóval. Utóbbi az egyes fizetési szolgáltatók saját rendszereiben azonosítja be az adott tranzakciót.
{% endhint %}

#### **B. `Start` - a tranzakció indítása és a vásárló átirányítása a fizetési szolgáltatóhoz**

1. A kereskedő oldala átirányítja a vásárlót rendszerünkbe (HTTP Redirect) a tárolt referencia tranzakció azonosítóval.
2. Rendszerünk ellenőrzi a referencia tranzakció azonosítót és átirányítja a vásárlót a fizetési szolgáltatóhoz (sikeres ellenőrzés esetén).
3. A vásárló megadja bankkártya adatait (vagy kiválasztja a megfelelő mobiltárcát) a fizetési szolgáltató oldalán. (Ezen a ponton a vásárló átirányításra kerülhet a kártyakibocsátó bankhoz, ahol személyazonosságát 3DS hitelesítési folyamattal igazolhatja.)
4. A fizetési szolgáltató eltárolja a fizetőeszköz adatait és visszairányítja a vásárlót rendszerünkbe, a fizetés befejezése után.
5. Rendszerünk lekérdezi a tranzakció eredményét a fizetési szolgáltatótól, majd beállítja a tranzakció végleges státuszát a fizetési szolgáltató válasza alapján,
6. ezután rendszerünk a referencia tranzakció azonosítóval visszairányítja a vásárlót a kereskedő oldalára (az inicializáció (`Init`) során megadott visszatérési URL címre (`ResponseUrl`)).
7. Ezzel párhuzamosan rendszerünk a tranzakció végstátuszának beállítását követően aszinkron módon meghívja az inicializáció (`Init`) során átadott `NotificationUrl` címet is.

{% hint style="info" %}
A **B.3.** lépésben leírt 3DS hitelesítési folyamat (3D Secure vagy 3D Secure Code) a pénzügyi visszaélések megakadályozását célzó megoldás. Fizetés során a 3DS a kötelező kártyaadatok bekérésén túl egy egyszer használatos kóddal biztosítja a kártyabirtokos védelmét visszaélésekkel szemben. Használata egyszerű, a vásárlónak mindössze egy mobiltelefonra van szüksége.
{% endhint %}

#### **C. `Result` - a tranzakció eredményének lekérése rendszerünkből**

1. A kereskedő oldala a `ResponseUrl` hívás hatására egy tranzakció azonosítót tartalmazó `Result` kéréssel lekérdezi a tranzakció eredményét rendszerünkből.
2. Rendszerünk ellenőrzi a tranzakció azonosítót,
3. ezután rendszerünk megválaszolja a tranzakció státuszát a kereskedő oldalának (sikeres ellenőrzés esetén).
4. A kereskedő oldala tárolja a tranzakció státuszát és értesíti a vásárlót a tranzakció eredményéről.

{% hint style="warning" %}
Figyeljen arra, hogy minden `NotificationUrl` hívást követően is indítson egy `Result` kérést rendszerünk felé.
{% endhint %}
