Shopify en Business Central
Shopify Business Central koppeling
Voorraad per locatie, prijzen en staffels gaan van Business Central naar Shopify; orders, klanten en bedrijven komen terug, en elke zending wordt een fulfilment met trackingnummer. Gebouwd op jouw Shopify-abonnement en jouw Business Central, en daarna door ons gedraaid en bewaakt.
Wat je tussen Shopify en Business Central koppelt
Business Central is de bron voor artikelen, voorraad, prijzen en de boekhouding. Shopify verkoopt en vangt de order. De koppeling verbindt zes stromen.
| Stroom | Richting | Shopify, GraphQL Admin API | Business Central |
|---|---|---|---|
| Artikelen en varianten | naar Shopify | productSet |
items, itemVariants |
| Voorraad per locatie | naar Shopify | inventorySetQuantities |
query per locatie, als webservice |
| Prijzen, staffels, catalogi | naar Shopify | prijslijst per catalogus | unitPrice, prijslijsten als webservice |
| Orders | naar Business Central | webhook orders/create, daarna de order |
salesOrders met regels |
| Klanten en bedrijven | naar Business Central | klant, of bedrijf met locatie | customers |
| Zendingen | naar Shopify | fulfillmentCreate |
salesShipments |
Drie van die stromen raken een gat in de standaard-API v2.0 van Business Central: voorraad per locatie, prijslijsten en het trackingnummer van een zending. Die komen uit een pagina of query die in Business Central als OData-webservice wordt gepubliceerd. De systeemkant staat op Business Central koppeling, de shopkant op Shopify koppeling.
Welk systeem is leidend, per gegeven
| Gegeven | Leidend | Richting | Gedrag |
|---|---|---|---|
| Artikelnummer, omschrijving, variantcode | Business Central | naar Shopify | gewijzigde artikelen, op lastModifiedDateTime |
| Producttekst, afbeeldingen, collecties | Shopify of het PIM | blijft in Shopify | de koppeling schrijft er niet overheen |
| Voorraad per Shopify-locatie | Business Central, per locatie | naar Shopify | available, met de laatst bekende stand als controle |
| Prijs en compare-at-prijs | Business Central | naar Shopify | per variant, inclusief of exclusief btw zoals de shop rekent |
| Staffels en B2B-prijzen | Business Central | naar Shopify | per catalogus, nachtelijk |
| Order | Shopify tot de import, daarna Business Central | naar Business Central | één keer, met name als sleutel |
| Debiteur, boekingsgroepen | Business Central | match op nummer, dan e-mail | nieuwe klant via een sjabloon |
| Bedrijf en bedrijfslocatie (B2B) | Business Central | naar Shopify | debiteur wordt bedrijf |
| Zending, vervoerder, trackingnummer | Business Central of het WMS | naar Shopify | per fulfilment order |
Bij B2B draait de richting voor klanten om: de debiteur bestaat al in Business Central en wordt in Shopify een bedrijf met een bedrijfslocatie. Een webklant zonder account gaat de andere kant op.
Wat Shopify en Business Central anders bewaren
Voorraad: één totaal tegenover locaties
item.inventory in de API van Business Central is één alleen-lezen getal over alle locaties. Shopify houdt voorraad per locatie en per toestand bij, en heeft 10 locaties op Basic, Grow en Advanced en 200 op Plus. De koppeling leest het aantal per locatie uit een query die je als webservice publiceert, telt de Business Central-locaties op die bij één Shopify-locatie horen, en laat locaties weg die niet voor de webshop tellen, zoals een retourlocatie.
Welk getal het wordt, is een keuze. Fysiek op voorraad, of fysiek min wat al aan verkooporders is toegewezen. Het tweede voorkomt dat een order die in Business Central al gereserveerd is, in Shopify nog een keer verkocht wordt. Zie welke voorraad toon je in je webshop.
Variantcode tegenover opties
In Business Central is een variant een code van maximaal 10 tekens, zoals BL-M. Shopify kent per product maximaal 3 opties en 2.048 varianten, met per optie een waarde: Kleur Blauw, Maat M. De koppeling splitst de variantcode met een vertaaltabel in optiewaarden. Een artikel met vier eigenschappen past niet in drie opties; de vierde wordt een metafield of een apart product. Zie varianten.
Btw op de order, tot op de cent
Rekent de shop inclusief btw en staat de debiteur in Business Central op exclusief, dan moet er omgerekend worden. pricesIncludeTax op een verkooporder in de API is alleen-lezen en volgt de klant. De koppeling rekent de regel dus om.
De rekensom. Shopify: 5 stuks van 108,30 inclusief is 541,50. Stuurt de koppeling een stukprijs van 89,50 exclusief, dan rekent Business Central 5 x 89,50 = 447,50 plus 21% btw = 541,475, afgerond 541,48. Twee cent verschil, en de betaling van 541,50 sluit niet meer aan op de factuur. De koppeling stuurt daarom de stukprijs met de decimalen die Business Central voor stukprijzen toestaat, 108,30 / 1,21 = 89,50413, en controleert het ordertotaal voordat de order wordt aangeboden. Zie bedragen en btw mappen.
{
"externalDocumentNumber": "#1042",
"customerNumber": "D00412",
"salesOrderLines": [
{ "lineType": "Item", "lineObjectNumber": "10482",
"itemVariantId": "5f3c...", "quantity": 5, "unitPrice": 89.50413 }
]
}
Klanten, bedrijven en boekingsgroepen
Shopify levert een klant met een e-mailadres, of bij B2B een bedrijf met een of meer bedrijfslocaties. Business Central wil een debiteur met een klantboekingsgroep, een btw-bedrijfsboekingsgroep en een algemene bedrijfsboekingsgroep. De customers-resource van de API heeft daar geen velden voor; een sjabloon op de pagina API Setup vult ze bij het aanmaken. Een Belgische zakelijke klant met verlegde btw hoort in een andere groep dan een Nederlandse particulier. De koppeling bepaalt dat op land en btw-nummer en zet de klant via een eigen API-pagina in de juiste groep. Zie verplichte velden die de bron niet heeft.
De technische werkelijkheid van deze combinatie
| Limiet | Shopify | Business Central online |
|---|---|---|
| Verzoeken | 100 punten per seconde, 1.000 op Plus | 6.000 per 5 minuten per gebruiker, 5 tegelijk |
| Boven de grens | THROTTLED |
429 |
| Per aanroep | 250 regels in een lijst | 20.000 records per pagina, $batch van 100 |
| Wijziging melden | webhook, 8 pogingen in 4 uur | webhook, abonnement verloopt na 3 dagen |
| Versies | elk kwartaal, 12 maanden ondersteund | maandelijkse updates online |
Voorraad, doorgerekend. 8.000 SKU's, twee Shopify-locaties: 16.000 standen. inventorySetQuantities neemt 250 standen per aanroep, dus 16.000 / 250 = 64 aanroepen. Uit Business Central is het één query: 16.000 regels passen in één pagina van 20.000. Na de eerste ronde gaan alleen gewijzigde standen mee. Elke aanroep naar Shopify draagt een @idempotent-sleutel, verplicht vanaf API-versie 2026-04, zodat een herhaalde poging na een time-out de stand niet twee keer wijzigt.
Orders, doorgerekend. 600 orders op een drukke dag, met per order een klantcontrole en één salesOrders-verzoek met de regels erin: 1.200 verzoeken op een dag, tegen 6.000 per 5 minuten. De limiet van Business Central speelt hier geen rol; de doorlooptijd wel, want elke order wacht op de webhook en de import.
Zendingen komen niet via een webhook. salesShipments staat niet op de lijst met entiteiten die een webhook ondersteunen en heeft geen veld voor trackingnummer of vervoerder. De koppeling vraagt nieuwe zendingen op met een filter op lastModifiedDateTime, leest het trackingnummer uit een webservice en boekt de fulfilment. De naam van de vervoerder in trackingInfo.company moet exact overeenkomen met Shopify's lijst, anders krijgt de klant geen werkende trackinglink.
Shopify-versies vervallen na 12 maanden. Shopify ondersteunt een versie 12 maanden. Een koppeling die op een vervallen versie blijft, krijgt antwoord van de oudste versie die nog bestaat, zonder foutmelding over velden die zijn verdwenen. Wij zetten de koppeling over voordat een versie vervalt. De doorvoer voor je eigen aantallen reken je uit met doorvoer berekenen.
Wat een standaardkoppeling hier niet doet
Microsoft levert de Shopify Connector mee met Business Central online. De documentatie van Microsoft noemt zelf deze grenzen:
- Geen staffels. Prijzen worden berekend met een tijdelijke offerte voor een hoeveelheid van 1. Prijzen of kortingen per hoeveelheid gaan niet mee.
- Alleen online. Niet voor Business Central on-premises.
- Gesplitste regels. Een Shopify-orderregel die over twee locaties is verdeeld, wordt in Business Central één regel met één locatie. Worden alle stuks tegelijk verzonden, dan wordt de order in Shopify niet als verzonden gemarkeerd. Orders met twee regels voor hetzelfde product worden niet verzonden gemeld.
- Btw opnieuw berekend. De btw uit de Shopify-order wordt bij het maken van de verkooporder in Business Central opnieuw berekend.
- Op een schema. Orders, voorraad en prijzen lopen via taken in de job queue; voor voorraad noemt Microsoft elke 15 tot 30 minuten.
- Vaste API-versie. De Shopify Connector van 2026 release wave 1 gebruikt Shopify-API 2026-01, bereikbaar tot 31 december 2026. Wie Business Central niet bijwerkt, verliest dan de synchronisatie.
Een gebouwde koppeling heeft die vaste punten niet: staffels per catalogus, de verdeling over fulfilment orders, de btw-controle en het tempo worden ingericht op jouw winkel en jouw Business Central. Andere combinaties met Business Central: Magento Business Central koppeling en WooCommerce Business Central koppeling.
Als het misgaat
| Wat er misgaat | Wat de koppeling doet | Wat je ziet |
|---|---|---|
Shopify geeft THROTTLED |
wacht tot er punten zijn, gaat door | niets |
| Business Central antwoordt 429 | order wacht in de wachtrij, nieuwe poging met langere pauze | niets, tenzij het aanhoudt |
| Ordertotaal wijkt af van Shopify | order wordt vastgehouden | order, beide totalen en het verschil |
| SKU bestaat niet in Business Central | die order wordt vastgehouden | order en SKU |
CHANGE_FROM_QUANTITY_STALE |
stand opnieuw lezen, open orders verrekenen, opnieuw schrijven | een regel in het logboek |
| Vervoerder onbekend bij Shopify | fulfilment met trackingnummer en URL | de vervoerder |
| Webhook-abonnement in Business Central verlopen | opnieuw aangemaakt, gemiste wijzigingen op datum opgehaald | een regel in het logboek |
Een order die blijft falen, bewaart de koppeling met de oorspronkelijke inhoud en biedt hij opnieuw aan zodra de oorzaak is opgelost. name is de sleutel, dus een herhaling maakt geen tweede verkooporder. Een controleronde vergelijkt de Shopify-orders van de laatste dagen met externalDocumentNumber in Business Central.
Voor livegang draait de koppeling als dry run: hij leest beide kanten en laat per variant en per locatie zien welke voorraad en prijs hij zou schrijven, zonder te schrijven. Zie dry run en goedkeuring. Andere systemen achter Shopify: Shopify AFAS koppeling en Shopify Exact Online koppeling. Alle stromen staan op koppelingen. Vertel welk Shopify-abonnement en welke Business Central je hebt.
Veelgestelde vragen
Waarom niet de Shopify Connector van Microsoft?
De koppeling van Microsoft heeft vaste grenzen die Microsoft zelf beschrijft. Hij rekent prijzen uit voor een hoeveelheid van 1, dus staffels gaan niet mee. Hij draait alleen op Business Central online, op een vast schema in de job queue. En een orderregel die in Shopify over twee locaties is verdeeld, wordt in Business Central één regel, waarna de fulfilment niet terugkomt.
Werkt de koppeling ook met Business Central on-premises?
Ja. De API v2.0 bestaat ook on-premises; de beheerder zet hem aan, en het adres bevat je eigen server en serverinstance. De Shopify Connector van Microsoft werkt alleen online. Voor de koppeling maakt het verder weinig uit: de stromen en de mapping zijn dezelfde.
Heb ik Shopify Plus nodig voor B2B-prijzen uit Business Central?
Niet per se. B2B zit ook op Basic, Grow en Advanced, met 3 actieve catalogi. Heeft Business Central meer klantprijsgroepen, dan kiest de koppeling welke drie niveaus de shop krijgt. Een eigen catalogus per bedrijf kan alleen op Plus. Zie klantspecifieke prijzen.
Welk ordernummer staat er in Business Central?
Het Shopify-ordernummer zoals de klant het ziet, het veld name, bijvoorbeeld #1042. Dat gaat naar externalDocumentNumber op de verkooporder, een veld van 35 tekens. Shopify zegt zelf dat name niet uniek is over meerdere winkels; met twee Shopify-winkels krijgt elk nummer een voorvoegsel per winkel.
Kan de koppeling orders ouder dan 60 dagen ophalen?
Alleen met het extra recht read_all_orders, dat bij Shopify wordt aangevraagd. Voor een lopende koppeling is 60 dagen genoeg. Bij de overstap naar Business Central, als de historie mee moet, is het wel nodig.
Wat gebeurt er als de koppeling een paar uur uitvalt?
Shopify probeert een webhook tot 8 keer in 4 uur. Daarna haalt de controleronde alle orders op die sinds de laatste geslaagde ronde zijn gewijzigd. Zendingen en voorraad uit Business Central wachten in de wachtrij. Er gaat niets verloren; het komt later binnen.
Vertel wat je nodig hebt
Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.
- Je weet de prijs en de doorlooptijd voordat je iets toezegt
- Wij zoeken uit welke koppeling het werk uit handen neemt
- Wij verzorgen de bouw, hosting, bewaking en het onderhoud
- Je team krijgt minder overtypwerk en minder uitzoekwerk