Naar de inhoud
SyncMyShop

Koppelingen

OCI koppeling: je klant bestelt in jouw webshop vanuit zijn eigen inkoopsysteem

Je klant opent jouw webshop vanuit AFAS, SAP of Coupa, ziet zijn eigen prijzen en neemt de winkelmand mee terug als inkoopaanvraag. Wij bouwen de inlog, de overdracht van de winkelmand en de ontvangst van de order, en draaien en bewaken de koppeling daarna.

Wat is een OCI koppeling?

Een OCI koppeling verbindt het inkoopsysteem van je klant met jouw webshop. De inkoper opent je webshop vanuit zijn eigen systeem, is direct ingelogd, vult een winkelmand en neemt die mee terug als inkoopaanvraag. Er gaan twee dingen over de lijn: de inlog van het inkoopsysteem naar de webshop, en de winkelmand van de webshop naar het inkoopsysteem.

OCI staat voor Open Catalog Interface en is het protocol van SAP. cXML PunchOut doet hetzelfde met XML-berichten en is de variant van Coupa en SAP Ariba. AFAS gebruikt beide in één koppeling: OCI voor de winkelmand, cXML voor de order die daarna komt. In Nederland heet het geheel een OCI koppeling, welk protocol er ook onder zit.

De andere vier stromen op koppelingen tussen je webshop en de systemen erachter verplaatsen gegevens op de achtergrond. OCI is een sessie. Er zit een inkoper achter een browser en elke stap moet kloppen op het moment dat hij klikt. De definitie en de techniek van die sessie staan in wat is een OCI koppeling.

Zo verloopt een bestelling via OCI

Een inkoper van Bakker Installatie B.V. bestelt drie artikelen. Dit gebeurt er:

  1. De inkoper klikt in zijn inkoopsysteem op de tegel van jouw webshop.
  2. Zijn browser roept het inlogadres van je webshop aan met een gebruikersnaam, een wachtwoord en HOOK_URL: het adres waar de winkelmand straks naartoe moet.
  3. De koppeling herkent de klant, bewaart HOOK_URL bij de sessie en opent de webshop. Er komt geen inlogscherm.
  4. De inkoper ziet het assortiment en de prijzen van zijn eigen bedrijf en vult de winkelmand.
  5. In plaats van afrekenen klikt hij op een knop zoals "Overnemen in inkoopsysteem". De winkelmand gaat als formulier naar HOOK_URL, met per regel een set NEW_ITEM-velden.
  6. Het inkoopsysteem maakt er een inkoopaanvraag van. Daar komen kostenplaats, grootboekrekening en budget bij, en de aanvraag gaat langs de goedkeurders.
  7. Na goedkeuring stuurt het inkoopsysteem de inkooporder naar jou: als cXML-bericht, of als pdf per e-mail.
Een bestelling via OCI, van inlog tot inkooporder Het inkoopsysteem van de klant start de sessie met gebruikersnaam, wachtwoord en HOOK_URL. De koppeling opent de webshop met de prijzen van debiteur 10482. De winkelmand van 3 regels gaat als NEW_ITEM-velden naar HOOK_URL. Na goedkeuring in het inkoopsysteem komt de inkooporder terug en wordt hij een order in de webshop. Inkoopsysteem van je klant Koppeling bij ons Webshop van jou USERNAME, PASSWORD, HOOK_URL klant herkend, HOOK_URL bewaard sessie voor debiteur 10482, eigen prijzen en assortiment De inkoper vult de winkelmand: 3 regels, samen € 521,71. winkelmand, 3 regels POST naar HOOK_URL, 21 NEW_ITEM-velden goedkeuring in het inkoopsysteem inkooporder 4500001234, cXML of pdf per e-mail order met inkoopordernummer Tussen de overdracht van de winkelmand en de inkooporder bestaat er bij jou nog geen order. De klant kan regels wijzigen of de aanvraag afkeuren.
Een bestelling via OCI. Tussen de overdracht van de winkelmand en de inkooporder zit de goedkeuring bij je klant.

Tussen stap 5 en stap 7 bestaat er bij jou nog geen order. De klant kan in zijn eigen systeem aantallen wijzigen, regels verwijderen of de aanvraag afkeuren. AFAS kent drie typen koppeling die vastleggen wat er na terugkeer nog gewijzigd mag worden. Bij twee daarvan bewaart de leverancier de winkelmand zelf onder een conceptordernummer, zodat de order die later binnenkomt aan die winkelmand gekoppeld wordt. Voorraad reserveren bij de overdracht of pas bij de order is daarom een regel die per klant wordt vastgelegd.

Wat elke kant levert

De klant richt zijn inkoopsysteem in, jij levert een webshop die de sessie aankan. Per onderdeel:

Onderdeel Inkoopsysteem van je klant Jouw webshop en de koppeling
Start van de sessie Het inlogadres, de gebruikersnaam en het wachtwoord, vastgelegd in het profiel van de leverancier Een inlogadres dat die gegevens aanneemt en de klant erbij vindt
Retouradres HOOK_URL, bij elke sessie opnieuw aangemaakt HOOK_URL bewaren bij de sessie en in het action-attribuut van het formulier zetten
Prijzen en assortiment Het contract met jou De prijslijst en het assortiment van deze debiteur, geladen bij de start van de sessie
Winkelmand Leest de NEW_ITEM-velden en maakt artikelen en aanvraagregels aan Per regel de velden die dit systeem leest, binnen de maximale lengte
Goedkeuring Workflow, budget en grootboekrekening Niets. De winkelmand wacht
Order Een cXML-order naar een adres van de leverancier, of een pdf per e-mail Een adres dat de order aanneemt en hem in webshop of ERP zet
Wat elke kant levert bij een OCI koppeling Het inkoopsysteem van de klant levert de inlog en HOOK_URL en krijgt de winkelmand in NEW_ITEM-velden terug. De webshop levert de winkelmand, het ERP de prijzen en het assortiment per debiteur. De koppeling zit ertussen en schrijft elke sessie en overdracht naar het dashboard. Inkoopsysteem AFAS, SAP of Coupa Koppeling inlog, mapping, order Webshop winkelmand ERP prijs, assortiment Dashboard log per sessie inlog, HOOK_URL, order NEW_ITEM sessie per klant winkelmand prijslijst elke sessie
Wat elke kant levert. De koppeling vertaalt tussen de inlog van het inkoopsysteem en de winkelmand van je webshop.

De specificatie van SAP legt de namen van de inlogparameters niet vast. HOOK_URL is de gebruikelijke naam voor het retouradres en de beheerder van het inkoopsysteem mag een andere kiezen. De koppeling legt daarom per klant vast onder welke namen de gebruikersnaam, het wachtwoord en het retouradres binnenkomen.

De prijzen in de sessie zijn de prijzen van je ERP. Staat daar voor debiteur 10482 een nettoprijs van 17,08, dan moet de webshop bij de start van de sessie die prijs tonen en hem ongewijzigd in de winkelmand zetten. Dat is het werk van de prijzenstroom: klantspecifieke prijzen en assortiment per klant.

Wat er precies over de lijn gaat

De winkelmand gaat terug als formuliervelden met de naam NEW_ITEM-<veld>[<regelnummer>]. De specificatie van OCI 5.0 telt 34 velden, allemaal tekst met een vaste maximale lengte. Deze tien komen in vrijwel elke koppeling voor:

Veld Lengte Inhoud Regel
NEW_ITEM-DESCRIPTION 40 Omschrijving Verplicht, tenzij het artikelnummer van de klant in NEW_ITEM-MATNR staat
NEW_ITEM-QUANTITY 15 Aantal Verplicht. 11 cijfers voor de punt, 3 erna, geen duizendtalscheiding
NEW_ITEM-UNIT 3 Eenheid ISO-code die in het inkoopsysteem is ingericht
NEW_ITEM-PRICE 15 Prijs per prijseenheid Zelfde getalformaat als het aantal
NEW_ITEM-PRICEUNIT 5 Aantal waarop de prijs slaat Heel getal. Leeg telt als 1
NEW_ITEM-CURRENCY 5 Valuta Verplicht zodra de prijs gevuld is. ISO-code
NEW_ITEM-LEADTIME 5 Levertijd in dagen Heel getal
NEW_ITEM-VENDORMAT 40 Jouw artikelnummer AFAS leest er 30 tekens van
NEW_ITEM-MATGROUP 10 Artikelgroep bij de klant Bepaalt bij AFAS de grootboekrekening
NEW_ITEM-CUST_FIELD1 tot 5 10, 10, 10, 20, 50 Vrije velden Betekenis per klant afgesproken

Welke velden een klant leest, verschilt per systeem. AFAS noemt er voor zijn standaarddefinitie 12. Voor btw bestaat geen eigen veld in de specificatie: AFAS leest het percentage uit NEW_ITEM-CUST_FIELD1, een ander systeem verwacht het ergens anders of rekent het zelf uit.

Rekenvoorbeeld: drie regels, één prijseenheid

De winkelmand van Bakker Installatie B.V.:

Regel Aantal PRICE PRICEUNIT Regelbedrag
Wandcontactdoos, artikel 10482 12 17.08 1 12 × 17,08 = 204,96
Groepenkast, artikel 20915 2 149.00 1 2 × 149,00 = 298,00
Kabelbinder 200 mm, artikel 30377 500 3.75 100 500 / 100 × 3,75 = 18,75

Samen 204,96 + 298,00 + 18,75 = 521,71. Elke regel heeft 7 velden (omschrijving, aantal, eenheid, prijs, prijseenheid, valuta en artikelnummer), dus de overdracht is één formulier met 3 × 7 = 21 velden.

De derde regel laat zien waar NEW_ITEM-PRICEUNIT voor dient. Een kabelbinder kost 0,0375 per stuk. Het prijsveld heeft 3 decimalen, dus per stuk wordt dat 0.038, en 500 × 0,038 is 19,00: 25 cent te veel op één regel. Met een prijs van 3.75 per 100 klopt het regelbedrag. Een webshop die prijzen per stuk in vier decimalen bewaart, moet dat bij de overdracht omrekenen. Vergelijkbare verschillen tussen eenheden staan in eenheden en verpakkingen.

Waar het stil misgaat

Een OCI koppeling geeft zelden een foutmelding aan jouw kant. De inkoper ziet een leeg scherm of een afgewezen winkelmand en belt zijn eigen beheerder. Dit zijn de oorzaken die terugkomen:

Wat er misgaat Wat de inkoper ziet Oorzaak
Winkelmanden lopen door elkaar Artikelen van een collega in zijn winkelmand Alle inkopers van één klant loggen in met dezelfde gebruikersnaam en delen één sessie
Eenheid onbekend De hele winkelmand wordt afgewezen De webshop stuurt "stuk" of "doos"; het inkoopsysteem verwacht een code van 3 tekens zoals PCE
Omschrijving afgekapt Twee regels met dezelfde tekst Een omschrijving van 56 tekens komt aan als de eerste 40
Prijs wijkt af Regelbedrag klopt niet met de webshop Komma in plaats van punt, of een stuksprijs met meer dan 3 decimalen
Inlogscherm in plaats van webshop Hij moet inloggen, of de winkelmand is na één klik leeg De webshop draait in een frame van het inkoopsysteem en de browser stuurt de sessiecookie niet mee
Order komt niet aan Niets; jij wacht op een order die er al is OCI regelt alleen de winkelmand. De order komt via een andere route

Het eerste punt lost de koppeling op door per sessie een eigen winkelmand aan te maken en niet per account. AFAS heeft er de parameter {uniqueid} voor, die bij elke aanroep een nieuwe GUID meestuurt. Bij AFAS geldt verder dat alle regels van de winkelmand moeten kloppen: één regel die Profit niet kan verwerken, houdt de hele overdracht tegen. De helppagina van AFAS toont als voorbeeld een fout op het eenheidsveld.

Het frame komt van SAP-omgevingen die de webshop binnen het eigen scherm tonen en in de parameter returntarget meegeven in welk venster de winkelmand moet terugkomen. Shopify en Magento weigeren standaard elk vreemd frame. Wat daar per platform voor nodig is, staat op OCI koppeling webshop.

OCI stopt bij de winkelmand. De order, de orderbevestiging, het verzendbericht en de factuur staan niet in de specificatie. Komt de order als pdf per e-mail, dan typt iemand hem over, en hangt het van die persoon af of het inkoopordernummer meekomt dat de klant later op de factuur wil zien. Een koppeling die de order als cXML-bericht aanneemt, zet hem zonder overtypen in de orderstroom. De berichten na de order staan op PunchOut koppeling.

Het laatste risico is tijd. Een klant wijzigt een wachtwoord, een nieuw thema haalt de overdrachtsknop weg, het inkoopsysteem krijgt een nieuwe versie van de definitie. De koppeling werkte bij oplevering en breekt een half jaar later, en dat merk je pas als een inkoper belt. Daarom bewaken wij elke sessie: een mislukte inlog staat in het log op het moment dat het gebeurt, en een overgedragen winkelmand waar geen order op volgt blijft zichtbaar.

OCI of cXML PunchOut?

Welk protocol het wordt, bepaalt het inkoopsysteem van je klant. De verschillen:

OCI cXML PunchOut
Transport Formuliervelden via de browser van de inkoper XML-berichten; de sessie start van server naar server
Inlog Gebruikersnaam en wachtwoord gaan via de browser. Secure OCI, een uitbreiding in de specificatie van 5.0, haalt ze daar weg Een gedeeld geheim in het XML-bericht, onzichtbaar voor de browser
Gebruikers Meestal één inlog per klant Naam en e-mailadres van de inkoper kunnen in het startbericht staan
Winkelmand terug NEW_ITEM-velden met vaste lengtes Een PunchOutOrderMessage in XML
Order en factuur Niet in de specificatie Eigen berichten: OrderRequest, bevestiging, verzendbericht, factuur
Zoeken vanuit het inkoopsysteem Bij SAP SRM: achtergrondzoeken, en vanaf OCI 5.0 een kopie van de catalogus in JSON Level 2 PunchOut met een indexbestand

Een klant met AFAS vraagt om beide in één koppeling. Een klant met Coupa of SAP Ariba vraagt om cXML. Voor de webshop maakt het weinig uit: de inlog, de sessie per klant en de overdrachtsknop zijn dezelfde, alleen de verpakking verschilt. De vergelijking per onderdeel staat in OCI of cXML. Wil je klant geen sessie maar een bestand met je artikelen in zijn eigen systeem, lees dan PunchOut of catalogusbestand.

Jij houdt de controle

Een klant aansluiten begint met een proefsessie tegen zijn testomgeving. De winkelmand gaat naar het testadres van het inkoopsysteem, er ontstaat geen echte inkoopaanvraag en je ziet per veld wat er is verstuurd. Pas na akkoord van jou en van de beheerder bij de klant gaat de koppeling naar het echte adres.

Per klant leg je vast wat er anders moet. Vier dingen komen het vaakst voor:

  • Velden per klant. Klant A wil de artikelgroep in NEW_ITEM-MATGROUP, klant B een projectcode in een vrij veld.
  • Uitsluitingen. Artikelen die een klant niet via OCI mag bestellen, verschijnen niet in zijn sessie.
  • Overschrijvingen. Een vaste eenheidscode of een vaste omschrijving van 40 tekens voor een artikel dat anders wordt afgekapt.
  • Een log per sessie. Wie logde in, welke regels gingen naar HOOK_URL, wat is afgekapt, welke order kwam terug. Dat staat in het dashboard.

Een order die binnenkomt terwijl je ERP onbereikbaar is, blijft in de wachtrij staan en gaat door zodra het ERP weer antwoordt. Meer over die laag om de koppeling heen: dry run en goedkeuring en monitoring.

Welke inkoopsystemen vragen erom

  • AFAS Profit met InSite. OCI voor de winkelmand, cXML voor de order. De lijst van AFAS telt 68 leveranciers met een eigen definitie (geteld op 3 oktober 2026); elke andere leverancier koppelt via de algemene Profit-definitie. Wat AFAS daarvoor vraagt, staat op OCI koppeling AFAS.
  • SAP. De herkomst van OCI. De specificatie beschrijft de koppeling met SAP SRM; versie 5.0 voegt catalogusreplicatie toe.
  • Coupa en SAP Ariba. cXML PunchOut. Zie PunchOut koppeling.
  • Elari (voorheen Spend Cloud). OCI voor de winkelmand; de order komt als cXML of per e-mail. Zie OCI koppeling Spend Cloud.
  • Exact Online heeft zelf geen OCI. Een leverancier met Exact als ERP krijgt de OCI-order als verkooporder in Exact; zie OCI koppeling Exact.
  • Microsoft Dynamics, Visma, Onventis, TBlox, ProQuro, GHX en Unite. Per systeem verschilt welke velden het leest en hoe de order terugkomt.

Koopt je klant zelf via OCI in bij een groothandel, dan kent hij het al van de andere kant. Een voorbeeld daarvan staat op OCI koppeling Technische Unie. Wat er bij je klant na de winkelmand gebeurt, van goedkeuring tot factuurcontrole, staat in wat is purchase-to-pay.

Voor welke webshops

De sessie eist van elke webshop hetzelfde: een inlogadres, de prijzen van de klant en een overdracht in plaats van een kassa. De uitvoering verschilt per platform. Twee voorbeelden: een webshop op Shopify stuurt standaard de header X-Frame-Options: DENY en laadt dus in geen enkel frame, en Magento heeft daarvoor de instelling x-frame-options met de standaardwaarde SAMEORIGIN.

Van de 68 leveranciers op de lijst van AFAS zijn er 12 een technische groothandel. OCI hoort bij de bouw en installatietechniek en de groothandel: klanten met een vast inkoopproces bestellen bij de leverancier die in dat proces zit.

Vertel welk inkoopsysteem je klant gebruikt en op welk platform je webshop draait, dan hoor je wat er voor die combinatie nodig is.

Veelgestelde vragen

Is OCI hetzelfde als PunchOut?

PunchOut is de naam voor het principe: vanuit het inkoopsysteem naar de webshop van de leverancier en met de winkelmand terug. OCI is het protocol van SAP daarvoor, met formuliervelden. cXML PunchOut is de variant met XML-berichten die Coupa en SAP Ariba gebruiken. In Nederland heet het allemaal OCI koppeling. Het verschil per onderdeel staat in OCI of cXML.

Kan een OCI koppeling met Shopify, Magento, WooCommerce of een maatwerk webshop?

Ja. De webshop heeft drie dingen nodig: een inlogadres voor het inkoopsysteem, een sessie die de prijzen van die klant toont en een knop die de winkelmand naar HOOK_URL stuurt in plaats van naar de kassa. Hoe dat per platform loopt, staat op OCI koppeling webshop.

Welke velden wil mijn klant terugkrijgen?

Dat verschilt per inkoopsysteem en per klant. De specificatie van OCI 5.0 telt 34 velden; AFAS noemt er voor zijn standaarddefinitie 12. Omschrijving, aantal, eenheid, prijs en jouw artikelnummer zitten er altijd bij. Artikelgroep, levertijd, btw-percentage en vrije velden spreek je per klant af.

Is een overgedragen winkelmand al een order?

Nee. De winkelmand wordt bij je klant een inkoopaanvraag en gaat daar langs de goedkeurders. Pas na goedkeuring komt de inkooporder bij jou binnen, als cXML-bericht of als pdf per e-mail. Tot die tijd kan de klant aantallen wijzigen of de aanvraag afkeuren.

Ziet mijn klant zijn eigen prijzen en assortiment?

Ja, de sessie start als de debiteur van die klant. De webshop toont de prijslijst en het assortiment die bij die debiteur horen, en de prijs in de winkelmand is de prijs die in de inkoopaanvraag komt. Hoe die prijzen uit je ERP in de webshop komen, staat op klantspecifieke prijzen.

Kunnen gebruikers automatisch worden aangemaakt vanuit de sessie?

Bij OCI logt meestal de hele organisatie in met één gebruikersnaam. Stuurt het inkoopsysteem de naam en het e-mailadres van de inkoper mee, dan maakt de koppeling per inkoper een eigen gebruiker en een eigen winkelmand aan. AFAS kan dat met de parameters {aanvrager_naam} en {aanvrager_e-mail}; cXML PunchOut heeft er velden voor in het startbericht.

Wat is het verschil met EDI?

OCI is een sessie voor de bestelling: een inkoper zoekt en kiest in je webshop. EDI wisselt documenten uit na de bestelling: order, orderbevestiging, verzendbericht en factuur, zonder dat er iemand achter een scherm zit. Veel klanten vragen om allebei. Meer daarover op EDI koppeling.

Hoe test je een OCI koppeling?

Met een sessie vanuit de testomgeving van je klant. Een openbare testomgeving bestaat niet: de beheerder van het inkoopsysteem zet een testadres in het profiel van de leverancier en start van daaruit de sessie. AFAS heeft daarvoor de velden Test-URL en Export-Test-URL in het OCI-profiel.

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

Leveranciers, producten, orders per dag, een ruwe schatting is prima.

Of mail direct: carsten@syncmyshop.com