Koppelingen · AFAS

AFAS Magento koppeling: orders, voorraad en prijzen zonder handwerk

Een goede AFAS Magento koppeling is saai. Elke order komt precies één keer in AFAS, elke voorraadmutatie staat op tijd in de shop, en als er iets misgaat weet je het voordat de klant belt. Wij bouwen en onderhouden die koppeling op de AFAS Profit REST API, direct of via middleware. Je praat met de mensen die het bouwen.

  • Gebouwd op de officiële AFAS Profit REST API
  • Retry, logging en alerts vanaf dag één
  • Magento 2, Shopify of Laravel-middleware

Wat een AFAS Magento koppeling moet oplossen

Een AFAS Magento koppeling verbindt AFAS Profit met Magento 2. In AFAS staan je administratie, artikelen, debiteuren en vaak ook je voorraad. In Magento verkoop je. Zonder koppeling typt iemand orders over, wordt voorraad met de hand bijgewerkt en lopen de prijzen in de shop achter op de prijslijst in AFAS. Dat kost tijd per order en levert fouten op die je pas ziet bij een retour of een boze klant.

De vraag is zelden óf je moet koppelen. De vraag is welke data welke kant op gaat, hoe vaak, en welk systeem per gegeven de bron van de waarheid is. Meestal is AFAS leidend voor artikelen, prijzen, voorraad en debiteuren, en Magento voor orders, klantaccounts en content. Leg je die afspraak niet hard vast, dan overschrijft de koppeling vroeg of laat goede data met oude data.

Op deze pagina lees je hoe AFAS en Magento technisch met elkaar praten, welke route bij jouw situatie past (module, iPaaS of maatwerk-middleware), wat je vooraf in AFAS moet regelen en waar koppelingen in de praktijk op stuklopen. Dezelfde principes gelden voor Shopify en voor een Laravel-laag ertussen. Die behandelen we kort aan het eind.

Hoe AFAS en Magento technisch koppelen: de Profit REST API

Elke serieuze AFAS-koppeling draait op dezelfde bouwstenen. Wie deze kent, kan elk koppelvoorstel beoordelen.

AFAS Profit stelt data beschikbaar via connectoren. Met een GetConnector lees je data uit AFAS, met een UpdateConnector schrijf je data terug. Een GetConnector is geen vaste tabel maar een view die in AFAS zelf wordt ingericht: welke velden erin zitten, bepaal je in Profit. Daardoor is de inrichting in AFAS net zo belangrijk als de code aan de Magento-kant. Wijzigt iemand de view, dan verandert de output van de koppeling.

De REST-omgeving heeft per AFAS-omgeving een eigen adres, in de vorm van een omgevingsnummer gevolgd door rest.afas.online/profitrestservices. Voor test- en acceptatieomgevingen bestaan aparte adressen. Je authenticeert met een token per gebruiker of app-connector, dat je Base64-gecodeerd meestuurt in de Authorization-header met het voorvoegsel AfasToken. AFAS vereist TLS 1.2. Het token geeft precies de rechten van de gekoppelde AFAS-gebruiker, dus een aparte koppelgebruiker met minimale rechten is verplicht kost, geen luxe.

Ophalen gaat in pagina's met de parameters skip en take. Zonder die parameters geeft AFAS de eerste 100 rijen terug. Alles in één keer ophalen kan technisch, maar AFAS raadt het af. Combineer pagineren altijd met een vaste sortering, anders kan de volgorde tussen calls verschuiven en mis je records of krijg je dubbelen. AFAS adviseert verder om het aantal kolommen maal de take-waarde onder de 150.000 te houden. Eén API-call mag maximaal 75 MB zijn en verbindingen die langer dan ongeveer 15 minuten openstaan worden afgebroken. Daar ontwerp je je batches op.

Het belangrijkste architectuurpunt: AFAS heeft geen webhooks voor artikelen, voorraad of prijzen. Webhooks bestaan alleen voor dossieritems en workflows. Wil je weten wat er in AFAS is veranderd, dan moet je pollen op de velden aangemaakt op en gewijzigd op. Een koppeling die elke paar minuten de volledige artikellijst ophaalt, botst met het fair-use-beleid van AFAS en is bovendien traag. Delta-synchronisatie op gewijzigd op, met een opgeslagen laatste-sync-tijdstip, is de juiste route.

Schrijven naar AFAS gaat via UpdateConnectors met POST voor nieuwe records, PUT voor wijzigingen en DELETE voor verwijderen. Verkooporders gaan bijvoorbeeld via de UpdateConnector FbSales. De payload is genest en AFAS valideert streng: één veld op de verkeerde plek en je krijgt een foutmelding terug in plaats van een order. Daarom bouwen we die payloads centraal op één plek, met tests, en loggen we elke afwijzing met de originele foutmelding van AFAS.

Plan een vrijblijvend gesprek over je project

Een half uur via video met de mensen die het werk ook echt doen. Kies hieronder een moment dat jou past.

  • Direct met het vaste team, geen tussenlagen
  • Concrete feedback op je huidige situatie of plannen
  • Eerlijk advies, ook als het antwoord "niet doen" is
  • Indicatie van kosten en tijdlijn
Liever bellen? 0591-239 299
Beschikbaar deze week

Plan een gratis Tech Check

Vrijblijvend jouw uitdagingen bespreken

Of bel direct: 0591-239 299

Welke data gaat welke kant op bij AFAS en Magento 2

Dit is het datamodel dat wij als startpunt gebruiken. In de analyse passen we het aan op jouw inrichting.

GegevenRichtingBron van de waarheidFrequentie (indicatief)Waar het misgaat
Artikelen en attributenAFAS naar MagentoAFAS (of een PIM)Delta per kwartier tot per uurMarketingteksten en afbeeldingen horen vaak niet in AFAS; dan heb je een PIM of Magento als bron voor content nodig
VoorraadAFAS naar MagentoAFAS of WMSElke paar minuten, deltaGereserveerde voorraad van openstaande orders niet meegerekend, waardoor je oversellt
Prijzen en prijslijstenAFAS naar MagentoAFASDagelijks of bij wijzigingStaffels, klantspecifieke prijzen en acties lopen niet één-op-één over naar Magento-prijsregels
Debiteuren (B2B)Beide kantenAFAS voor B2B, Magento voor consumentenBij registratie en bij wijzigingDubbele debiteuren doordat matching op e-mailadres of KvK-nummer ontbreekt
OrdersMagento naar AFASMagentoDirect na betaling, via queueDubbele orders bij een time-out en een blinde retry zonder idempotentie
Orderstatus en track and traceAFAS naar MagentoAFAS of WMSElke 5 tot 15 minutenStatus wel in AFAS, nooit terug in de shop, dus de klant mailt je klantenservice
Facturen en betalingenBeide kantenAFASDagelijksBetaalde orders staan in AFAS als openstaande post omdat de betaalstatus niet meekomt

AFAS Magento koppeling: module, iPaaS of maatwerk-middleware

Er zijn drie routes. Geen ervan is altijd de beste. Dit is de keuzehulp die wij zelf gebruiken.

RoutePast bijVoordelenNadelen
Kant-en-klare Magento-module of connectorStandaard B2C-shop, weinig maatwerk in AFAS, vooral orders en voorraadSnel live, lage instapkostenWerkt alleen als jouw AFAS-inrichting op de aannames van de module lijkt; maatwerk wordt een patch op andermans code
iPaaS zoals AlumioMeerdere systemen (AFAS, PIM, WMS, marketplaces), team dat zelf mappings wil beherenVisuele mappings, monitoring en retry ingebouwd, connectoren voor AFAS en MagentoLicentiekosten per jaar; complexe businesslogica blijft lastig in een visuele tool
Laravel-middleware op maatAfwijkende B2B-logica, hoge volumes, eigen regels voor prijzen, voorraad of orderrouteringVolledige controle, geen licentie per koppeling, queues en monitoring precies zoals jij ze nodig hebtHogere bouwinspanning vooraf en je hebt een team nodig dat het onderhoudt
Directe koppeling in Magento-codeEén systeem, beperkte scope, geen plannen voor uitbreidingGeen extra infrastructuurBelast je webshop-server, en bij een Magento-upgrade of replatforming moet de koppeling mee

AFAS en PHP: zelf een AFAS-koppeling bouwen

Zoek je op AFAS en PHP, dan wil je meestal weten of je zelf tegen de AFAS-API kunt programmeren. Dat kan. De REST API is gewone HTTP met JSON, dus elke PHP-applicatie kan ermee praten, ook Magento 2 en Laravel. Er bestaan open-source PHP-pakketten op Packagist die de token-authenticatie en de connector-calls inpakken, waaronder generieke Profit-clients en een Laravel-specifiek pakket. Die schelen wat werk, maar ze lossen het moeilijke deel niet op.

Het moeilijke deel zit niet in de HTTP-call. Het zit in pagineren met een vaste sortering, in delta-sync op gewijzigd op, in het mappen van AFAS-veldnamen naar je eigen datamodel, in het netjes afhandelen van afwijzingen van UpdateConnectors en in idempotentie: zorgen dat een order die twee keer wordt aangeboden toch maar één keer in AFAS komt. Wie dat overslaat, heeft binnen een week een koppeling die werkt in de demo en faalt op een drukke maandag.

Hoe wij dat in Laravel aanpakken, met DTO's voor de mapping, throttling van queue-jobs en paging in batches, lees je in onze uitgebreide gids over Laravel en AFAS-synchronisatie. Op deze pagina blijven we bij de keuzes die je als eigenaar van een webshop moet maken.

AFAS Magento online synchroniseren: realtime of batch

Realtime klinkt altijd beter, maar het is niet voor elk gegeven nodig of zelfs mogelijk. Omdat AFAS voor artikelen, voorraad en prijzen geen webhooks biedt, is alles wat van AFAS naar Magento gaat in de praktijk near-realtime: een poll elke paar minuten op wijzigingen. Voor voorraad is dat meestal ruim voldoende. Voor prijzen is een dagelijkse of uurlijkse sync vaak genoeg, mits je acties ook netjes op tijd aan- en uitzet.

Orders gaan wel direct, want Magento kan na een betaling meteen een event afvuren. Wij zetten die order dan niet synchroon in AFAS tijdens het afrekenen, maar in een queue. De klant krijgt zijn bevestiging, en de koppeling probeert het daarna. Is AFAS even niet bereikbaar of in onderhoud, dan wacht de order in de queue en gaat hij later alsnog door. Een checkout die stilvalt omdat het ERP traag reageert, is een ontwerpfout.

Voor B2B-shops met klantspecifieke prijzen speelt een extra keuze: haal je de prijs live uit AFAS op bij het bekijken van een product, of synchroniseer je prijslijsten vooraf naar Magento? Live ophalen is altijd actueel, maar maakt de snelheid van je shop afhankelijk van de API van AFAS. Vooraf synchroniseren is sneller en robuuster. Wij kiezen vrijwel altijd voor vooraf synchroniseren met een live controle bij het plaatsen van de order.

Checklist: voorbereiding voor een AFAS Magento integratie

Met deze punten op orde ben je weken eerder live. Het meeste ligt aan de AFAS-kant.

In AFAS Profit

  • Een aparte koppelgebruiker of app-connector met alleen de rechten die de koppeling nodig heeft
  • GetConnectors ingericht voor artikelen, voorraad, prijzen en debiteuren, inclusief de velden aangemaakt op en gewijzigd op
  • Een vast unieke sleutel per artikel (artikelcode) die ook als SKU in Magento wordt gebruikt
  • Een test- of acceptatieomgeving met realistische data om tegen te ontwikkelen
  • Afspraken over wie GetConnector-views mag aanpassen, en dat wijzigingen vooraf gemeld worden

In Magento 2

  • Een overzicht van attributen, attribuutsets en welke uit AFAS moeten komen
  • Duidelijkheid over B2C, B2B of beide, en hoe klantgroepen aan AFAS-prijslijsten hangen
  • Betaalmethoden, verzendmethoden en btw-tarieven gemapt op de codes in AFAS
  • Cron en queue-consumers die betrouwbaar draaien op de hosting

Afspraken en eigenaarschap

  • Per gegeven vastgelegd welk systeem de bron van de waarheid is
  • Wat er moet gebeuren als een order door AFAS wordt afgewezen, en wie daar een melding van krijgt
  • Hoe met bestaande debiteuren en historische orders wordt omgegaan bij de eerste sync

Waar AFAS-koppelingen in de praktijk op stuklopen

Dubbele orders zijn het meest voorkomende probleem. Een call naar AFAS loopt in een time-out, de koppeling weet niet of de order is aangekomen en probeert het opnieuw. Resultaat: twee orders in AFAS, twee keer gepickt. De oplossing is idempotentie: het Magento-ordernummer als externe referentie in AFAS opslaan en voor elke retry eerst controleren of de order al bestaat.

Stille fouten zijn het tweede probleem. Een koppeling die faalt zonder dat iemand het merkt, is erger dan geen koppeling, omdat iedereen aanneemt dat het goed gaat. Elke afgewezen order, elke mislukte voorraadsync en elke achterstand in de queue moet een melding opleveren bij een persoon, met de foutmelding van AFAS erbij. Een logbestand op een server dat niemand leest, telt niet.

Het derde probleem is drift in de inrichting. Iemand voegt in AFAS een veld toe aan een view, verandert een artikelgroep of zet een nieuw magazijn op, en de koppeling gaat stuk of, erger, synchroniseert ineens verkeerde data. Daarom documenteren we de verwachte GetConnector-structuur in de code en valideren we elke response daartegen. Wijkt de structuur af, dan stopt de sync en krijg je een melding, in plaats van dat er foute voorraad in je shop komt.

AFAS koppelen aan Shopify of via Laravel-middleware

Voor Shopify geldt dezelfde AFAS-kant: GetConnectors, UpdateConnectors en pollen op wijzigingen. Het verschil zit aan de shopkant. Shopify heeft geen eigen server waar je koppelcode op draait, dus de koppeling leeft altijd buiten Shopify: in een app, in een iPaaS of in eigen middleware. Shopify heeft bovendien API-limieten waar je bulkupdates van voorraad en prijzen op moet ontwerpen.

Laravel-middleware zetten we in als AFAS niet het enige systeem is. Denk aan AFAS plus een WMS, een PIM of meerdere verkoopkanalen. De middleware wordt dan het knooppunt: één plek met queues, mapping, logging en een dashboard voor fouten, zodat je shop en je ERP niet direct van elkaar afhankelijk zijn. Wissel je later van shopplatform, dan blijft de AFAS-kant van de koppeling staan.

Onze aanpak voor een AFAS Magento koppeling

Van analyse tot beheer, met hetzelfde vaste team.

  1. 1

    Analyse van datastromen

    We brengen per gegeven in kaart welke kant het op gaat, hoe vaak en welk systeem leidend is. Dat leggen we vast in een koppelplan dat je kunt lezen zonder technische kennis.

  2. 2

    Routekeuze en inschatting

    Module, iPaaS of Laravel-middleware: we adviseren op basis van je volumes, je AFAS-inrichting en je plannen. Je krijgt een onderbouwde inschatting van de uren vooraf.

  3. 3

    Inrichting AFAS en testomgeving

    Samen met je AFAS-beheerder of -partner richten we GetConnectors, de koppelgebruiker en een testomgeving in. Zonder testomgeving bouwen we niet tegen productie.

  4. 4

    Bouwen en testen

    We bouwen de koppeling met queues, idempotente orderverwerking en validatie van AFAS-responses, en testen met echte orders, randgevallen en foutscenario's.

  5. 5

    Initiële sync en livegang

    Eerst een gecontroleerde volledige sync van artikelen, voorraad en debiteuren, daarna overschakelen op delta-sync. Livegang plannen we buiten piekmomenten.

  6. 6

    Monitoring en beheer

    Na livegang blijven we eigenaar: alerts op fouten en achterstanden, aanpassingen bij wijzigingen in AFAS en meegaan met Magento-upgrades.

Wat je van ons krijgt

  • Een koppelplan met per gegeven richting, frequentie en bron van de waarheid
  • Ingerichte koppelgebruiker en gedocumenteerde GetConnector-definities
  • Order-sync van Magento naar AFAS via een queue, met idempotentie tegen dubbele orders
  • Delta-synchronisatie van artikelen, voorraad en prijzen op basis van gewijzigd op
  • Debiteurmatching voor B2B-klanten, zonder dubbele relaties in AFAS
  • Foutlog met de originele AFAS-meldingen en e-mail- of Slack-alerts bij afwijzingen
  • Technische documentatie en een overdrachtssessie voor je eigen team
  • Beheerafspraken voor wijzigingen in AFAS, Magento-upgrades en uitbreidingen

Waarom Coding.nl voor je AFAS-koppeling

Eén vast team, geen tussenlagen

Geen projectmanagers of accountmanagers. De mensen die je koppeling bouwen, zijn ook degenen die je belt als er iets misgaat.

Beide kanten van de koppeling

We kennen Magento 2 en Hyvä, Shopify en Laravel van binnenuit. De koppeling past daardoor op je shop in plaats van ernaast te hangen.

Eerlijke routekeuze

We bouwen maatwerk en werken met Alumio. Daardoor adviseren we de route die bij je situatie past, niet de route die wij toevallig verkopen.

15+ jaar e-commerce

We weten waar koppelingen in de praktijk breken: drukke dagen, acties, retouren en B2B-uitzonderingen. Daar ontwerpen we op.

Hyvä Silver PartnerHypernode Silver Partner

Veelgestelde vragen

Via de AFAS Profit REST API: met GetConnectors lees je artikelen, voorraad, prijzen en debiteuren uit AFAS, met UpdateConnectors zet je orders en klanten in AFAS. Daartussen zit een module, een iPaaS zoals Alumio of maatwerk-middleware. Welke route past, hangt af van je volumes, je AFAS-inrichting en hoeveel andere systemen er meedoen.

AFAS en je webshop koppelen zonder verrassingen?

Vertel ons welke systemen je gebruikt en waar het nu wringt. We denken mee over de route en geven een onderbouwde inschatting vooraf. Je praat direct met het team dat de koppeling bouwt.