> 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/egykattintasos-fizetes-one-click-payment/nativ-mobiltarca/azonnali-terheles/fizetes-fizetoeszkoez-regisztracioval/google-pay-fizetesi-folyamat-fizetoeszkoez-regisztraciohoz.md).

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

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

A. **`InitWallet`** - a tranzakció inicializálása fizetőeszköz-regisztrációval\
B. **`StartWallet`** - a fizetési token átadása és a tranzakció indítása\
C. **`CompleteWallet`** - a vásárló hitelesítésének lezárása\
D. **`Result`** - a tranzakció eredményének lekérése rendszerünkből

{% 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 terhelésével és a fizetőeszköz regisztrációjával végződik.

A C lépésre csak akkor kerül sor, ha a tranzakció indítására (`StartWallet`) kapott válasz hitelesítési adatot (`ThreeDSAuthClientData`) tartalmaz.

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

{% hint style="warning" %}
A fizetőeszköz-regisztráció natív mobiltárcával kizárólag *Barion Smart Gateway* szolgáltatóval és Google Pay fizetéssel lehetséges. A kliens `allowedAuthMethods` listáját már a fizetési token létrehozásakor kizárólag `PAN_ONLY` értékre kell szűkíteni.
{% endhint %}

#### **A. `InitWallet` - a tranzakció inicializálása fizetőeszköz-regisztrációval**

1. A kereskedő oldala a Google Pay elérhetőségének ellenőrzése után megjeleníti a Google Pay gombot a `PAN_ONLY` hitelesítési móddal és a Barion tokenizációs adataival,
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 mobiltárcás fizetési tranzakciót kezdeményez rendszerünkben a regisztrációs paraméterek átadásával (`InitWallet`).
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 a vásárlóhoz és a rendeléshez rendelve.

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 fizetőeszköz-regisztrációt a `PaymentRegistration`, a `PaymentRegistrationType` (`CIT`) és az egyedi `UserId` paraméter kéri. Az `AutoCommit` paraméter értéke `true`.

{% 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 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 és a fizetőeszköz regisztrációját a fizetési szolgáltatónál (sikeres ellenőrzés esetén),
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 hitelesítési adatot (`ThreeDSAuthClientData`) tartalmaz, a fizetés a **C.** lépéssel folytatódik.
6. 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. A regisztrációs paramétereket nem kell újra megadni, azokat rendszerünk az inicializálás során kapott adatokból veszi.

#### **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 fizeté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 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 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ő szerverének (sikeres ellenőrzés esetén).
4. A kereskedő szervere tárolja a tranzakció státuszát és a regisztráció létrejötté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é. Az inicializálás vagy a tranzakció indítása során kapott `SUCCESSFUL` eredménykód a kérés sikeres feldolgozását jelzi, nem a fizetés és a regisztráció sikerességét.
{% endhint %}
