cXML y OCI en paralelo
| cXML | OCI | |
|---|---|---|
| Nombre completo | Commerce eXtensible Markup Language | Open Catalog Interface |
| Mantenido por | cXML.org (originalmente Ariba) | SAP |
| Utilizado por | SAP Ariba, Coupa, Jaggaer, Ivalua, Oracle, Workday… | SAP S/4HANA, SAP SRM, SAP ECC y algunos marketplaces |
| Formato | Documentos XML mediante HTTPS | Campos de formulario HTML (NEW_ITEM-*) |
| Inicio de sesión | PunchOutSetupRequest → PunchOutSetupResponse | Llamada HTTP con parámetros de acceso y HOOK_URL |
| Devolución del carrito | PunchOutOrderMessage | POST de formulario al HOOK_URL |
| Pedido de compra | OrderRequest (mismo protocolo) | Un canal aparte acordado con el cliente, por ejemplo email o su portal de proveedores |
| Clasificación | Classification domain="UNSPSC" | NEW_ITEM-MATGROUP |
| Autenticación | Identidades + shared secret | Usuario y contraseña o token en la llamada |
PunchOut cXML: cómo funciona una sesión
En cXML, cada paso es un documento XML enviado mediante HTTPS. El sistema del cliente y el suyo se identifican mutuamente con credenciales en la cabecera (Network ID en SAP Ariba) y un shared secret.
Solicitud de configuración
El cliente hace clic en su catálogo; su sistema envía un PunchOutSetupRequest con credenciales, un BuyerCookie y una URL de devolución.
Respuesta de configuración
Su sistema responde con una URL StartPage; el navegador del cliente abre su tienda.
Compra
El cliente ve los precios de contrato y llena el carrito.
Devolución del carrito
Un PunchOutOrderMessage devuelve el carrito a la URL de devolución para su aprobación.
Pedido
Tras la aprobación, el pedido de compra llega como OrderRequest.
Ejemplo · PunchOutSetupRequest (abreviado)
<?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>Ejemplo · 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>Ejemplo · 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: cómo funciona una sesión
OCI es más sencillo y tiene un estilo más antiguo: no utiliza XML. SAP abre la URL de su catálogo con parámetros de acceso y un HOOK_URL; al final, su tienda envía el carrito a esa dirección como campos de formulario HTML.
Llamada
SAP abre la URL de su catálogo con parámetros de acceso y el HOOK_URL.
Compra
El cliente compra con sus precios de contrato.
Devolución del carrito
Su tienda envía el carrito como campos NEW_ITEM-* al HOOK_URL.
Pedido
OCI no transporta el pedido de compra: le llega por un canal acordado con el cliente, por ejemplo email o su portal de proveedores.
Ejemplo · Llamada OCI con 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=_topEjemplo · Devolución del carrito OCI al 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>Los nombres de campo están indexados por línea ([1], [2]…). La documentación del cliente indica qué campos son obligatorios, por ejemplo un código de material del proveedor, un plazo de entrega o un texto largo.
¿Cuál utiliza su cliente?
| Sistema del cliente | Protocolo | Guía |
|---|---|---|
| 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 | Todos los sistemas |
| Meplato, Simeno | OCI (y cXML) | Todos los sistemas |
Si tiene dudas, la documentación para proveedores del cliente lo indica en las primeras páginas. Algunos clientes SAP utilizan SAP Ariba para gastos indirectos y catálogos OCI en S/4HANA para materiales directos: podría necesitar ambos.
Integración de catálogo PunchOut cXML: qué cambia en su tienda
Sea cual sea el protocolo, una tienda necesita los mismos cinco elementos para funcionar como catálogo PunchOut:
- Un catálogo y precios específicos por cliente
- Un código de clasificación en cada producto (UNSPSC o ECLASS)
- Apertura dentro del marco del cliente: cabeceras de marcos, cookies y ajustes de seguridad
- Unidades de medida asociadas a los códigos del cliente
- Importación de pedidos con cXML OrderRequest (plan Premium)
Admitir ambos en una sola tienda
Muchos proveedores acaban teniendo clientes en ambos protocolos. Crear dos integraciones duplica el trabajo; un gateway que admita ambos permite que una tienda atienda a todos los clientes. Con PunchOut Rocket configura cada cliente una vez en el panel, elige cXML u OCI y el plugin de su tienda sigue siendo el mismo.
PunchOut en la tienda que ya tiene
PunchOut Rocket conecta WooCommerce, Magento, PrestaShop y nopCommerce con SAP Ariba, Coupa y SAP mediante cXML u OCI. Desde 163 €/mes por sitio, prueba gratuita de 30 días.