Klanten & accounts¶
De Atraxion-webshop richt zich uitsluitend op professionele klanten (B2B): garages, bandendealers, importeurs, montagecentra en verwante bedrijven. Er is geen consumentenkoop of particuliere verkoop. Elk account is gekoppeld aan een bedrijf (klantnummer) en ten minste één gebruikerslogin.
Klantstructuur¶
Een klant bestaat uit twee lagen:
| Entiteit | Beschrijving | Bestand |
|---|---|---|
Customer |
Bedrijfsrecord: naam, adres, BTW-nummer, klantcategorie, transportvoorkeur | _core/model/classes/atx/customers/Customer.php |
Login |
Gebruikerslogin verbonden aan een Customer: e-mail, wachtwoord, taal, 2FA-instellingen |
_core/model/classes/atx/customers/Login.php |
Eén klant kan meerdere logins hebben (bijv. meerdere medewerkers van hetzelfde bedrijf). De Login bevat de opties voor het loyaliteitsprogramma (showXCoins, Login.php:44) en een ForMiniShop-vlag (Login.php:325) die aangeeft of de login het mini-shop-eindpunt bedient. De mini-shop-marges worden opgeslagen in de aparte customer_margin-tabel en zijn gekoppeld aan de Customer-entiteit via CustomerMargin, niet aan Login.
Registratie¶
Registratie verloopt via RegisterController (_core/controller/classes/atx/customers/RegisterController.php).
Het registratieformulier vraagt:
- Bedrijfsgegevens: firmanaam, BTW-land, BTW-nummer, adres, postcode, gemeente, land
- Contactpersoon: voornaam, naam, functie, geboortedatum, geslacht, telefoonnummer
- Accountgegevens: e-mailadres, wachtwoord, taal
- Klantcategorie (bijv. D1 = bouw, D2 = landbouw, D3 = transport, of een klantcategoriegroep)
- Akkoord met de algemene voorwaarden
De controller biedt ook een BTW-opzoeking (searchCompanyByVat) waarmee bij registratie bestaande klantgegevens in het systeem worden opgezocht op basis van het BTW-nummer (RegisterController.php:128). Na succesvolle registratie vuurt de CustomerRegistrationService het event customer.post_register af en traceert Matomo de nieuwe registratie (RegisterController.php:86).
Registratie is niet beschikbaar op een mini-shop: RegisterController.php:60 controleert $this->context->miniShop en geeft een 404 terug als die true is.
Inloggen¶
De login verloopt via LoginController (_core/controller/classes/atx/customers/LoginController.php). Het formulier accepteert een gebruikersnaam (str_login of username) en wachtwoord. De LoginService verwerkt de validatie:
- Onbekend account → foutmelding
userbestaatniet - Geblokkeerd of geweigerd account → redirect naar
account-statusmet reden - Ongeldig wachtwoord → foutmelding
userbestaatpaswoordverkeerd - Ongeldige CAPTCHA → foutmelding
recaptcha_invalid
Na succesvolle login wordt de klant omgeleid naar de eerder bezochte pagina (opgeslagen in $_SESSION['_teleport']) of naar de homepage.
Matomo registreert succesvolle logins in productie (LoginController.php:72).
Twee-factor-authenticatie (2FA)¶
De webshop ondersteunt twee-factor-authenticatie via TOTP (Time-based One-Time Password), geïmplementeerd met de library pragmarx/google2fa.
De facade TwoFactorFacade (src/Atraxion/Authentication/TwoFactorFacade.php) biedt:
generateQRCode(Login $user)— genereert een QR-code om in te scannen met een authenticator-appverifyKey(Login $user, string $key)— controleert een ingevoerde 6-cijferige codeenableTwoFactor(Login $user)/disableTwoFactor(Login $user)— zet 2FA aan of uitaddTrustedDevice(Login $user, Device $device)— markeert een apparaat als vertrouwd
Het inschakelen van 2FA verloopt via StartG2FAController (_core/controller/classes/atx/customers/StartG2FAController.php): de gebruiker scant de QR-code en bevestigt met een geldige code. De instellingen (G2FAEnabled, G2FASecret) worden opgeslagen op het Login-object (Login.php:345-348).
Bij inloggen met 2FA actief, toont de G2FAController (_core/controller/classes/atx/customers/G2FAController.php) een verificatiescherm. De klant kan het apparaat als vertrouwd aanduiden om de 2FA-stap op dat apparaat in de toekomst over te slaan.
Klantcategorieën¶
Elke klant heeft een klantcategorie (CustomerCat, _core/model/classes/atx/customers/CustomerCat.php), aangeduid met een code (bijv. A, B, D1, D2, …). De klantcategorie bevat uitsluitend metadata: naam (NL/FR/EN), code, e-mailadres, een Visible-vlag voor de registratie en een tijdstempel. CustomerCat bevat geen prijs- of kortingslogica. Prijzen worden bepaald door Customer::Pricelist (een aparte Pricelist-entiteit) en CustomerMargin-objecten.
De categoriecode wordt opgeslagen in Customer::Klantcat (Customer.php:72). De categorie heeft een naam in het Nederlands, Frans en Engels en kan zichtbaar of verborgen zijn voor de registratie.
Account verwijderen (GDPR)¶
Klanten kunnen hun eigen account verwijderen via DeleteAccountController (_core/controller/classes/atx/customers/DeleteAccountController.php). Bij bevestiging verloopt de volgorde als volgt (DeleteAccountController.php:58–61):
- Wordt een notificatie-e-mail gestuurd naar Atraxion met de logingegevens — terwijl de data nog intact is
- Worden de persoonsgegevens geanonimiseerd via
LoginDAO::anonymizeLogin()(regel 60) - Wordt de sessie vernietigd via
LoginService::destroySession()(regel 61)
Mini-shop-instellingen in het profiel¶
Klanten die een mini-shop bezitten, kunnen via hun profiel op www.atraxion.com (menu E-mail > Mini-shop instellingen) hun marges per producttype instellen. In UserView.php (_core/view/classes/atx/customers/UserView.php:163) is het tabblad #mini-shop-margins terug te vinden, met aparte tabs per artikeltype.
Zie Mini-shops (Tyrecloud) voor een volledig overzicht van het mini-shop-concept, licenties en bestellingen.
Wachtwoord opnieuw instellen¶
Wachtwoordherstel verloopt via RecoverPasswordController (_core/controller/classes/atx/customers/RecoverPasswordController.php) en de bijbehorende RecoverPasswordService (_core/model/classes/atx/customers/RecoverPasswordService.php).
Gerelateerde technische pagina's¶
- Datamodel & databases — tabellen
customer,customer_user,customer_category - Observability — Matomo login- en registratie-tracking