Naar de inhoud
SyncMyShop

OCI en PunchOut

PunchOut koppeling: je klant bestelt in jouw webshop en de order komt als cXML terug

Een PunchOut koppeling opent jouw webshop vanuit het inkoopsysteem van je klant en stuurt de winkelmand terug als inkoopaanvraag. Met cXML gaan daarna ook de inkooporder, de orderbevestiging, het verzendbericht en de factuur als berichten tussen jullie systemen.

Bijgewerkt op

Wat is een PunchOut koppeling?

Een PunchOut koppeling verbindt het inkoopsysteem van je klant met jouw webshop, in twee richtingen. Het inkoopsysteem opent een sessie in je webshop, de inkoper vult daar een winkelmand, en die winkelmand gaat terug naar zijn eigen systeem als inkoopaanvraag. Na goedkeuring stuurt het inkoopsysteem de inkooporder naar jou.

Er zijn twee protocollen. OCI is het protocol van SAP: de inlog en de winkelmand gaan als formuliervelden via de browser, en na de winkelmand houdt de specificatie op. cXML PunchOut gebruikt XML-berichten van server naar server en heeft ook berichten voor de order, de orderbevestiging, het verzendbericht en de factuur. Deze pagina gaat over cXML. OCI staat uitgewerkt op OCI en PunchOut en in wat is een OCI koppeling.

cXML wordt gepubliceerd op cxml.org. De huidige cXML-referentie is versie 1.2.071 van 14 augustus 2026, uitgegeven door SAP. De berichtnamen, attributen en statuscodes op deze pagina komen daaruit, gecontroleerd op 3 oktober 2026.

Zo verloopt een PunchOut-sessie met cXML

Een inkoper van Bakker Installatie B.V. bestelt drie artikelen vanuit Coupa:

  1. Hij klikt in Coupa op de tegel van jouw webshop.
  2. Coupa stuurt een PunchOutSetupRequest naar het PunchOut-adres van je webshop, met de identiteit van de klant, een gedeeld geheim, een BuyerCookie en het retouradres in BrowserFormPost.
  3. De koppeling controleert het geheim, zoekt de klant en antwoordt met Status 200 en een start-URL in StartPage.
  4. Coupa stuurt de browser van de inkoper naar die URL. Hij is ingelogd en ziet zijn eigen assortiment en contractprijzen.
  5. In plaats van afrekenen klikt hij op overnemen. De webshop stuurt een PunchOutOrderMessage via zijn browser naar het retouradres.
  6. Coupa maakt er een aanvraag van, die langs budget en goedkeurders gaat.
  7. Na goedkeuring post Coupa een OrderRequest met inkoopordernummer 4500001234 naar je orderadres.
  8. Jij stuurt de orderbevestiging, het verzendbericht en de factuur terug.
Een cXML PunchOut-sessie en de order die erop volgt Het inkoopsysteem van Bakker Installatie B.V. stuurt een PunchOutSetupRequest naar de koppeling en krijgt een start-URL terug. De browser van de inkoper opent de webshop en stuurt later de winkelmand van 3 regels, totaal 521.71 exclusief btw, als PunchOutOrderMessage terug. Na goedkeuring komt OrderRequest 4500001234 binnen, gevolgd door bevestiging, verzendbericht en factuur van de leverancier. Inkoopsysteem Coupa of SAP Ariba Browser van de inkoper Koppeling en je webshop PunchOutSetupRequest, BuyerCookie Status 200, StartPage/URL stuurt door naar de start-URL opent de webshop, al ingelogd De inkoper vult de winkelmand: 3 regels, Total 521.71 EUR exclusief btw. formulier met veld cXML-base64 PunchOutOrderMessage, zelfde BuyerCookie goedkeuring bij de klant OrderRequest orderID 4500001234 Status 200 ConfirmationRequest, ShipNoticeRequest InvoiceDetailRequest Alleen de winkelmand gaat via de browser. De andere berichten gaan van server naar server en krijgen een antwoord met een Status.
Een PunchOut-sessie met cXML. Alleen de winkelmand reist via de browser van de inkoper.
# Bericht Van Naar Transport
1 PunchOutSetupRequest inkoopsysteem koppeling HTTPS POST
2 PunchOutSetupResponse koppeling inkoopsysteem antwoord op 1
3 PunchOutOrderMessage webshop inkoopsysteem formulier via de browser
4 OrderRequest inkoopsysteem koppeling HTTPS POST
5 ConfirmationRequest koppeling inkoopsysteem HTTPS POST
6 ShipNoticeRequest koppeling inkoopsysteem HTTPS POST
7 InvoiceDetailRequest koppeling inkoopsysteem HTTPS POST

Bij SAP Ariba lopen berichten 1, 2 en 4 via SAP Business Network. Het netwerk controleert de klant, zet zichzelf in het Sender-veld en voegt het gedeelde geheim van de leverancier toe. Coupa stuurt de setup request rechtstreeks naar je webshop.

Wat je webshop moet leveren

Voor de sessie zijn het drie dingen: een adres dat de setup request aanneemt, een start-URL die de inkoper zonder inlogscherm binnenlaat, en een overdracht die de winkelmand als cXML terugstuurt. Per onderdeel:

Onderdeel Wat de referentie vraagt Wat de koppeling doet
BuyerCookie Het enige verplichte element van de setup request, nieuw per sessie Bewaren en ongewijzigd terugsturen in de winkelmand
StartPage/URL Uniek, tijdelijk, verwijst naar de sessie maar bevat hem niet Een korte sleutel die na een paar minuten vervalt
Formulierveld cXML-urlencoded of cXML-base64; base64 heeft de voorkeur Het hele bericht in één verborgen veld
ItemIn Per regel quantity, SupplierPartID, UnitPrice, Description, UnitOfMeasure, Classification Ontbrekende velden aanvullen uit het ERP
UnitOfMeasure Een code uit de UN/CEFACT-lijst "stuk" vertalen naar EA

Eén regel uit de winkelmand van Bakker Installatie, de kabelbinders die per zak van 100 worden verkocht:

<ItemIn quantity="5">
  <ItemID><SupplierPartID>30377</SupplierPartID></ItemID>
  <ItemDetail>
    <UnitPrice><Money currency="EUR">3.75</Money></UnitPrice>
    <Description xml:lang="nl">Kabelbinder 200 mm, zak 100 st</Description>
    <UnitOfMeasure>PK</UnitOfMeasure>
    <Classification domain="UNSPSC">(UNSPSC-code)</Classification>
  </ItemDetail>
</ItemIn>

De drie regels samen: 12 × 17,08 = 204,96 voor de wandcontactdozen, 2 × 149,00 = 298,00 voor de groepenkasten en 5 × 3,75 = 18,75 voor de kabelbinders. Het Total in de kop van het bericht is 204,96 + 298,00 + 18,75 = 521,71. Volgens de referentie staan btw en verzendkosten daar niet in. Bij OCI moet dezelfde kabelbinder met een prijseenheid van 100 worden doorgegeven, omdat het prijsveld maar 3 decimalen heeft. In cXML verkoop je hem per zak, of je gebruikt het element PriceBasisQuantity.

Daarna komt de order. Het OrderRequest heeft in de kop orderID, orderDate, type (new, update of delete) en de verplichte elementen Total en BillTo. Het antwoord is een Status. Een 200 zegt dat het bericht is ontvangen en gelezen, niet welke regels je kunt leveren. Dat zeg je met een ConfirmationRequest, met een van de acht typen uit de referentie: accept, allDetail, detail, backordered, except, reject, requestToPay en replace.

Waar het misgaat

Een PunchOut koppeling faalt meestal zonder melding aan jouw kant. De inkoper ziet een foutscherm in zijn eigen systeem, of de order komt nooit aan. Dit zijn de oorzaken die terugkomen:

Wat er gebeurt Oorzaak Wat de koppeling doet
Setup request krijgt 401 De klant wordt gezocht op de identiteit in Sender. Via SAP Business Network staat daar het netwerk Geheim in Sender controleren, klant zoeken op From
Winkelmand afgewezen Eenheid als "stuk" of "each" in plaats van een UN/CEFACT-code Eenheden per artikel vertalen naar EA, PK of een andere code
Winkelmand komt niet bij de juiste aanvraag BuyerCookie niet of gewijzigd teruggestuurd De cookie bij de sessie bewaren en letterlijk terugzetten
Order dubbel in het ERP Het antwoord op het OrderRequest ging verloren en het bericht kwam opnieuw Op payloadID en orderID controleren; een herhaling krijgt 200 en maakt niets aan
Order komt niet aan Webshop langer onbereikbaar dan de pogingen van het inkoopsysteem Order aannemen in een wachtrij, los van de webshop
Lege winkelmand terug Een PunchOutOrderMessage zonder ItemIn betekent annuleren De annuleerknop bewust zo laten werken, niet per ongeluk

De pogingen zijn in de referentie vastgelegd. Op een 4xx-status probeert het inkoopsysteem het niet opnieuw. Op een 5xx-status of een antwoord dat geen geldige cXML is, beveelt de referentie 10 nieuwe pogingen aan, een keer per uur, met minimaal een venster van zes uur. Komt de order om 02:10 en is je server tot 05:30 offline, dan levert de poging van 06:10 hem af, vier uur later. Duurt de storing langer dan 10 × 1 uur = 10 uur, dan blijft de order bij een systeem dat de aanbeveling volgt liggen tot iemand hem opnieuw verstuurt.

OCI of cXML

OCI cXML PunchOut
Start van de sessie Parameters via de browser, met gebruikersnaam en wachtwoord PunchOutSetupRequest van server naar server, met gedeeld geheim
Winkelmand terug NEW_ITEM-velden met vaste lengtes, bijvoorbeeld 40 tekens omschrijving Een PunchOutOrderMessage in één formulierveld
Eenheid ISO-code van 3 tekens UN/CEFACT-code
Order, bevestiging, factuur Niet in de specificatie OrderRequest, ConfirmationRequest, ShipNoticeRequest, InvoiceDetailRequest

AFAS en Elari combineren de twee: OCI voor de winkelmand, cXML voor de order. De vergelijking per onderdeel staat in OCI of cXML.

Welke inkoopsystemen erom vragen

  • Coupa. cXML PunchOut, met de setup request rechtstreeks naar je webshop.
  • SAP Ariba. cXML via SAP Business Network, ook voor order, bevestiging, verzendbericht en factuur.
  • AFAS Profit met InSite. OCI voor de winkelmand, een cXML-order na goedkeuring. Zie OCI koppeling AFAS.
  • Elari, voorheen Spend Cloud. OCI voor de winkelmand; de order komt als cXML via HTTPS of SFTP, of als pdf per e-mail. Zie OCI koppeling Spend Cloud.
  • SAP SRM. OCI, het protocol waar het mee begon.

Voor de webshop zelf verschilt het per platform hoe de sessie en de overdracht worden gebouwd. Shopify, Magento en WooCommerce staan op OCI koppeling webshop. Wil je klant na de order ook documenten zonder sessie uitwisselen, dan is dat EDI.

Wat wij bouwen

Wij bouwen het PunchOut-adres, de sessie op je bestaande webshop, de overdracht van de winkelmand en de ontvangst van de order, en zetten die order in je ERP. Daarna hosten en bewaken we de koppeling: een 401 op een setup request, een winkelmand zonder order en een order die opnieuw is verstuurd staan in het log van het dashboard.

Elk bericht dat binnenkomt, staat eerst in een wachtrij. Een OrderRequest krijgt dus antwoord, ook als je ERP even niet bereikbaar is. Het hele verloop met prijzen en assortiment per klant staat op OCI en PunchOut. Vertel welk inkoopsysteem je klant gebruikt.

Veelgestelde vragen

Is PunchOut hetzelfde als een OCI koppeling?

PunchOut is het principe: vanuit het inkoopsysteem naar de webshop van de leverancier en met de winkelmand terug. OCI en cXML zijn twee protocollen daarvoor. In Nederland heet het vaak allemaal OCI koppeling, ook als er cXML onder zit. De verschillen per onderdeel staan in OCI of cXML.

Welk protocol moet mijn webshop ondersteunen?

Dat bepaalt het inkoopsysteem van je klant. Coupa en SAP Ariba vragen om cXML. SAP SRM vraagt om OCI. AFAS en Elari, de nieuwe naam van Spend Cloud, gebruiken OCI voor de winkelmand en sturen de order daarna als cXML. Vraag de beheerder bij je klant om een voorbeeldbericht: daaraan zie je het protocol en de velden.

Is de winkelmand die terugkomt al een order?

Nee. De cXML-referentie noemt de winkelmand uit een PunchOut-sessie een offerte. De order bestaat pas als het OrderRequest binnenkomt, na goedkeuring bij je klant. Tot dat moment kan de klant regels wijzigen of de aanvraag afkeuren.

Wat gebeurt er als mijn server plat ligt als de order komt?

Een inkoopsysteem dat de aanbeveling uit de cXML-referentie volgt, probeert het bij een 5xx-antwoord of geen antwoord opnieuw: 10 keer, een keer per uur. Wie langer dan die 10 uur onbereikbaar is, mist de order tot iemand bij de klant hem opnieuw verstuurt. Een koppeling met een eigen wachtrij neemt de order aan en verwerkt hem als je webshop of ERP weer bereikbaar is.

Moet ik ook orderbevestigingen en facturen in cXML sturen?

Dat spreek je per klant af. De referentie kent er eigen berichten voor: ConfirmationRequest, ShipNoticeRequest en InvoiceDetailRequest. Een klant die facturen automatisch matcht met order en levering, heeft die berichten nodig. Zonder die berichten komt je factuur als pdf binnen en typt iemand bij de klant hem over.

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