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

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

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

{% hint style="info" %}
A kettébontá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. `InitRP` - rákövetkező tranzakció inicializálása meglévő referencia tranzakció segítségével**

1. A kereskedő oldala 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
* 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 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ő tranzakció indítása meglévő 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 %}
