> 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/azonnali-terheles/apple-pay-fizetesi-folyamat.md).

# Apple Pay fizetési folyamat

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. **`InitWallet`** - a kereskedői munkamenet hitelesítése és a tranzakció inicializálása\
B. **`StartWallet`** - a fizetési token átadása és a tranzakció indítása\
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. `InitWallet` - a kereskedői munkamenet hitelesítése és a tranzakció inicializálása**

1. A kereskedő oldala az Apple Pay elérhetőségének ellenőrzése után megjeleníti az Apple Pay gombot,
2. ezután a vásárló megnyomja a gombot.
3. A kereskedő oldala létrehozza az Apple Pay munkamenetet a rendelés összegével és devizanemével.
4. A munkamenet `onvalidatemerchant` eseményének hatására a kereskedő oldala elküldi a kereskedő szerverének a fizetési oldal címét és az esemény `validationURL` értékét.
5. A kereskedő szervere új mobiltárcás fizetési tranzakciót kezdeményez rendszerünkben (`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`) és az Apple Pay kereskedői munkamenetének adatait küldi vissza a kereskedőnek (sikeres hitelesítés esetén).
8. A kereskedő szervere tárolja az egyedi tranzakció azonosítót, a munkamenet adatait pedig változatlanul visszaadja a kereskedő oldalának.
9. A kereskedő oldala a kapott munkamenet adatokkal lezárja a kereskedői munkamenet hitelesítését (`session.completeMerchantValidation()`).

Az inicializálás során a natív fizetési módot a `Wallet.Type` paraméter (`apple_pay`), a kliens típusát a `Wallet.Environment` paraméter (`web`), a fizetési oldal címét pedig a `Wallet.ShopUrl` paraméter jelöli. Mindkét fizetési szolgáltatónál át kell adni az `onvalidatemerchant` esemény `validationURL` értékét is (`Wallet.ValidationUrl`).

{% hint style="info" %}
SimplePay esetén az inicializálás során a fizetési szolgáltatónál is létrejön a tranzakció. Barion Smart Gateway esetén ekkor kizárólag a kereskedői munkamenet hitelesítése történik meg, a szolgáltatói fizetési tranzakció a tranzakció indításakor (`StartWallet`) jön létre.
{% endhint %}

{% 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 vásárló jóváhagyja a fizetést az Apple Pay felületén,
2. ezután a kereskedő oldala az `onpaymentauthorized` eseményből kapott teljes fizetési tokent (`event.payment.token`) elküldi a kereskedő szerverének.
3. 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`).
4. Rendszerünk ellenőrzi a tranzakció azonosítót és továbbítja a fizetési tokent a fizetési szolgáltatónak (sikeres ellenőrzés esetén),
5. ezután rendszerünk megválaszolja a tranzakció indításának eredményét a kereskedő szerverének.
6. A kereskedő szervere a tranzakció indításának eredményét visszaadja a kereskedő oldalának.
7. A kereskedő oldala a kapott válasz alapján lezárja az Apple Pay felületét (`completePayment()`), hiba esetén sikertelen eredményt jelezve a vásárlónak.
8. 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.
9. Rendszerünk a fizetési szolgáltatótól kapott eredmény alapján beállítja a tranzakció végleges státuszát. Az eredmény a fizetési szolgáltatótól függően aszinkron módon is megérkezhet.
10. Rendszerünk a tranzakció végstá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.

{% hint style="warning" %}
A **B.2.** lépésben a teljes `event.payment.token` objektumot továbbítsa, ne csak annak `paymentData` mezőjét. A fizetési szolgáltató felé szükséges Base64-kódolást rendszerünk végzi el.
{% endhint %}

{% hint style="info" %}
Ha a vásárló a fizetési token létrejötte előtt megszakítja a munkamenetet, ne indítsa el a tranzakciót. Új fizetési kísérlethez új Apple Pay munkamenetet és új tranzakciót hozzon létre.
{% endhint %}

#### **C. `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, 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" %}
A tranzakció indítására (`StartWallet`) kapott `SUCCESSFUL` eredménykód a kérés sikeres feldolgozását jelzi, nem a rendelés kifizetettségét. SimplePay esetén a végleges eredmény aszinkron módon is megérkezhet, ezért a függőben lévő tranzakciót a kereskedő felületén folyamatban lévő fizetésként jelezze. Apple Pay fizetés esetén a folyamat nem tartalmaz külön hitelesítés lezárása (`CompleteWallet`) lépést.
{% endhint %}
