Platform Áttekintés
A Bookinda egy SaaS alapú időpontfoglalási és szalonkezelő platform szalonok, klinikák és szolgáltató vállalkozások számára. A Barion két különálló fizetési kontextusban van integrálva:
| Kontextus | Fizető | Kedvezményezett | Cél |
|---|---|---|---|
| Platform előfizetés (rendszerdíj) | Tenant (vállalkozás tulajdonos) | Bookinda platform | Havi/éves előfizetési díjak |
| Ügyfél előlegfizetés (Barion Connect) | Végfelhasználó (ügyfél) | Tenant saját Barion tárcája | Foglalási előleg / előrefizetés |
Mindkét kontextus a Barion Smart Gateway-t használja (/v2/Payment/Start).
Kettős felhasználási modell
1. Platform szintű fizetés: A Bookinda mint szolgáltató a Barion-t használja az előfizetési rendszerdíjak beszedésére. A tenantok (szalonok, klinikák) havonta vagy évente fizetnek a platformhasználatért. A pénz a Bookinda Barion tárcájába érkezik. Ismétlődő token fizetés (MerchantInitiatedPayment) segítségével az előfizetés automatikusan megújul.
2. Tenant szintű fizetés (Barion Connect): A tenantok saját Barion fiókjukat csatlakoztathatják a platformhoz. Így az ő ügyfeleik az online foglalás során közvetlenül a tenant Barion tárcájába fizetik az előleget. A Bookinda csak közvetítő - a pénz közvetlenül a vállalkozáshoz jut.
Barion Pixel Implementáció
Betöltési stratégia
A Barion Pixel minden marketing és publikus foglalási oldalon betöltődik egy dedikált React komponensen keresztül.
Betöltési sorrend (3 lépés):
- Inline stub (
beforeInteractivescript) - létrehozza awindow.bpparancs-sort mielőtt a bp.js betöltődne - bp.js aszinkron betöltés (
afterInteractivescript) - betöltődik ahttps://pixel.barion.com/bp.jscímről - Pixel inicializálás + consent - inicializálás a Pixel ID-vel, majd a tárolt cookie consent alapján
grantConsent/rejectConsenthívás
NoScript fallback: Egy láthatatlan 1x1 követőpixel (pixel.barion.com/a.gif) biztosítja a követést JavaScript nélküli böngészőkben is.
Implementált Pixel Események
| Esemény | Függvény | Consent szükséges | Használat helye |
|---|---|---|---|
contentView | trackContentView() | Igen | Fizetési lépés betöltésekor |
initiateCheckout | trackInitiateCheckout() | Igen | Fizetés gomb megnyomásakor (1. lépés) |
initiatePurchase | trackInitiatePurchase() | Igen | Fizetés gomb megnyomásakor (2. lépés) |
addPaymentInfo | trackAddPaymentInfo() | Igen | Fizetés gomb megnyomásakor (3. lépés) |
purchase | trackPurchase() | Igen | Sikeres Barion visszatérés után (4. lépés) |
setEncryptedEmail | setEncryptedEmail() | Nem | Csalás megelőzés - mindig fut |
setEncryptedPhone | setEncryptedPhone() | Nem | Csalás megelőzés - mindig fut |
Az identitás események (setEncryptedEmail, setEncryptedPhone) mellőzik a consent-et - mindig futnak csalás megelőzési célból.
Pixel Esemény Tölcsér - Foglalási Fizetési Folyamat
A teljes vásárlási tölcsér az ügyfél előlegfizetéshez:
0. LÉPÉS - Oldal betöltés
├─ setEncryptedEmail(customerEmail) [mindig, consent nélkül]
└─ trackContentView({ contentType: 'Page', id: 'booking-payment-{slug}' })
1. LÉPÉS - Ügyfél rákattint a "Fizetés Barionnal" gombra
├─ trackInitiateCheckout({ contents, step: 1, revenue })
├─ trackInitiatePurchase({ contents, step: 2, revenue })
└─ trackAddPaymentInfo({ contents, paymentMethod: 'Barion', step: 3 })
→ Átirányítás a Barion Smart Gateway-re
2. LÉPÉS - Ügyfél visszatér a fizetés után
├─ verifyBarionPayment(paymentId) - státusz ellenőrzés
└─ HA státusz === "Succeeded":
└─ trackPurchase({ contents, step: 4, revenue, orderNumber: paymentId })
→ Átirányítás a Foglalás Megerősítés oldalraDuplikáció védelem
Több szintű védelem a dupla eseményküldés ellen:
useRefalapú flag-ek mindkét oldalon (pixelFireda fizetési lépésnél,hasStarteda visszatérési oldalon) - oldal újratöltés nem küld dupla eventet- A
sessionStoragecheckout adat törlődik a sikeres purchase event után - A
paymentIdmintorderNumberbiztosítja az egyedi azonosítást
ProductItem struktúra az összes eseményben:
{
contentType: 'Product',
id: 'deposit-{tenantSlug}',
name: 'Előleg - {tenantSlug}',
unitPrice: fizetendőÖsszeg,
quantity: 1,
currency: 'HUF', // vagy 'EUR'
unit: 'db',
totalItemPrice: fizetendőÖsszeg
}Barion Smart Gateway - Ügyfél Előlegfizetés
Amikor egy végfelhasználó időpontot foglal, a tenant (vállalkozás) előlegfizetést kérhet. A pénz közvetlenül a tenant saját Barion tárcájába érkezik.
Payment/Start Kérés
POST /v2/Payment/Start
{
"PaymentType": "Immediate",
"GuestCheckout": true,
"FundingSources": ["All"],
"Currency": "HUF",
"Locale": "hu-HU",
"RedirectUrl": "https://bookinda.hu/{slug}/book/barion-return?token=...",
"CallbackUrl": "https://api.bookinda.hu/api/barion/customer-ipn",
"Transactions": [{
"Payee": "[email protected]",
"Total": 5000,
"Currency": "HUF",
"Comment": "Előleg: Hajvágás + Festés",
"Items": [{
"Name": "Hajvágás + Festés",
"Description": "Előleg - Hajvágás + Festés",
"Quantity": 1,
"Unit": "db",
"UnitPrice": 5000,
"ItemTotal": 5000
}]
}]
}Fontos részletek:
- A pénz közvetlenül a tenant Barion tárcájába érkezik (Payee = tenant email) - a Bookinda nem érint pénzt
GuestCheckout: true- az ügyfeleknek nem kell Barion fiókkal rendelkezniükFundingSources: ['All']- minden fizetési mód engedélyezve, beleértve az Apple Pay-t és Google Pay-t- Nincs ismétlődő/token regisztráció az ügyfél előlegeknél
Ellenőrzés és Véglegesítés
- A frontend meghívja a
GET /verify-barion-payment?paymentId=...végpontot → a backend lekéri a/v2/Payment/GetPaymentState-et - Ha
status === "Succeeded"→ a frontend meghívja aPOST /complete-with-paymentvégpontot - A backend az időpontot
depositStatus: PAID-ra állítja
Barion Smart Gateway - Platform Előfizetés (Rendszerdíj)
A tenantok (vállalkozás tulajdonosok) a Bookinda előfizetési díjukat Barion-on keresztül fizetik. A pénz a Bookinda platform Barion tárcájába érkezik.
Payment/Start Kérés (Első Előfizetés)
POST /v2/Payment/Start
{
"PaymentType": "Immediate",
"GuestCheckout": true,
"FundingSources": ["All"],
"Currency": "HUF",
"Locale": "hu-HU",
"InitiateRecurrence": true,
"RecurrenceId": "{base64url-random-token}",
"RecurrenceType": "MerchantInitiatedPayment",
"RedirectUrl": "https://bookinda.hu/t/{slug}/account/subscription?success=true",
"CallbackUrl": "https://api.bookinda.hu/api/barion/ipn",
"Transactions": [{
"Payee": "[email protected]",
"Total": 9990,
"Currency": "HUF",
"Comment": "Pro csomag - Havi előfizetés",
"Items": [{
"Name": "Pro csomag - Havi",
"Description": "Bookinda Pro előfizetés",
"Quantity": 1,
"Unit": "hónap",
"UnitPrice": 9990,
"ItemTotal": 9990,
"SKU": "TIER-pro-monthly"
}]
}]
}InitiateRecurrence: true- regisztrálja a kártyát jövőbeli ismétlődő terhelésekhezRecurrenceId- a bolt által generált egyedi token (azonnal mentve az adatbázisba)RecurrenceType: MerchantInitiatedPayment- változó összegű előfizetésekhez- A pénz a Bookinda platform Barion tárcájába érkezik
Ismétlődő Token Fizetések (Előfizetés Megújítás)
Az első fizetés regisztrálja a kártya tokent, a következő megújítások a tárolt RecurrenceId-t használják.
Ismétlődő Payment/Start Kérés
POST /v2/Payment/Start
{
"PaymentType": "Immediate",
"GuestCheckout": true,
"FundingSources": ["All"],
"Currency": "HUF",
"RecurrenceId": "{ugyanaz-a-token-az-első-fizetésből}",
"RecurrenceType": "MerchantInitiatedPayment",
"ChallengePreference": "NoChallengeNeeded",
"TraceId": "{kártya-kibocsátó-trace-id}",
"CallbackUrl": "https://api.bookinda.hu/api/barion/ipn",
"Transactions": [{
"Payee": "[email protected]",
"Total": 9990,
"Currency": "HUF",
"Comment": "Pro csomag - Havi megújítás",
"Items": [{
"Name": "Pro csomag megújítás",
"Description": "Bookinda Pro automatikus megújítás",
"Quantity": 1,
"Unit": "hónap",
"UnitPrice": 9990,
"ItemTotal": 9990,
"SKU": "TIER-pro-monthly-recurring"
}]
}]
}Token Életciklus
ELSŐ FIZETÉS ISMÉTLŐDŐ FIZETÉS
──────────── ───────────────────
Payment/Start Payment/Start
InitiateRecurrence: true RecurrenceId: {ugyanaz a token}
RecurrenceId: {bolt által generált} TraceId: {előző sikerből}
RecurrenceType: MerchantInitiated ChallengePreference: NoChallengeNeeded
│ │
▼ ▼
GetPaymentState GetPaymentState
RecurrenceResult: "Successful" Status: "Succeeded"
TraceId: {kibocsátó trace} TraceId: {frissített trace}
│ │
▼ ▼
Mentés az adatbázisba: Mentés az adatbázisba:
- barionRecurrenceId (bolt token) - barionTraceId (frissítve)
- barionTraceId (kibocsátó trace) - currentPeriodEnd (meghosszabbítva)
- barionPaymentLast4 - status: ACTIVE
- barionPaymentBrandRecurrenceId vs TraceId:
- RecurrenceId - A bolt által generált egyedi token. Egyszer jön létre az első fizetéskor, ugyanaz használódik az összes későbbi terheléshez.
- TraceId - A kártyakibocsátó trace azonosítója. A Barion adja vissza minden sikeres fizetés után. A következő fizetésekben használjuk a 3D Secure mentesség érdekében.
Automatikus Megújítási Ütemezés
| Feladat | Ütemezés | Művelet |
|---|---|---|
| Ismétlődő számlázás | Naponta 06:00-kor | Lejárt előfizetések keresése → ismétlődő fizetés végrehajtása |
| Türelmi idő ellenőrzés | Naponta 10:00-kor | PAST_DUE előfizetések ellenőrzése → lejárt türelmi idő esetén törlés |
Lemondás
A barionRecurrenceIdtörlése az adatbázisból hatékonyan leállítja az ismétlődő terheléseket - a Barionnak nincs külön "előfizetés lemondás" API végpontja.
IPN / Webhook Kezelés
Platform Előfizetés IPN
POST https://api.bookinda.hu/api/barion/ipn?PaymentId=...
Kezelési folyamat:
PaymentIdkinyerése a query stringből vagy POST body-bólGET /v2/Payment/GetPaymentStatemeghívása- Előfizetés rekord azonosítása
- Succeeded esetén: előfizetés aktiválása, periódus meghosszabbítása, TraceId mentése, kártyaadatok kinyerése, számla létrehozása, tier kreditek jóváírása
- Failed/Expired esetén: hibaszámláló növelése, türelmi idő beállítása, 3+ hiba után PAST_DUE státusz
Mindig HTTP 200-at ad vissza a fogadás nyugtázására.
Ügyfél Előleg IPN
POST https://api.bookinda.hu/api/barion/customer-ipn?PaymentId=...
Siker esetén: az időpont depositStatus: PAID-ra frissül.
Fizetési Módok és FundingSources
Minden Barion fizetés FundingSources: ['All']-t használ, ami engedélyezi:
- Bankkártyák - Visa, Mastercard, Maestro, Amex
- Apple Pay - automatikusan működik a Barion Smart Gateway-en
- Google Pay - automatikusan működik a Barion Smart Gateway-en
- Barion tárca - közvetlen egyenleg fizetés
A fizetési mód kiválasztását teljes egészében a Barion Smart Gateway hosted checkout oldala kezeli. Nincs szükség egyedi Apple Pay vagy Google Pay integrációra.
Hibakezelés és Türelmi Idők
Sikertelen Előfizetési Fizetés - Türelmi Idők
| Hiba # | Türelmi idő | Előfizetés státusz |
|---|---|---|
| 1. | 7 nap | Marad aktív |
| 2. | 14 nap | Marad aktív |
| 3.+ | 21 nap | → PAST_DUE |
| Türelmi idő lejárt | - | → CANCELLED |
Minden Barion API válasz ellenőrzésre kerül az Errors tömbre, a hibák teljes címmel és leírással naplózódnak.
Használt Barion API Végpontok
| Végpont | Kontextus |
|---|---|
POST /v2/Payment/Start | Fizetés létrehozása (előlegek és előfizetések) |
GET /v2/Payment/GetPaymentState | Fizetési státusz ellenőrzése (IPN és frontend verifikáció) |
Teszt vs Éles környezet
| Beállítás | Teszt | Éles |
|---|---|---|
| API Base URL | api.test.barion.com | api.barion.com |
| Gateway URL | test.barion.com | secure.barion.com |
| Pixel script | pixel.barion.com/bp.js | Ugyanaz |
Megfelelőségi Ellenőrzőlista
Az alábbi ellenőrzőlista összefoglalja a Barion integráció megfelelőségi szempontjait és azok megvalósítását:
Full Pixel csak consent után fut
A Base Pixel (init) mindig betölt - csalás megelőzési célból. A Full Pixel marketing eseményei (contentView, purchase, stb.) kizárólag a felhasználó marketing consent-je után futnak. A track() wrapper minden hívásnál ellenőrzi a consentGranted flag-et.
Purchase event csak végleges státusznál
A trackPurchase() esemény kizárólag akkor kerül kiküldésre, amikor a backend verifyBarionPayment végpont megerősíti, hogy a fizetés státusza 'Succeeded'. Nem a return URL betöltésekor, hanem az API verifikáció után.
Duplikáció védelem
Többszintű védelem: useRef flag-ek mindkét oldalon megakadályozzák az újratöltés okozta duplikációt. A sessionStorage checkout adat törlődik a sikeres purchase event után. A paymentId mint orderNumber biztosítja az egyedi azonosítást.
Consent logika - grant / reject / visszavonás
Base Pixel betölt → cookie consent banner megjelenik → felhasználó dönt → grantConsent vagy rejectConsent hívás. Ha a felhasználó később visszavonja a marketing consent-et, azonnal rejectConsent hívás történik és a Full Pixel események leállnak.
Adatkezelés és tájékoztatás
Friss Adatkezelési Tájékoztató (Barion Pixel külön szekció), Cookie Szabályzat, háromkategóriás cookie banner naplózott hozzájárulással, bármikori visszavonhatóság a láblécből.
Adatkezelés és Tájékoztatás
A Barion Pixel integrációhoz a következő adatvédelmi intézkedések vannak érvényben:
- Adatkezelési tájékoztató - a Barion Pixel külön szekcióban szerepel az Adatkezelési Tájékoztató oldalon
- Cookie banner - 3 kategória (Szükséges / Statisztikai / Marketing), naplózott hozzájárulással
- Cookie szabályzat - részletes leírás a használt sütikről a Cookie Szabályzat oldalon
- Consent visszavonhatóság - a felhasználó bármikor módosíthatja a cookie beállításait a láblécben
