# Fizetési folyamat (rákövetkező fizetés)

A rákövetkező 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ő által indított három fő lépés adja, ezek a lépések a következők:

A. **`InitRP`** - rákövetkező, kétlépcsős tranzakció inicializálása a referencia tranzakció segítségével\
B. **`StartRP`** - rákövetkező, kétlépcsős tranzakció indítása (a vásárló itt nincs jelen)\
C. **`Close`** - rákövetkező, kétlépcsős tranzakció lezárása

{% hint style="info" %}
Az A és B lépések együttesen adják ki a teljes fizetési folyamatot, ami a tranzakciós összeg zárolásával végződik.

A C lépés az első két lépést követően később is elvégezhető, de ennek hatására fejeződik be a tranzakció terheléssel, vagy a zárolt összeg feloldásával.

A felsorolt pontok egy sikeres fizetési folyamatot írnak le.
{% endhint %}

#### **A. `InitRP` - rákövetkező, kétlépcsős tranzakció inicializálása a referencia tranzakció segítségével**

1. A kereskedő rendszere a referencia tranzakcióra hivatkozva új fizetési tranzakciót kezdeményez rendszerünkben.
2. Rendszerünk hitelesíti a beérkezett kérést (autentikáció),
3. ezután rendszerünk egy egyedi tranzakció azonosítót (`TransactionId`) küld vissza a kereskedőnek (sikeres hitelesítés esetén).
4. A kereskedő oldala tárolja az egyedi 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
* a kereskedő boltja szerepel rendszerünkben a megadott boltnév (*StoreName*) és API kulcs (*ApiKey*) párossal (opcionálisan rendszerünk a kereskedő IP címét is ellenőrizheti, a kiegészítő IP cím ellenőrzést a kereskedő külön igényelheti munkatársainktól)
* a kereskedő boltjához hozzá van rendelve a tranzakcióban szereplő szolgáltatás, pénznem é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 fedi)
* a kereskedő boltjánál engedélyezve van az ismétlődő fizetés funkció
* a megadott referencia tranzakcióhoz aktív fizetőeszköz-regisztráció tartozik

{% 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. `StartRP` - rákövetkező, kétlépcsős tranzakció indítása referencia tranzakció segítségével**

1. Rendszerünk ellenőrzi a referencia tranzakció azonosítót és elindítja a tranzakciót a fizetési szolgáltató rendszerében (sikeres ellenőrzés esetén).
2. Rendszerünk lekérdezi a tranzakció eredményét a fizetési szolgáltatótól, majd beállítja a tranzakció státuszát a fizetési szolgáltató válasza alapján.
3. Ezután rendszerünk visszaadja a tranzakció eredményét.
4. 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ó (`InitRP`) során átadott `NotificationUrl` címet is.
5. 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 indítson egy `Result` kérést rendszerünk felé.
{% endhint %}

**D. `Close` - rákövetkező, kétlépcsős tranzakció lezárása**

1. A kereskedő kezdeményezi a tranzakció lezárását a tranzakció azonosító segítségével (`TransactionId`) és a lezárás módjának megadásával, mely lehet:\
   • a teljes befoglalt összeg terhelése\
   • a befoglalt összeg részterhelése (és a maradék összeg feloldása)\
   • a teljes befoglalt összeg feloldása
2. Rendszerünk hitelesíti a beérkezett kérést, majd továbbítja azt a fizetési szolgáltató felé, aki végrehajtja a tranzakció lezárását.
3. Ezután rendszerünk megválaszolja a lezárás eredményét a kereskedő oldalának (sikeres hitelesítés esetén).
4. A kereskedő oldala tárolja a kapott választ és értesíti a vásárlót a tranzakció eredményéről.
