Ajánlatot kérek
Munkák
  • Affiliate-platform
  • Titoktartás alatt
20269 perces olvasmány

Affiliate-hálózat platform

Élesben futó affiliate-hálózat kattintáskövetéssel, szerverek közötti konverziójelzéssel, csak bővíthető jutalék-főkönyvvel és havi elszámolással.

Röviden

  • Az élesben futó hálózat követi a kattintásokat, fogadja a hirdetők konverziójelzéseit, kiszámolja a jutalékot, és havonta elszámol.
  • A főkönyvbe csak új tétel kerülhet, a javítás ellentételként megy be, a szabálytalan tételt pedig maga az adatbázis utasítja el.
  • A rendszer saját szerveren fut, és ha egy új verzió egy percen belül nem egészséges, magától visszaáll az előzőre.
  • Minden kiadás előtt 1930 automatikus teszt fut, és egy mért optimalizálás után a nyilvános oldal mobilos JavaScriptje 43 százalékkal kisebb lett.

Ebben a hálózatban a kattintástól a kifizetésig minden lépés visszakövethető, és egyetlen tétel sem íródik felül.

Számokban

  • 1930

    automatikus teszt fut minden kiadás előtt

  • 57

    adatbázis-migráció épít fel 33 táblát, mindegyiket sorszintű védelemmel

  • 12

    lépés a kiadásban, automatikus visszaállással

  • 3

    hitelesítési mód a hirdetők szerverről küldött konverziójelzéseihez

Kiindulás

Egy affiliate-hálózat három szereplő között áll. Az affiliate-ek, vagyis kiadók, tartalomgyártók és hirdetési szakemberek, ügyfeleket hoznak. A hirdetők, vagyis a márkák, fizetnek értük. A hálózat a kettő között méri a forgalmat, kiszámolja a jutalékot, és kifizeti. Ennek a hálózatnak addig egyetlen, sablonból épített bemutatkozó oldala volt. Erre építettük rá a teljes rendszert 2026 júniusa és októbere között, körülbelül 16 hét alatt, 170 commitban.

A rendszer két részből áll. A nyilvános oldal affiliate-eket toboroz, és egy külön oldal szól a hirdetőknek. A háttérben fut a kattintáskövetés, a konverziók fogadása, a jutalék-főkönyv, a havi elszámolás, az affiliate-portál és egy többszintű adminkonzol. Öt szerepkör van, egymásba ágyazva: affiliate, külső partnermenedzser, munkatárs, admin és tulajdonos. A külső menedzser csak azokat az affiliate-eket látja, akiket ő hozott.

A hálózat a saját oldalán is pontos. A nyilvános számok programmaximumok, és mind egyetlen konstansfájlból jönnek. Márkánkénti díjat a hálózat nem tesz közzé. A tervezés előtt több mint 30 affiliate-programot és hálózatot néztünk végig, hogy lássuk, mit ígérnek a versenytársak, és mit tudnak valóban megmutatni.

A kattintás útja

Egy kattintásból később pénz lesz, ezért a kattintás nem veszhet el, és nem lehet hamisítani.

  • Minden kattintás HMAC-aláírt azonosítót kap, amelyet a hirdető visszaküld a konverzióval.
  • A link célját egy Redis-gyorsítótár adja, amely egyszerre csak egy lekérdezést enged az adatbázishoz, így egy népszerű link sem terheli túl.
  • A kattintás egy tartós sorba íródik, és ha a sor nem érhető el, közvetlenül az adatbázisba.
  • A hirdető soha nem kap olyan aláírt azonosítót, amelyhez nincs kattintássor. Egy dupla koppintásnál és a levelezők linkellenőrzőinél a duplikációszűrés korábban megsértette ezt a szabályt. A javításban az azonosítót előbb lefoglaljuk, és csak utána építjük meg a linket.

A hirdetőnként eltérő paraméternevet és helyőrzőt a konzolban lehet beállítani. Ugyanaz a függvény állítja elő a konzol előnézetét és az élő átirányítást, ezért a menedzser pontosan azt a linket látja, amely élesben fut.

Konverzió a hirdetőtől

A hirdetők szerverről jelzik a konverziót (S2S postback), mindegyik a maga módján. Egy adapter fordítja le őket a hálózat nyelvére.

Hitelesítés Hogyan működik
Időbélyeges HMAC aláírt kérés, 300 másodpercig a múltba, 60 másodpercig a jövőbe tűrve
Megosztott token egy titkos kulcs a kérésben
IP-cím szerkeszthető engedélylista

Hirdetőnként saját paraméter- és eseménytérkép mondja meg, melyik esemény számít konverziónak. A visszavont státuszok, például a visszaterhelés és az érvénytelenítés, visszafordítják a konverziót. A hirdetők titkai AES-256-GCM-mel titkosítva, a márka azonosítójához kötve tárolódnak, és ha a visszafejtés nem sikerül, a rendszer elutasítja a kérést. A forgalmat hitelesítés előtt IP-címenként, utána hirdetőnként korlátozzuk. Azoktól a hirdetőktől, akik nem küldenek jelzést, a rendszer JSON- vagy CSV-riportot húz be.

A főkönyv

A pénz egy csak bővíthető főkönyvben él, és a szabályait maga az adatbázis őrzi.

  1. A jóváírás nem lehet negatív, a kifizetés és a visszavonás nem lehet pozitív. Ezt egy adatbázis-megkötés ellenőrzi, és a szabálytalan tétel be sem kerül.
  2. A javítás mindig ellentétel. Egy tételt soha nem írunk át.
  3. A regisztrációért nem jár jutalék. Egy adatbázis-trigger minden ilyen jóváírást visszautasít, akkor is, ha a kód hibázna.
  4. Az egyeztetés bármikor újrafuttatható. Részleges egyedi indexek gondoskodnak róla, hogy egy tétel kétszer ne kerüljön be.
  5. A kiadás pillanata sem okozhat dupla könyvelést. A bevételmegosztásos tételekhez kötelező az elszámolási időszak, így a régi verzió egy átfedő kiadás alatt nem tud könyvelni.
  6. A pénz egész mikroegységekben számol, lebegőpontos kerekítés nélkül, nyolc devizában.

A tulajdonos konzolján egy próbamérleg hét invariánst ellenőriz: a jóváírások lefedettségét és eredetét, a kifizetések egyezését, a visszavonások épségét, és a menedzseri, az alpartneri és a bevételmegosztásos tételeket.

A jutalékmotor

A díj három szintről jöhet, és a rendszer azt is megmondja, melyikről jött: az affiliate és az ajánlat saját megállapodásából, a hálózati szintű megállapodásból vagy az ajánlat alapértékéből. A motor CPA-, bevételmegosztásos és vegyes modellt is kezel.

A bevételmegosztás havonta számol. A kifizethető összeg a nettó bevétel és a díj szorzata, és soha nem negatív, így egy rossz hónap nem visz át tartozást a következőre. A díj hónapra rögzül, és egy hónap csak a lezárása után könyvelődik. Az elszámolás tranzakciós zárat vesz, és csak a különbözetet írja be, így bármikor újrafuttatható. Az alpartneri jutalék az alpartner keresetének egy százaléka, egész mikroegységekben, felső határral.

Októbertől egyetlen konverziót sem hagy jóvá időzítő. A menedzser havonta átnézi a sorokat, kiveszi az elutasítottakat, és jóváhagyja a többit. A jóváírás egyetlen kódúton történik.

Jogosultság egyetlen SQL-utasításban

A konzol három egymásba ágyazott gyűrű: munkatárs, admin, tulajdonos. A hatókör feltételei a módosító utasítás WHERE részébe kerülnek, így a jogosultság ellenőrzése és a versenyhelyzet elleni védelem ugyanaz az atomi lépés, és egy kétszeres jóváhagyás szerkezetileg lehetetlen. A NULL-értékek csapdáit külön kezeltük. A menedzser a saját ügyletét nem hagyhatja jóvá, és senki nem lát a saját szintje fölé. A menedzseri árrés és a tulajdonosi bevétel tételtípus-szűrőkkel minden olvasóban rejtve marad.

A hiba, amelyet hetekig kerestünk

A partnerportál néha nem töltött be, és egy általános hibaüzenetet mutatott. Több elmélet bukott el egymás után: egy IPv6-os útvonal, a kapcsolatkezelő sorba rendezése, egy újracsatlakozási vihar, amely a közös kapcsolatkészletet tette tönkre, és egy adatbázis-kliens, amely két különböző hibatípusnál is leállította a folyamatot. Mindegyiket javítottuk, a hiba mégis maradt.

Végül mérés mutatta meg az okot. Egy tranzakciós kapcsolatkezelőn az a lekérdezés, amely a készlet maximumán túl áll sorba, örökre vár. Öt kapcsolatnál hat párhuzamos kérés lefagyott, tizenöt kapcsolatnál tizenöt kérés 593 ezredmásodperc alatt visszatért.

A javítás minden időkorlátot egy modulba gyűjtött, amelyet tesztek rögzítenek. Minden próbálkozásnak saját határideje van, a kapcsolatkészlet rendben ürül le, és egy kérésenkénti gyorsítótár a hibát nem jegyzi meg. Az ellenőrző mérésben 30 párhuzamos szálon mind a 120 kérés sikeres volt, 180–280 ezredmásodperces mediánnal.

Üzemeltetés saját szerveren

2026 augusztusában a rendszer a Vercelről saját szerverre költözött. Egyetlen Node-folyamat fut systemd alatt, a Caddy mögött, automatikus TLS-sel, Docker nélkül. A négy ütemezett feladat (az egyeztetés negyedóránként, az adatmegőrzés és a riportimport naponta, a hírlevél negyedóránként) systemd-időzítőként fut, átfedés elleni zárral. A levelezés is saját, Postfixszel, OpenDKIM-mel, Dovecottal és Rspamddel.

A kiadás egy tizenkét lépéses szkript. A fontosabb lépései ezek.

  1. Nem épít, ha egy környezeti fájl van a mappában.
  2. Lefut a típusellenőrzés, a lint és az összes teszt.
  3. Lefutnak az adatbázis-migrációk.
  4. A build 5 GB-os memóriakeretben fut, hogy ne vehesse el az élő szerver memóriáját.
  5. Ellenőrzi a kész csomagot, a képfeldolgozó natív binárisát, a nyilvános fájlokat, és hogy titok ne kerüljön bele.
  6. Egy szimbolikus link cseréjével atomian vált, és újraindít.
  7. 60 másodpercig figyeli az állapotjelzőt, és ha az új verzió nem egészséges, magától visszaáll.
  8. Öt korábbi kiadást megtart.

A kézi visszaállás körülbelül 3 másodperc. Legalább húsz kiadás ment ki így, és mindegyik zöld állapotjelzővel, újraindulás nélkül állt fel. A szerver megtagadja az indulást, ha hiányzik a titkosító kulcs, a Redis vagy a botvédelem. A tulajdonos konzolja mutatja az ütemezett feladatok frissességét, a próbamérleget és az elakadt konverziókat.

A nyilvános oldal mint toborzó

A regisztráció minősít. Az affiliate a regisztrációkor kiválasztja a forgalma forrását egy 26 csatornás listából, és sávban megadja a havi forgalmát. Utána jóváhagyásra vár. A beindulás négy lépés: jóváhagyás, hozzáférés egy márkához, megállapodás és link, és a portál mutatja, melyiknél tart.

A toborzás is mérhető. Az alpartneri ajánló és a menedzseri toborzólink saját paramétert visz. A blogról, az útmutatókból, az eszközökből és a keresőből érkező regisztrálók 30 napos, saját sütis jelzést kapnak, és a tulajdonos saját sorába kerülnek. A tulajdonos levélben kapja meg, melyik oldal hozta a regisztrációt.

A riport a döntéshez kell. A teljesítménygrafikon órás, 7, 30 és 90 napos nézetet ad. A tölcsértáblázat naponként vagy márkánként mutatja a kattintást, a regisztrációt, a konverziót, az arányokat és a jutalékot, és CSV-be menthető, képletbefecskendezés elleni védelemmel. A grafikonokat könyvtár nélkül, SVG-ben rajzoltuk, billentyűzettel kezelhető célkereszttel és képernyőolvasós bemondással.

A kifizetés bizalmat épít. A kifizetés havonta fut, devizánként minimummal. A tranzakció azonosítója kötelező, és az affiliate maga igazolja a beérkezést. A „függőben” felirat soha nem ígér jóváhagyást.

A tartalom keresésre épül. A piacok és csatornák szerinti lefedettségi oldalak egyetlen adatkészletből készülnek, 19 piacra és 12 csatornára. A közzétételi határt a kód típusa rögzíti, így márkaazonosító vagy díj soha nem juthat el az oldalig. Egy oldal legalább három programot mutat, ami egyszerre véd a vékony tartalom és a beazonosíthatóság ellen. Egy 48 kérdéscsoportos szándéktérkép 15 ellenőrzéssel fut, és mindegyikről bebizonyítottuk, hogy elbukik, ha valaki elrontja. A közel azonos oldalak hasonlóságát piaconkénti és csatornánkénti leírásokkal 97–98 százalékról nagyjából 80 százalékra vittük le. Mellettük 11 útmutató, egy 29 szavas szójegyzék és 4 kalkulátor áll, és a sitemap 15-ről 69 címre nőtt.

A hozzájárulás valódi. A Google hozzájárulási módja alapból tilt, és az elfogadó és az elutasító gomb egyforma súlyú. A hírlevél kettős megerősítéssel megy, és a megerősítő link egy egyszerű megnyitásra semmit nem tesz, így egy levelezőprogram linkellenőrzője nem tud hozzájárulást gyártani. A leiratkozó link HMAC-aláírású, és két év múlva is működik.

Mért sebesség

  1. július 5-én a nyitóoldal teljes blokkolási ideje 2060 ezredmásodperc volt. Az okát egyetlen, korán betöltött komponensben találtuk meg, amely a teljes tartalmi csomagot behúzta. Augusztus 29-én egy saját, függőség nélküli méréssel, lassított telefonos hálózaton és négy-hatszoros processzorlassítással végigmentünk a mobil oldalon.
Mérés Előtte Utána
Kezdeti JavaScript 1 106 649 bájt 631 755 bájt
Kérések 35 26
Külső kérés interakció előtt 3 0
CLS lassú betűkkel 0,0773 0,0099

A partnerportál műszerfalának kezdeti csomagja 1165 kB-ról 851 kB-ra csökkent. A content-visibility beállítást megépítettük, megmértük, és elvetettük. Egy modális párbeszédablakot nem modálisra cseréltünk, mert a mérés ezt mutatta jobbnak.

Egy affiliate-hálózatban a partner akkor marad, ha a riport minden száma visszavezethető egy kattintásra és egy főkönyvi tételre.

Amit ebből Önnek érdemes tudni

Ha saját affiliate-programot indítana, a kattintás és a jutalék közötti lánc, a főkönyv és a kifizetés a legfontosabb rész, mert ezeken múlik, hogy a partnerek megbíznak-e a számokban. Az affiliate-platformról külön oldalon írunk, a munka menetéről pedig az Így dolgozunk oldalon.

Adatlap

Típus
Affiliate-platform
Szerepünk
Terv, fejlesztés, üzemeltetés
Állapot
Élesben, saját szerveren
Év
2026
Nyelv
Angol
Technika
  • Next.js
  • React
  • TypeScript
  • Postgres
  • Drizzle
  • Redis
  • Caddy
  • systemd
  • Vitest

Ilyet építünk Önnek is

Affiliate platform

Saját affiliate-hálózat kattintáskövetéssel, csak bővíthető jutalék-főkönyvvel, havi kifizetéssel, partner- és adminportállal.