LICITACIÓN¿Ha ganado una licitación que exige PunchOut?Descargar el Tender Kit

Guía · Protocolos

cXML frente a OCI: cómo funcionan los dos protocolos PunchOut

En pocas palabras

cXML y OCI son los dos protocolos detrás de todo catálogo PunchOut. cXML (utilizado por SAP Ariba, Coupa, Jaggaer, Ivalua y Oracle) intercambia documentos XML mediante HTTPS y también transmite el pedido de compra. OCI (utilizado por SAP S/4HANA, SRM y ECC) devuelve el carrito como campos de formulario HTML enviados al HOOK_URL del cliente. El sistema de su cliente determina cuál necesita.

cXML y OCI en paralelo

Comparativa cXML y OCI
cXMLOCI
Nombre completoCommerce eXtensible Markup LanguageOpen Catalog Interface
Mantenido porcXML.org (originalmente Ariba)SAP
Utilizado porSAP Ariba, Coupa, Jaggaer, Ivalua, Oracle, Workday…SAP S/4HANA, SAP SRM, SAP ECC y algunos marketplaces
FormatoDocumentos XML mediante HTTPSCampos de formulario HTML (NEW_ITEM-*)
Inicio de sesiónPunchOutSetupRequest → PunchOutSetupResponseLlamada HTTP con parámetros de acceso y HOOK_URL
Devolución del carritoPunchOutOrderMessagePOST de formulario al HOOK_URL
Pedido de compraOrderRequest (mismo protocolo)Un canal aparte acordado con el cliente, por ejemplo email o su portal de proveedores
ClasificaciónClassification domain="UNSPSC"NEW_ITEM-MATGROUP
AutenticaciónIdentidades + shared secretUsuario 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.

  1. 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.

  2. Respuesta de configuración

    Su sistema responde con una URL StartPage; el navegador del cliente abre su tienda.

  3. Compra

    El cliente ve los precios de contrato y llena el carrito.

  4. Devolución del carrito

    Un PunchOutOrderMessage devuelve el carrito a la URL de devolución para su aprobación.

  5. 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.

  1. Llamada

    SAP abre la URL de su catálogo con parámetros de acceso y el HOOK_URL.

  2. Compra

    El cliente compra con sus precios de contrato.

  3. Devolución del carrito

    Su tienda envía el carrito como campos NEW_ITEM-* al HOOK_URL.

  4. 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=_top

Ejemplo · 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?

Protocolo por sistema del cliente
Sistema del clienteProtocoloGuía
SAP AribacXMLSAP Ariba PunchOut
CoupacXMLCoupa PunchOut
SAP S/4HANA, SRM, ECCOCISAP OCI PunchOut
JaggaercXMLJaggaer PunchOut
Ivalua, Oracle, WorkdaycXMLTodos los sistemas
Meplato, SimenoOCI (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.

FAQ

Preguntas

¿Cuál es la diferencia entre cXML y OCI?

cXML envía documentos XML mediante HTTPS y también cubre el pedido de compra (OrderRequest). OCI es el protocolo de SAP: el carrito vuelve como campos de formulario HTML enviados a un HOOK_URL, y el pedido llega al proveedor por un canal independiente.

¿Qué protocolo utiliza SAP Ariba?

cXML. SAP S/4HANA, SRM y ECC utilizan OCI; Coupa, Jaggaer, Ivalua y Oracle utilizan cXML.

¿Puede una tienda admitir tanto cXML como OCI?

Sí. Con PunchOut Rocket, la misma tienda WooCommerce, Magento, PrestaShop o nopCommerce responde a sesiones cXML y OCI; el gateway gestiona el protocolo de cada cliente.

¿Qué es una integración de catálogo PunchOut cXML?

La conexión que permite al cliente abrir su tienda desde su sistema de compras mediante cXML, llenar un carrito y devolverlo con un PunchOutOrderMessage. El pedido aprobado llega después como OrderRequest.

¿Es OCI más antiguo que cXML?

Ambos datan de finales de los años noventa y siguen vigentes. El sistema del cliente determina cuál necesita, no el proveedor.

Seguir leyendo

Guías relacionadas

Prueba gratuita de 30 días · sin tarjeta de crédito

Su cliente está esperando. Pongámoslo en marcha.

Instale el plugin hoy y ejecute su primera sesión de prueba esta tarde. Si su plazo es ajustado, díganoslo y atenderemos su solicitud con prioridad.