> For the complete documentation index, see [llms.txt](https://docs.nevogate.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.nevogate.com/egyszeri-fizetesek-one-time-payment/nativ-mobiltarca/kesobbi-terheles-ketlepcsos-fizetes/google-pay-fizetesi-folyamat.md).

# Google Pay fizetési folyamat

A fizetési folyamat leírását ö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 öt fő lépés adja, ezek a lépések a következők:

A. **`InitWallet`** - a kétlépcsős tranzakció inicializálása\
B. **`StartWallet`** - a fizetési token átadása és a kétlépcsős tranzakció indítása\
C. **`CompleteWallet`** - a vásárló hitelesítésének lezárása\
D. **`Result`** - a kétlépcsős tranzakció eredményének lekérése rendszerünkből\
E. **`Close`** - a kétlépcsős tranzakció lezárása

{% hint style="info" %}
Az A, B és D lépések együttesen adják ki a vásárló jelenlétében történő fizetési folyamatot, ami a tranzakciós összeg befoglalásával végződik.

A C lépésre kizárólag Barion Smart Gateway esetén, és csak akkor kerül sor, ha a tranzakció indítására (`StartWallet`) kapott válasz hitelesítési adatot (`ThreeDSAuthClientData`) tartalmaz. SimplePay esetén ez a lépés nem része a folyamatnak.

Az E lépés az előző lépéseket követően később is elvégezhető, de ennek hatására fejeződik be a tranzakció terheléssel, vagy a befoglalt összeg feloldásával.

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

{% hint style="warning" %}
Barion Smart Gateway esetén a kétlépcsős Google Pay fizetéshez a kliens `allowedAuthMethods` listáját kizárólag `PAN_ONLY` értékre kell szűkíteni, már a fizetési token létrehozásakor.
{% endhint %}

#### **A. `InitWallet` - a kétlépcsős tranzakció inicializálása**

1. A kereskedő oldala a Google Pay elérhetőségének ellenőrzése után megjeleníti a Google Pay gombot a kiválasztott fizetési szolgáltatóhoz tartozó tokenizációs adatokkal,
2. ezután a vásárló megnyomja a gombot.
3. A kereskedő oldala megnyitja a Google Pay fizetési felületét, ahol a vásárló kiválasztja a fizetőeszközt és jóváhagyja a fizetést.
4. A kereskedő oldala elküldi a kereskedő szerverének a Google Pay fizetési tokent (`paymentData.paymentMethodData.tokenizationData.token`) és a vásárló e-mail címét.
5. A kereskedő szervere új, kétlépcsős mobiltárcás fizetési tranzakciót kezdeményez rendszerünkben (`InitWallet`), az `AutoCommit` paraméter `false` értékével.
6. Rendszerünk hitelesíti a beérkezett kérést (autentikáció),
7. ezután rendszerünk egy egyedi tranzakció azonosítót (`TransactionId`) küld vissza a kereskedő szerverének (sikeres hitelesítés esetén).
8. A kereskedő szervere tárolja az egyedi tranzakció azonosítót.

Az inicializálás során a natív fizetési módot a `Wallet.Type` paraméter (`google_pay`), a kliens típusát pedig a `Wallet.Environment` paraméter (`web`) jelöli. A vásárló e-mail címét (`Wallet.PayerEmailAddress`) Barion Smart Gateway esetén kötelező átadni.

{% hint style="warning" %}
Az inicializálásra és a tranzakció indítására a kereskedő szerver oldalán kerüljön sor. Biztonsági okokból a **hitelesítési adatok nem kerülhetnek a böngészőbe**, a rendelés összegét, devizanemét és a kiválasztott fizetési szolgáltatót pedig szerver oldalon ellenőrizze.
{% endhint %}

#### **B. `StartWallet` - a fizetési token átadása és a kétlépcsős tranzakció indítása**

1. A kereskedő szervere a tárolt tranzakció azonosítóval és a fizetési tokennel (`Wallet.Token`) elindítja a tranzakciót rendszerünkben (`StartWallet`).
2. Rendszerünk ellenőrzi a tranzakció azonosítót és a kapott fizetési tokennel elindítja a fizetést a fizetési szolgáltatónál (sikeres ellenőrzés esetén), majd megtörténik a **tranzakció összegének befoglalása**,
3. ezután rendszerünk megválaszolja a tranzakció indításának eredményét a kereskedő szerverének.
4. A kereskedő szervere az eredményt visszaadja a kereskedő oldalának.
5. Ha a válasz nem üres visszairányítási URL címet (`RedirectUrl`) tartalmaz, a kereskedő oldala erre a címre irányítja a vásárló böngészőjét (SimplePay esetén). A vásárló a hitelesítést vagy a függőben lévő fizetés feldolgozását követően rendszerünkön keresztül tér vissza a kereskedő oldalára.
6. Ha a válasz nem üres hitelesítési adatot (`ThreeDSAuthClientData`) tartalmaz, a fizetés a **C.** lépéssel folytatódik (Barion Smart Gateway esetén).
7. Rendszerünk a tranzakció státuszának beállítását követően aszinkron módon meghívja az inicializáció (`InitWallet`) során átadott `NotificationUrl` címet is.

A tranzakció indításakor a fizetési tokent a `Wallet.Token` paraméterben kell átadni; az inicializálás nem tartalmazhatja.

{% hint style="info" %}
Google Pay fizetés esetén a fizetési token már a vásárlói jóváhagyáskor létrejön, ezért a folyamat nem tartalmaz kereskedői munkamenet-hitelesítést. A fizetési tokent változatlan szöveges formában továbbítsa, a fizetési szolgáltató felé szükséges Base64-kódolást rendszerünk végzi el.
{% endhint %}

{% hint style="warning" %}
A tranzakció indítására kapott `SUCCESSFUL` eredménykód a kérés sikeres feldolgozását jelzi, nem a befoglalás sikerességét. Már elindított tranzakcióra ne ismételje meg automatikusan a `StartWallet` kérést.
{% endhint %}

#### **C. `CompleteWallet` - a vásárló hitelesítésének lezárása**

1. A kereskedő oldala átadja a kapott hitelesítési adatot (`ThreeDSAuthClientData`) a Barion Smart Gateway webes hitelesítő kliensének, amely elvégzi a vásárló hitelesítését,
2. ezután a kereskedő oldala értesíti a kereskedő szerverét a hitelesítés befejeződéséről.
3. A kereskedő szervere a tranzakció azonosítójával jelzi rendszerünknek, hogy a hitelesítés lezárult (`CompleteWallet`). A kérés a hitelesítés kimenetelétől függetlenül kizárólag a tranzakció azonosítóját tartalmazza: a hitelesítés eredményét rendszerünk a fizetési szolgáltatótól kérdezi le.
4. Rendszerünk lezárja a fizetést a fizetési szolgáltatónál, majd beállítja a tranzakció státuszát a fizetési szolgáltató válasza alapján,
5. ezután rendszerünk megválaszolja a tranzakció státuszát a kereskedő szerverének.
6. A kereskedő szervere a kapott státusz alapján tájékoztatja a kereskedő oldalát a hitelesítés és a befoglalás eredményéről.

{% hint style="info" %}
A **C.1.** lépésben leírt hitelesítés a Barion Smart Gateway webes hitelesítő kliensének `authenticate()` függvényével történik. A rendelés állapotát ne kizárólag a böngészőben kapott sikeres hitelesítési esemény alapján állítsa be, hanem a tranzakció státusza alapján.
{% endhint %}

#### **D. `Result` - a kétlépcsős tranzakció eredményének lekérése rendszerünkből**

1. A kereskedő szervere a `ResponseUrl` és `NotificationUrl` hívás hatására egy tranzakció azonosítót tartalmazó `Result` kéréssel lekérdezi a befoglalás eredményét rendszerünkből.
2. Rendszerünk ellenőrzi a tranzakció azonosítót,
3. ezután rendszerünk megválaszolja a befoglalás státuszát a kereskedő szerverének (sikeres ellenőrzés esetén).
4. A kereskedő szervere tárolja a befoglalás státuszát, majd a kereskedő oldala é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 %}

{% hint style="info" %}
Ismeretlen kimenetelű hálózati hiba után előbb a meglévő tranzakció eredményét kérdezze le, és ne indítson automatikusan újabb terhelést.
{% endhint %}

**E. `Close` - a 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ő szerverének (sikeres hitelesítés esetén).
4. A kereskedő szervere tárolja a kapott választ és értesíti a vásárlót a tranzakció eredményéről.
