Naar de inhoud
SyncMyShop

Kennisbank

OCI of cXML: de twee PunchOut-protocollen naast elkaar

Het inkoopsysteem van je klant bepaalt welk protocol het wordt. OCI brengt de winkelmand als formuliervelden terug en houdt daar op. cXML brengt hem terug als XML-bericht en heeft ook berichten voor de order, de bevestiging, het verzendbericht en de factuur.

Bijgewerkt op

Het korte antwoord

Je kiest het niet zelf: het inkoopsysteem van je klant bepaalt het protocol. SAP SRM gebruikt OCI. Coupa en SAP Ariba gebruiken cXML. AFAS en Elari, voorheen Spend Cloud, gebruiken OCI voor de winkelmand en sturen de order daarna als cXML.

Het verschil zit in hoe ver elk protocol reikt. OCI is een specificatie van SAP voor de sessie en de winkelmand. De laatste versie, 5.0, dateert van 2012, en na de winkelmand houdt hij op. cXML beschrijft de sessie en ook alles wat daarna komt: inkooporder, orderbevestiging, verzendbericht en factuur. De cXML-referentie wordt bijgehouden door SAP; versie 1.2.071 is van 14 augustus 2026. Voor een leverancier betekent dat: met OCI bouw je een sessie, met cXML een sessie en een orderadres met vier soorten berichten.

OCI en cXML naast elkaar

Onderdeel OCI cXML PunchOut
Start van de sessie De browser stuurt parameters naar de webshop, standaard met POST, GET kan ook Het inkoopsysteem post een PunchOutSetupRequest naar de webshop
Inlog Gebruikersnaam en wachtwoord als parameters Identiteit in From, gedeeld geheim in Sender
Retouradres HOOK_URL, naam door de beheerder te wijzigen BrowserFormPost/URL, plus een BuyerCookie per sessie
Winkelmand terug Formuliervelden NEW_ITEM-<veld>[n] Eén formulierveld cXML-base64 met een PunchOutOrderMessage
Velden 34 velden met vaste maximale lengtes Elementen per regel, met verplichte Classification
Getallen 11 cijfers voor de punt, 3 erna Money als getal, valuta als attribuut
Eenheid ISO-code, 3 tekens UN/CEFACT-code
Tekenset Die van het inkoopsysteem, doorgegeven in http_content_charset UTF-8, zoals de referentie voorschrijft
Fouten Geen statuscodes; de inkoper ziet een fout in zijn eigen systeem Statuscodes zoals 400, 401, 406 en 500 in het antwoord
Order en verder Niet in de specificatie OrderRequest, ConfirmationRequest, ShipNoticeRequest, InvoiceDetailRequest
Zoeken vanuit het inkoopsysteem FUNCTION=BACKGROUND_SEARCH, in 5.0 catalogusreplicatie in JSON Level 2: indexbestanden met punchoutLevel store, aisle, shelf of product

De stappen van de sessie zijn bij beide gelijk: de inkoper klikt in zijn inkoopsysteem op jouw webshop, is ingelogd, vult een winkelmand en neemt hem mee terug. Bij beide is die winkelmand nog geen order. De cXML-referentie noemt hem met zoveel woorden een offerte. Het hele verloop staat op OCI en PunchOut.

Eén regel in beide formaten

Bakker Installatie B.V. bestelt 500 kabelbinders van 200 mm, artikel 30377, voor 3,75 per 100 stuks. In OCI:

<input type="hidden" name="NEW_ITEM-DESCRIPTION[3]" value="Kabelbinder 200 mm zwart">
<input type="hidden" name="NEW_ITEM-QUANTITY[3]" value="500">
<input type="hidden" name="NEW_ITEM-UNIT[3]" value="PCE">
<input type="hidden" name="NEW_ITEM-PRICE[3]" value="3.75">
<input type="hidden" name="NEW_ITEM-PRICEUNIT[3]" value="100">
<input type="hidden" name="NEW_ITEM-CURRENCY[3]" value="EUR">
<input type="hidden" name="NEW_ITEM-VENDORMAT[3]" value="30377">

In cXML, als deel van de PunchOutOrderMessage:

<ItemIn quantity="500">
  <ItemID><SupplierPartID>30377</SupplierPartID></ItemID>
  <ItemDetail>
    <UnitPrice><Money currency="EUR">3.75</Money></UnitPrice>
    <Description xml:lang="nl">Kabelbinder 200 mm zwart</Description>
    <UnitOfMeasure>EA</UnitOfMeasure>
    <PriceBasisQuantity quantity="100" conversionFactor="1">
      <UnitOfMeasure>EA</UnitOfMeasure></PriceBasisQuantity>
    <Classification domain="UNSPSC">(UNSPSC-code)</Classification>
  </ItemDetail>
</ItemIn>
Dezelfde winkelmandregel in OCI en in cXML De kabelbinderregel uit de winkelmand van Bakker Installatie: 500 stuks voor 3.75 per 100. In OCI zijn dat zeven NEW_ITEM-velden met PRICEUNIT 100. In cXML wordt het een ItemIn met PriceBasisQuantity 100, de eenheid gaat van PCE naar de UN/CEFACT-code EA en er komt een verplichte Classification bij, die in OCI optioneel is. OCI, regel 3 cXML ItemIn NEW_ITEM-VENDORMAT[3] 30377 NEW_ITEM-QUANTITY[3] 500 NEW_ITEM-UNIT[3] PCE NEW_ITEM-PRICE[3] 3.75 NEW_ITEM-CURRENCY[3] EUR NEW_ITEM-PRICEUNIT[3] 100 NEW_ITEM-DESCRIPTION[3] Kabelbinder 200 mm zwart SupplierPartID 30377 ItemIn quantity 500 UnitOfMeasure EA UN/CEFACT-code UnitPrice/Money 3.75 currency=EUR PriceBasisQuantity quantity=100 Description Kabelbinder 200 mm zwart Classification UNSPSC-code verplicht; in OCI optioneel code vertalen
Dezelfde kabelbinderregel in beide protocollen. cXML vraagt een UN/CEFACT-eenheid en een classificatie.

In beide gevallen is het regelbedrag 500 / 100 × 3,75 = 18,75. Zonder prijseenheid gaat het in OCI mis: per stuk kost de kabelbinder 0,0375, het prijsveld heeft 3 decimalen, dus wordt het 0.038 en de regel 500 × 0,038 = 19,00. In cXML doet PriceBasisQuantity hetzelfde werk als NEW_ITEM-PRICEUNIT. Of het inkoopsysteem van je klant dat element leest, test je; anders verkoop je per zak van 100.

Drie dingen veranderen onderweg. De eenheid gaat van de ISO-code PCE naar de UN/CEFACT-code EA. Er komt een Classification bij, die cXML verplicht stelt en die in OCI een optioneel veld is. En de omschrijving heeft andere grenzen: NEW_ITEM-DESCRIPTION is 40 tekens, de cXML-Description heeft geen vaste lengte, maar het optionele ShortName erin is maximaal 50 tekens, met 30 als aanbeveling.

Waar OCI stopt

  • Bij de winkelmand. Er is geen order, geen bevestiging en geen factuur in de specificatie. Elk inkoopsysteem kiest zelf hoe de order komt: AFAS en Elari met cXML, andere met een pdf per e-mail.
  • Bij btw. De specificatie heeft geen btw-veld. AFAS leest het percentage uit NEW_ITEM-CUST_FIELD1, Elari uit NEW_ITEM-VATPERCENTAGE. Per klant leg je vast welk veld het wordt.
  • Bij de inlog. Gebruikersnaam en wachtwoord gaan via de browser van de inkoper. Bij GET staan ze in de URL en daarmee in de toegangslog van de webshop.
  • Bij fouten. Een winkelmand die het inkoopsysteem afwijst, geeft geen statuscode aan de webshop. Bij AFAS houdt één regel die niet klopt de hele overdracht tegen, en dat ziet alleen de inkoper.
  • Bij de tekenset. Het inkoopsysteem geeft bijvoorbeeld iso-8859-1 op. Een webshop die UTF-8 terugstuurt, levert "geïsoleerd" af als "geïsoleerd". Zie tekencodering en UTF-8.

Waar cXML stopt

  • Bij de eisen per regel. Elke ItemIn moet SupplierPartID, UnitPrice, Description, UnitOfMeasure en Classification hebben. Een webshop zonder UNSPSC-codes of met eenheden als "stuk" moet die eerst vertalen; zie eenheden en verpakkingen.
  • Bij het netwerk. Via SAP Business Network zet het netwerk zichzelf in Sender. Een webshop die de klant zoekt op Sender en niet op From, antwoordt dan 401.
  • Bij de pogingen. Op een 5xx beveelt de referentie 10 nieuwe pogingen aan, een keer per uur. Een orderadres dat langer dan 10 uur onbereikbaar is, mist de order. Een herhaling heeft dezelfde payloadID; wie daar niet op controleert, maakt de order twee keer aan.
  • Bij de catalogus. Een cXML-catalogus uploaden mag tot 4 MB; groter geeft status 468.

Wat elk vraagt in onderhoud

Wat verandert OCI cXML
Per klant Parameternamen, de velden die het systeem leest, het btw-veld, de orderroute Identiteiten, gedeeld geheim, Extrinsic-velden zoals kostenplaats
Per versie 4.0 en 5.0; OCI_VERSION is volgens SAP informatief Elke versie heeft een eigen DTD; het bericht noemt hem in de DOCTYPE
Bij de leverancier Korte omschrijvingen van 40 tekens, ISO-eenheden, prijseenheden UN/CEFACT-eenheden, UNSPSC-codes, een orderadres dat altijd bereikbaar is

AFAS en Elari zijn een voorbeeld van het onderhoud bij OCI. AFAS noemt voor zijn standaarddefinitie 12 velden en leest van NEW_ITEM-VENDORMAT 30 tekens; Elari leest er standaard 8 en vraagt btw in een veld dat SAP niet kent. Dezelfde webshop stuurt voor twee klanten dus twee verschillende winkelmanden.

Wat betekent dit voor je koppeling?

Voor je webshop is het verschil kleiner dan het lijkt: de inlog, de sessie met de prijzen van de klant en de knop die de winkelmand terugstuurt, zijn voor beide protocollen gelijk. Het werk zit in de velden per klant en, bij cXML, in het orderadres en de berichten die daarna komen.

Wij bouwen beide op je bestaande webshop en zetten de order die volgt in je ERP. Het hele verloop staat op OCI en PunchOut, de cXML-berichten één voor één op PunchOut koppeling. Vertel welk inkoopsysteem je klant gebruikt.

Veelgestelde vragen

Kan één webshop zowel OCI als cXML aan?

Ja. De inlog, de sessie met de prijzen van de klant en de overdrachtsknop zijn voor beide gelijk. Alleen het binnenkomende startbericht en het formaat van de winkelmand verschillen. De koppeling herkent per klant welk protocol hij gebruikt en bouwt het juiste formulier.

Welk protocol is veiliger?

Bij OCI gaan gebruikersnaam en wachtwoord via de browser van de inkoper, en bij GET staan ze in de URL. Secure OCI, beschreven in de specificatie van 5.0, haalt ze daar weg. Bij cXML staat het gedeelde geheim in een bericht van server naar server; de winkelmand die via de browser gaat, bevat het geheim niet.

Gebruikt AFAS OCI of cXML?

Allebei. De winkelmand komt via OCI terug in InSite, en na goedkeuring in Profit stuurt AFAS de order als cXML naar de leverancier. Elari, voorheen Spend Cloud, werkt op dezelfde manier. Wat AFAS per onderdeel vraagt, staat op OCI koppeling AFAS.

Is cXML hetzelfde als EDI?

Nee, al dekken ze deels dezelfde documenten. cXML gebruikt XML-berichten over HTTPS en heeft ook de PunchOut-sessie. EDI wisselt orders, bevestigingen, verzendberichten en facturen uit in eigen formaten, zonder sessie. Meer daarover op EDI koppeling.

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