cXML et OCI côte à côte
| cXML | OCI | |
|---|---|---|
| Nom complet | Commerce eXtensible Markup Language | Open Catalog Interface |
| Maintenu par | cXML.org (à l’origine Ariba) | SAP |
| Utilisé par | SAP Ariba, Coupa, Jaggaer, Ivalua, Oracle, Workday… | SAP S/4HANA, SAP SRM, SAP ECC, certaines places de marché |
| Format | Documents XML via HTTPS | Champs de formulaire HTML (NEW_ITEM-*) |
| Démarrage de session | PunchOutSetupRequest → PunchOutSetupResponse | Appel HTTP avec paramètres de connexion et HOOK_URL |
| Retour du panier | PunchOutOrderMessage | POST de formulaire vers le HOOK_URL |
| Bon de commande | OrderRequest (même protocole) | Un canal séparé convenu avec le client, par exemple l’email ou son portail fournisseurs |
| Classification | Classification domain="UNSPSC" | NEW_ITEM-MATGROUP |
| Authentification | Identités + shared secret | Utilisateur et mot de passe ou jeton dans l’appel |
PunchOut cXML : fonctionnement d’une session
En cXML, chaque étape est un document XML envoyé via HTTPS. Le système du client et le vôtre s’identifient mutuellement avec des identifiants dans l’en-tête (Network ID pour SAP Ariba) et un shared secret.
Demande de configuration
Le client clique sur votre catalogue ; son système envoie un PunchOutSetupRequest avec des identifiants, un BuyerCookie et une URL de retour.
Réponse de configuration
Votre système répond avec une URL StartPage ; le navigateur du client ouvre votre boutique.
Achat
Le client voit les prix contractuels et remplit le panier.
Retour du panier
Un PunchOutOrderMessage renvoie le panier à l’URL de retour pour approbation.
Commande
Après approbation, le bon de commande arrive sous forme d’OrderRequest.
Exemple · PunchOutSetupRequest (abrégé)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.069/cXML.dtd">
<cXML payloadID="1729332000.4711@buyer.example.com" timestamp="2026-10-19T10:00:00+02:00">
<Header>
<From><Credential domain="NetworkID"><Identity>AN01000000001</Identity></Credential></From>
<To><Credential domain="NetworkID"><Identity>AN01000000002</Identity></Credential></To>
<Sender>
<Credential domain="NetworkID">
<Identity>AN01000000001</Identity>
<SharedSecret>••••••••</SharedSecret>
</Credential>
<UserAgent>Buyer procurement system</UserAgent>
</Sender>
</Header>
<Request>
<PunchOutSetupRequest operation="create">
<BuyerCookie>8f2c41d0a9</BuyerCookie>
<BrowserFormPost><URL>https://buyer.example.com/punchout/return</URL></BrowserFormPost>
<SupplierSetup><URL>https://gateway.example.com/setup</URL></SupplierSetup>
</PunchOutSetupRequest>
</Request>
</cXML>Exemple · PunchOutSetupResponse
<cXML payloadID="1729332001.88@gateway.example.com" timestamp="2026-10-19T10:00:01+02:00">
<Response>
<Status code="200" text="OK"/>
<PunchOutSetupResponse>
<StartPage><URL>https://gateway.example.com/session/7f3a…</URL></StartPage>
</PunchOutSetupResponse>
</Response>
</cXML>Exemple · PunchOutOrderMessage
<cXML payloadID="1729332555.12@gateway.example.com" timestamp="2026-10-19T10:09:15+02:00">
<Header>…</Header>
<Message>
<PunchOutOrderMessage>
<BuyerCookie>8f2c41d0a9</BuyerCookie>
<PunchOutOrderMessageHeader operationAllowed="edit">
<Total><Money currency="EUR">96.00</Money></Total>
</PunchOutOrderMessageHeader>
<ItemIn quantity="20">
<ItemID><SupplierPartID>GLV-09</SupplierPartID></ItemID>
<ItemDetail>
<UnitPrice><Money currency="EUR">4.80</Money></UnitPrice>
<Description xml:lang="en">Safety gloves, size 9</Description>
<UnitOfMeasure>PR</UnitOfMeasure>
<Classification domain="UNSPSC">46181504</Classification>
</ItemDetail>
</ItemIn>
</PunchOutOrderMessage>
</Message>
</cXML>PunchOut OCI : fonctionnement d’une session
OCI est plus simple et de conception plus ancienne : il n’utilise pas XML. SAP ouvre l’URL de votre catalogue avec les paramètres de connexion et un HOOK_URL ; à la fin, votre boutique envoie le panier à cette adresse sous forme de champs de formulaire HTML.
Appel
SAP ouvre l’URL de votre catalogue avec les paramètres de connexion et le HOOK_URL.
Achat
Le client achète à ses prix contractuels.
Retour du panier
Votre boutique envoie le panier sous forme de champs NEW_ITEM-* au HOOK_URL.
Commande
OCI ne transporte pas le bon de commande : il vous parvient par un canal convenu avec le client, par exemple par email ou via son portail fournisseurs.
Exemple · Appel OCI avec HOOK_URL
https://shop.example.com/oci?USERNAME=acme&PASSWORD=••••
&HOOK_URL=https%3A%2F%2Fsap.buyer.example.com%2Fsap%2Fbc%2Fsrm%2Foci_return
&OCI_VERSION=4.0&returntarget=_topExemple · Retour du panier OCI vers le HOOK_URL
<form method="post" action="{HOOK_URL}">
<input type="hidden" name="NEW_ITEM-DESCRIPTION[1]" value="Safety gloves, size 9">
<input type="hidden" name="NEW_ITEM-QUANTITY[1]" value="20">
<input type="hidden" name="NEW_ITEM-UNIT[1]" value="PR">
<input type="hidden" name="NEW_ITEM-PRICE[1]" value="4.80">
<input type="hidden" name="NEW_ITEM-CURRENCY[1]" value="EUR">
<input type="hidden" name="NEW_ITEM-MATGROUP[1]" value="46181504">
<input type="hidden" name="NEW_ITEM-VENDORMAT[1]" value="GLV-09">
</form>Les noms de champs sont indexés par ligne ([1], [2]…). La documentation du client indique les champs obligatoires, par exemple une référence article fournisseur, un délai de livraison ou un texte long.
Lequel votre client utilise-t-il ?
| Système du client | Protocole | Guide |
|---|---|---|
| SAP Ariba | cXML | SAP Ariba PunchOut |
| Coupa | cXML | Coupa PunchOut |
| SAP S/4HANA, SRM, ECC | OCI | SAP OCI PunchOut |
| Jaggaer | cXML | Jaggaer PunchOut |
| Ivalua, Oracle, Workday | cXML | Tous les systèmes |
| Meplato, Simeno | OCI (et cXML) | Tous les systèmes |
En cas de doute, la documentation fournisseur du client le précise dans les premières pages. Certains clients SAP utilisent SAP Ariba pour les dépenses indirectes et des catalogues OCI dans S/4HANA pour les matières directes : vous pouvez avoir besoin des deux.
Intégration d’un catalogue PunchOut cXML : ce qui change dans votre boutique
Quel que soit le protocole, une boutique a besoin des cinq mêmes éléments pour fonctionner comme catalogue PunchOut :
- Un catalogue et des prix propres à chaque client
- Un code de classification sur chaque produit (UNSPSC ou ECLASS)
- L’ouverture dans la frame du client : en-têtes, cookies et paramètres de sécurité
- Des unités de mesure associées aux codes du client
- Import des commandes avec cXML OrderRequest (forfait Premium)
Prendre en charge les deux sur une boutique
De nombreux fournisseurs ont finalement des clients utilisant les deux protocoles. Développer deux intégrations double le travail ; une passerelle qui gère les deux permet à une boutique de servir chaque client. Avec PunchOut Rocket, vous configurez chaque client une seule fois dans le tableau de bord, choisissez cXML ou OCI et le plugin de votre boutique reste le même.
PunchOut sur votre boutique existante
PunchOut Rocket connecte WooCommerce, Magento, PrestaShop et nopCommerce à SAP Ariba, Coupa et SAP via cXML ou OCI. À partir de 163 €/mois par site, essai gratuit de 30 jours.