Ga naar inhoud

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-status met 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-app
  • verifyKey(Login $user, string $key) — controleert een ingevoerde 6-cijferige code
  • enableTwoFactor(Login $user) / disableTwoFactor(Login $user) — zet 2FA aan of uit
  • addTrustedDevice(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):

  1. Wordt een notificatie-e-mail gestuurd naar Atraxion met de logingegevens — terwijl de data nog intact is
  2. Worden de persoonsgegevens geanonimiseerd via LoginDAO::anonymizeLogin() (regel 60)
  3. 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