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

Comercio electrónico a medida · desarrolladores

Especificaciones de integración PunchOut para tiendas a medida

Qué debe implementar su tienda a medida o headless para funcionar con el gateway PunchOut Rocket con las mismas funciones que nuestros plugins: sesiones PunchOut con acceso automático, devolución del carrito, asignación de categorías y, con el plan Premium, pedidos de compra, confirmaciones de pedido y avisos de envío. El gateway gestiona cXML y OCI con el cliente.

  • Las mismas funciones que los plugins
  • JSON mediante HTTPS
  • cXML y OCI gestionados por el gateway

Qué implementa su tienda

Cada función es un pequeño endpoint JSON o un formulario del navegador en su tienda. Implemente primero los obligatorios; los pedidos de compra y sus actualizaciones pueden añadirse después.

Funciones, implementación en su tienda y plan necesario
SecciónFunciónQué implementa su tiendaObligatorioPlan
2–3Sesión PunchOut (create, edit, inspect) con acceso automáticoEndpoint de clonación y acceso SSOSíTodas las licencias
4Transferencia del carrito al sistema de comprasFormulario de envío automático a PunchOut RocketSíTodas las licencias
5Asignación de categorías, por ejemplo UNSPSCEndpoint de categoríasRecomendadoTodas las licencias
6Pedidos de compra (cXML OrderRequest)Endpoint de creación de pedidosOpcionalPlan Premium
7Confirmaciones de pedido y avisos de envío (cXML ConfirmationRequest, ShipNoticeRequest)Endpoint de estado de pedidosOpcional, requiere 6Plan Premium + opción OC & ASN
8Actualizaciones inmediatas de pedidosNotificación a PunchOut RocketOpcional, requiere 7Plan Premium + opción OC & ASN
–Carritos predefinidosNada: PunchOut Rocket los muestra al cliente y envía por sí mismo el carrito elegido al sistema de compras–Plan Premium

La prueba gratuita incluye las funciones del plan Premium. Las confirmaciones de pedido y los avisos de envío son una opción del plan Premium (OC & ASN): contacte con nosotros para activarla.

1. Configuración en PunchOut Rocket

Sitio de comercio electrónico

Campos del sitio para una plataforma a medida
CampoValor
E-commerce PlatformCustom
Site URLURL base de su tienda, por ejemplo https://your-store.example.com. Puede incluir una ruta (https://example.com/shop); se elimina el / final
API KeyUn secreto de al menos 10 caracteres. PunchOut Rocket lo envía en cada llamada a su tienda: esta debe conocer el mismo valor
Custom Clone EndpointRuta del endpoint de clonación. Vacío: /api/punchout/clone
Custom Categories EndpointRuta del endpoint de categorías. Vacío: /api/punchout/categories
Custom Create Order EndpointRuta del endpoint de creación de pedidos. Vacío: /api/punchout/create-order
Custom Order Status EndpointRuta del endpoint de estado de pedidos. Vacío: /api/punchout/order-status
Use Reverse Proxy, Reverse Proxy URLActivado por defecto. Reverse Proxy URL es de solo lectura y se genera a partir de Site Name, por ejemplo https://your-store.punchoutrocket.com: los clientes abren su tienda a través de él, evitando problemas de SameSite y CORS dentro de los sistemas de compras. El esquema y el host de sso_url devuelto se sustituyen por los de esta URL; la ruta y la consulta se conservan

Las rutas de los endpoints se añaden a Site URL tal cual, por lo que deben empezar por /. Ejemplo: Site URL https://your-store.example.com + /api/punchout/clone → https://your-store.example.com/api/punchout/clone.

Formulario Add E-commerce Site para una plataforma a medida: Site Name, Site URL, Use Reverse Proxy con Reverse Proxy URL de solo lectura, los cuatro endpoints personalizados, API Key con Generate, DUNS y ANID
Ajustes del sitio de comercio electrónico para una plataforma a medida

Los pedidos de compra (sección 6) y carritos predefinidos se incluyen en el plan Premium, incluido en la prueba gratuita: su plan los habilita en el sitio y la página del cliente final muestra las secciones Orders y Predefined Carts. Las confirmaciones de pedido y avisos de envío (secciones 7–8) requieren también la opción OC & ASN.

Cliente final

Cada empresa cliente es un cliente final de su sitio. Además de sus credenciales de protocolo (identidades cXML y shared secret, o usuario y contraseña OCI), estos campos afectan a su tienda:

Campos del cliente final que afectan a su tienda
CampoUtilizado para
E-commerce User to CloneNombre de usuario (o email) de un usuario de su tienda. Se envía como username al endpoint de clonación y como customer_email al crear el pedido: los usuarios PunchOut del cliente se clonan a partir de él y sus pedidos se asignan a él. Asígnele los precios, descuentos y direcciones correspondientes a este cliente
Default UNSPSCCódigo de categoría para productos cuyas categorías no tienen un código asignado (sección 5)
Default Lead TimePlazo de entrega en días enviado con cada artículo OCI (por defecto 3)
EA Override, BX OverrideSustituyen la unidad de medida EA o BX enviada por su tienda (sección 4) por el código que espera este cliente. Solo se aplican cuando su tienda envía ese código: una unidad vacía se convierte en EA sin sustitución
Category MappingSus categorías, cargadas con «Update from e-commerce», cada una asignada a un código (sección 5)
Shipping Method, Payment MethodSe envían al crear el pedido (sección 6). Déjelos vacíos para usar los valores predeterminados de su tienda
Send order status updates, Order status URL, Supplier shared secretHabilitan las secciones 7–8 para este cliente: la URL y el secreto son los de su sistema de compras
Página Edit End Customer con las secciones General, PunchOut Connection, Cart Defaults, Category Mapping y Orders
Ajustes del cliente final

El resto de las páginas del sitio y del cliente final funciona como en las demás plataformas: consulte la documentación.

Reglas comunes

Se aplican a cada llamada de PunchOut Rocket a sus endpoints (secciones 2, 5, 6 y 7):

  • Método y formato: siempre POST con cuerpo JSON (Content-Type: application/json). Responda con JSON.
  • Autenticación: el cuerpo siempre contiene api_key. Compárela con la clave configurada en su tienda y rechace la llamada con HTTP 401 si no coincide.
  • Solo HTTPS.
  • Errores: responda con un estado HTTP no 2xx y {"status": "error", "message": "<reason>"} (error_code es opcional). Especifique el mensaje, por ejemplo Product X-100 not found: aparece en los registros y emails de error enviados al propietario del sitio.
  • Tiempos de espera: las llamadas de creación y estado de pedidos caducan a los 30 segundos. Responda rápido y realice después las tareas lentas.

2. Endpoint de clonación

Ruta predeterminada: /api/punchout/clone. Se llama cuando un cliente abre su tienda desde el sistema de compras. Su tienda crea (o reutiliza) un usuario clonado de username, vinculado a esta sesión PunchOut, y devuelve una URL SSO que inicia su sesión (sección 3).

Cuerpo de la solicitud

Endpoint de clonación: campos de solicitud
CampoTipoSignificado
usernamestring«E-commerce User to Clone» del cliente final
api_keystringClave API del sitio
session_tokenstringID de sesión PunchOut (BuyerCookie cXML o UUID para OCI). Consérvelo: se devuelve en el formulario del carrito (sección 4)
end_customer_idintegerID del cliente final en PunchOut Rocket. Consérvelo: se devuelve en el formulario del carrito (sección 4)
operationstringcreate, edit o inspect para cXML; siempre create para OCI
gateway_base_urlstringURL base de PunchOut Rocket: el formulario del carrito (sección 4) envía a {gateway_base_url}/start-sso-checkout
selected_itemobject, opcionalSolo cXML: el producto elegido por el cliente en el catálogo del sistema de compras. Contiene supplier_part_id (SKU) y/o supplier_part_auxiliary_id (ID de producto), solo los enviados por el cliente
cart_itemsarray, opcionalSolo cXML edit e inspect: el carrito que debe restaurarse. Ausente si el sistema del cliente no envió artículos
Cada artículo de cart_items, tal como lo devolvió el sistema de compras
CampoTipoSignificado
skustringSKU (puede estar vacío)
product_idstringID del producto en su tienda (puede estar vacío)
quantitystringCantidad, por ejemplo "2"
pricestringPrecio unitario, punto como separador decimal, por ejemplo "15.95". Informativo: el carrito utiliza sus precios actuales
descriptionstringDescripción del producto
currencystringCódigo ISO 4217

quantity y price son cadenas: conviértalas antes de utilizarlas.

Solicitud: creación con un artículo seleccionado

{
  "username": "buyer123",
  "api_key": "site-api-key-abc",
  "session_token": "sess-012345",
  "operation": "create",
  "end_customer_id": 2,
  "gateway_base_url": "https://middleware.example.com",
  "selected_item": {
    "supplier_part_id": "X-100",
    "supplier_part_auxiliary_id": "19853"
  }
}

Solicitud: edit, con el carrito que debe restaurarse

{
  "username": "buyer123",
  "api_key": "site-api-key-abc",
  "session_token": "sess-67890",
  "operation": "edit",
  "end_customer_id": 2,
  "gateway_base_url": "https://middleware.example.com",
  "cart_items": [
    {"sku": "ABC-001", "product_id": "19852", "quantity": "2", "price": "15.95",
     "description": "Example description", "currency": "EUR"},
    {"sku": "XYZ-002", "product_id": "19854", "quantity": "1", "price": "249.00",
     "description": "Another example description", "currency": "EUR"}
  ]
}

Respuesta de éxito

HTTP 2xx

HTTP 200
{
  "status": "success",
  "sso_url": "https://your-store.example.com/punchout/sso?token=eyJ..."
}

sso_url es el único campo leído: es obligatorio y debe ser una URL absoluta http:// o https://. PunchOut Rocket dirige allí el navegador del cliente (a través del sistema de compras para cXML, directamente para OCI).

Respuestas de error

Cualquier estado no 2xx o respuesta sin un sso_url válido hace fallar el PunchOut: el cliente recibe un error en su sistema de compras. Su respuesta (estado y cuerpo) se guarda en el registro de la sesión PunchOut, así que explique el motivo en el mensaje.

Endpoint de clonación: respuestas de error
HTTPCuándoCuerpo
400Campos ausentes o no válidos{"status": "error", "error_code": "invalid_request", "message": "Missing field: operation"}
401api_key incorrecta{"status": "error", "error_code": "unauthorized", "message": "Invalid api_key"}
422SSO imposible, por ejemplo username no encontrado{"status": "error", "error_code": "sso_unavailable", "message": "User buyer123 not found"}
500Error interno{"status": "error", "error_code": "internal_error", "message": "..."}

3. Acceso SSO

Cuando el cliente abre sso_url, su tienda:

  1. consume el token (un solo uso) e inicia sesión con el usuario clonado;
  2. para edit e inspect: llena el carrito exactamente con los productos y cantidades de cart_items, y lo muestra (se aplican los precios actuales);
  3. para create: muestra el producto selected_item si se envió y sigue existiendo; en caso contrario, la página de inicio de la tienda.

Dé al token una validez de varios minutos, no segundos: cuando el cliente final tiene carritos predefinidos, ve primero esa página y abre sso_url solo al elegir continuar a la tienda.

4. Transferencia del carrito (formulario de envío automático)

Para un usuario PunchOut, el botón de finalizar compra no debe iniciar su proceso de pago: envía el carrito a PunchOut Rocket. Su tienda devuelve una página HTML que envía automáticamente un formulario oculto, preferiblemente con un indicador de carga.

  • URL: {gateway_base_url}/start-sso-checkout (gateway_base_url de la solicitud de clonación)
  • Método: POST, application/x-www-form-urlencoded (envío normal de un formulario del navegador)
  • Sin api_key: la sesión se identifica mediante session_token y end_customer_id.
Campos de transferencia del carrito
CampoObligatorioSignificado
session_tokenSíDe la solicitud de clonación
end_customer_idSíDe la solicitud de clonación
products[i][sku]SíSKU. Se convierte en SupplierPartID cXML o en el número de material del proveedor OCI
products[i][product_id]SíID del producto en su tienda. Se convierte en SupplierPartAuxiliaryID cXML: el cliente lo devuelve en edit y en los pedidos de compra
products[i][description]SíNombre o descripción del producto. Se eliminan las etiquetas HTML
products[i][quantity]SíCantidad, punto como separador decimal
products[i][price]SíPrecio unitario, punto como separador decimal, sin separador de miles
products[i][currency]SíCódigo ISO 4217
products[i][unit_of_measure]NoCódigo de unidad UN/CEFACT. Predeterminado EA
products[i][manufacturer_name]NoFabricante
products[i][category_ids]NoID separados por comas de las categorías a las que pertenece directamente el producto (hojas del árbol), devueltos por el endpoint de categorías (sección 5). Se usan para obtener su UNSPSC

i empieza en 0 y no tiene huecos: PunchOut Rocket deja de leer en el primer índice ausente. Recuerde escapar los valores para HTML.

Ejemplo de página devuelta al acceder al proceso de pago

<!doctype html>
<html>
<body>
<p>Sending your cart to your procurement system…</p>
<form id="punchout_repost" method="post" action="https://middleware.example.com/start-sso-checkout">
  <input type="hidden" name="session_token" value="sess-012345"/>
  <input type="hidden" name="end_customer_id" value="2"/>
  <input type="hidden" name="products[0][sku]" value="ABC-001"/>
  <input type="hidden" name="products[0][product_id]" value="19852"/>
  <input type="hidden" name="products[0][description]" value="Example description"/>
  <input type="hidden" name="products[0][quantity]" value="2"/>
  <input type="hidden" name="products[0][price]" value="15.95"/>
  <input type="hidden" name="products[0][currency]" value="EUR"/>
  <input type="hidden" name="products[0][unit_of_measure]" value="EA"/>
  <input type="hidden" name="products[0][manufacturer_name]" value="3M"/>
  <input type="hidden" name="products[0][category_ids]" value="1145,3398"/>
  <input type="hidden" name="products[1][sku]" value="XYZ-002"/>
  <input type="hidden" name="products[1][product_id]" value="19854"/>
  <input type="hidden" name="products[1][description]" value="Another example description"/>
  <input type="hidden" name="products[1][quantity]" value="4"/>
  <input type="hidden" name="products[1][price]" value="10.90"/>
  <input type="hidden" name="products[1][currency]" value="EUR"/>
  <input type="hidden" name="products[1][manufacturer_name]" value="DEWALT"/>
  <input type="hidden" name="products[1][category_ids]" value="2146"/>
</form>
<script>document.getElementById('punchout_repost').submit();</script>
</body>
</html>

PunchOut Rocket envía entonces el carrito al sistema de compras y finaliza la sesión. Cada sesión acepta un solo carrito:

Transferencia del carrito: respuestas de error
HTTPCuándo
400session_token o end_customer_id ausentes o no válidos, o ninguna sesión coincide con ellos
409Ya se envió un carrito para esta sesión

5. Endpoint de categorías

Ruta predeterminada: /api/punchout/categories. Se llama cuando el propietario del sitio hace clic en «Update from e-commerce» en el Category Mapping de un cliente final. Después se asignan manualmente las categorías a los códigos del cliente, como UNSPSC.

Solicitud

{"api_key": "site-api-key-abc"}

Éxito: HTTP 200, status success u ok

HTTP 200
{
  "status": "success",
  "categories": [
    {"id": 1345, "name": "Office Supplies", "parent_id": 0},
    {"id": 1847, "name": "Pens", "parent_id": 1345},
    {"id": 2345, "name": "Electronics", "parent_id": 0}
  ]
}
Categorías: campos
CampoSignificado
idID de categoría en su tienda, entero distinto de 0: los mismos ID enviados en category_ids (sección 4)
nameNombre visible. Se omiten las categorías sin nombre
parent_idID de la categoría padre, 0 para las de primer nivel

Devuelva todo el árbol en una respuesta. Cada actualización ajusta la lista del cliente final a su respuesta: las categorías que deje de devolver se eliminan junto con su código asignado, así que mantenga estables los ID.

Category Mapping con el botón Update from e-commerce y un árbol de categorías con códigos UNSPSC
Category Mapping de un cliente final

Cómo obtiene su código un producto del carrito:

  1. el código asignado a una de sus category_ids;
  2. en su defecto, el código de la categoría padre más cercana que tenga uno;
  3. en su defecto, el Default UNSPSC del cliente final.

6. Endpoint de creación de pedidos

Ruta predeterminada: /api/punchout/create-order. Se llama cuando el sistema de compras del cliente envía un pedido de compra (cXML OrderRequest). Su tienda crea el pedido y devuelve su ID y el ID de la línea de pedido creada para cada línea del PO. PunchOut Rocket responde al sistema de compras con el resultado. Requiere el plan Premium.

El cliente envía sus pedidos de compra a la «Order request URL» de la sección Orders del cliente final, donde se configuran Shipping Method, Payment Method y las actualizaciones de estado (sección 7):

Sección Orders de un cliente final con Order request URL, Shipping Method, Payment Method e interruptor Send order status updates con Order status URL y Supplier shared secret
Ajustes Orders del cliente final

Cuerpo de la solicitud

Creación de pedidos: campos de solicitud
CampoTipoSignificado
api_keystringClave API del sitio
gateway_urlstringURL base de PunchOut Rocket, para la notificación de estado (sección 8)
customer_emailstring«E-commerce User to Clone» del cliente final (el mismo valor que username en la solicitud de clonación, por lo que podría no ser un email): asigne el pedido a este usuario
order_idstringNúmero de PO del cliente. Guárdelo en el pedido: es la referencia que conoce el cliente
order_datestringFecha del PO enviada por el cliente (ISO 8601)
currencystringISO 4217
totalstringTotal del PO, punto como separador decimal
shipping_methodstringShipping Method del cliente final. Puede estar vacío: utilice su valor predeterminado
payment_methodstringPayment Method del cliente final, por ejemplo transferencia bancaria. Puede estar vacío: utilice su valor predeterminado
billing_address, shipping_addressobjectname, street (varias líneas separadas por \n, por ejemplo una línea «Attn:» antes de la calle), city, state, postal_code, country_code (ISO 3166-1 alpha-2), email. Los campos que no incluye el PO son cadenas vacías
itemsarrayLíneas del PO, véase a continuación
Creación de pedidos: cada artículo
CampoTipoSignificado
line_numberstringNúmero de línea del PO: devuélvalo en la respuesta
skustringSKU (cXML SupplierPartID)
product_idstringID del producto (SupplierPartAuxiliaryID cXML). Puede estar vacío: en ese caso busque por sku
quantityintegerCantidad pedida
unit_pricestringPrecio unitario del PO (el precio aprobado por el cliente), punto como separador decimal
currencystringISO 4217
descriptionstringDescripción de la línea

Solicitud

{
  "api_key": "site-api-key-abc",
  "gateway_url": "https://middleware.example.com",
  "customer_email": "buyer123",
  "order_id": "PO-4500123",
  "order_date": "2026-11-10T10:00:00+01:00",
  "currency": "EUR",
  "total": "280.90",
  "shipping_method": "Standard",
  "payment_method": "Bank transfer",
  "billing_address": {"name": "ACME Spa", "street": "Via Roma 1", "city": "Milano",
    "state": "MI", "postal_code": "20100", "country_code": "IT", "email": "ap@acme.example"},
  "shipping_address": {"name": "ACME Spa - Warehouse", "street": "Attn: Mario Rossi\nVia Milano 5",
    "city": "Torino", "state": "TO", "postal_code": "10100", "country_code": "IT", "email": ""},
  "items": [
    {"line_number": "1", "sku": "ABC-001", "product_id": "19852", "quantity": 2,
     "unit_price": "15.95", "currency": "EUR", "description": "Example description"},
    {"line_number": "2", "sku": "XYZ-002", "product_id": "19854", "quantity": 1,
     "unit_price": "249.00", "currency": "EUR", "description": "Another example description"}
  ]
}

Respuesta de éxito

HTTP 2xx

HTTP 200
{
  "status": "success",
  "order_id": "100045",
  "items": [
    {"line_number": "1", "order_item_id": "5501"},
    {"line_number": "2", "order_item_id": "5502"}
  ]
}
Creación de pedidos: campos de respuesta
CampoObligatorioSignificado
statusSíExactamente success
order_idSíID del pedido en su tienda: PunchOut Rocket lo pasa al endpoint de estado de pedidos (sección 7). No debe cambiar durante la vida del pedido
itemsRecomendadoPara cada línea del PO creada, el ID de su línea de pedido (los mismos ID que devuelve el endpoint de estado). Si dos líneas se convierten en una misma línea de pedido (mismo producto), incluya ambos valores line_number con ese order_item_id

items permite a PunchOut Rocket confirmar y notificar los envíos del PO línea por línea. Sin él no pueden comunicarse confirmaciones ni envíos parciales: el pedido se confirma entero y solo se notifica su primer envío, como envío completo.

Errores

Cualquier estado no 2xx o un status distinto de success significa que el pedido no se creó: el sistema de compras recibe un error y el propietario un email con su mensaje. Casos habituales: customer_email no encontrado, producto no encontrado o imposibilidad de crear el pedido.

Si no se encuentra un producto, puede crear el pedido sin él y omitir su line_number de items: esa línea se rechazará en la confirmación del pedido.

PunchOut Rocket no detecta un PO enviado dos veces: si su tienda ya tiene un pedido para este order_id y usuario, devuélvalo en lugar de crear otro.

7. Endpoint de estado de pedidos

Ruta predeterminada: /api/punchout/order-status. Se llama solo para clientes finales con «Send order status updates» activado, para pedidos creados mediante la sección 6: cada hora durante 60 días desde el pedido e inmediatamente tras una notificación (sección 8). Requiere la opción OC & ASN. A partir de la respuesta, PunchOut Rocket envía al sistema de compras del cliente:

  • una confirmación de pedido (cXML ConfirmationRequest), una sola vez, cuando se acepta o cancela el pedido;
  • un aviso de envío (cXML ShipNoticeRequest) por cada nuevo envío de un pedido confirmado.

PunchOut Rocket recuerda lo que envió: responda siempre con el estado actual del pedido y PunchOut Rocket determina qué ha cambiado.

Solicitud: order_id es el devuelto por su endpoint de creación de pedidos

{"api_key": "site-api-key-abc", "order_id": "100045"}

Respuesta de éxito

HTTP 200

HTTP 200
{
  "status": "success",
  "order_status": "shipped",
  "items": ["5501", "5502"],
  "quantities": [
    {"order_item_id": "5501", "quantity": 2},
    {"order_item_id": "5502", "quantity": 1}
  ],
  "shipments": [
    {
      "id": "SH-1",
      "shipped_at": "2026-11-12T09:30:00+01:00",
      "carrier": "UPS",
      "tracking": "1Z999AA10123456784",
      "items": [{"order_item_id": "5501", "quantity": 2}]
    }
  ]
}
Estado de pedidos: campos de respuesta
CampoObligatorioSignificado
statusSíExactamente success
order_statusSíEl estado de su pedido asignado a uno de los valores siguientes
itemsSíID de las líneas que siguen en el pedido. Una línea eliminada no aparece aquí
quantitiesRecomendadoCantidad actual de cada línea de pedido. Sin ella, una línea presente se considera que contiene completas sus líneas de PO: no puede comunicarse una reducción de cantidad
shipmentsRecomendadoUna entrada por envío realizado. Vacío ([]) cuando su tienda no registra envíos: solo se envían confirmaciones, sin avisos de envío
Valores de order_status
ValorSignificadoEnviado al cliente
pendingRecibido, aún no aceptadoNada
processingAceptadoConfirmación
shippedEnviado, parcial o totalmenteConfirmación si no se envió antes y después avisos de envío
deliveredEntregadoIgual que shipped
cancelledCanceladoRechazo del pedido completo, incluso tras una confirmación. Definitivo: no se vuelve a comprobar el pedido

La confirmación se envía una vez, la primera vez que el pedido está en processing, shipped o delivered:

  • acepta el pedido completo cuando todas las líneas del PO están presentes en su totalidad;
  • en caso contrario, acepta cada línea por la cantidad que contiene el pedido y rechaza el resto (artículos eliminados, cantidades reducidas). Una cantidad superior al PO se confirma por la cantidad del PO;
  • si no queda ninguna línea, no se envía nada: utilice cancelled para rechazar el pedido.

Los cambios posteriores en artículos no se confirman de nuevo: modifique el pedido antes de aceptarlo.

Cada envío
CampoObligatorioSignificado
idSíID del envío, único dentro del pedido y nunca reutilizado: cada ID se notifica una sola vez
shipped_atRecomendadoFecha de envío, ISO 8601 con desplazamiento de zona horaria
carrierNoNombre del transportista
trackingNoNúmero de seguimiento. El transportista solo se comunica junto con él
itemsSíLíneas de pedido en este envío y cantidad enviada (order_item_id de la creación del pedido). No se notifica un envío sin artículos del PO

Comunique un envío solo cuando haya salido. Los cambios realizados tras notificarlo no se envían de nuevo. Si el sistema de compras rechaza una confirmación o aviso de envío, PunchOut Rocket lo reenvía en la siguiente comprobación y no envía nada posterior hasta que sea aceptado.

Estado de pedidos: respuestas de error
HTTPCuándoEfecto
404 con {"status": "error", ...}El pedido no existe, por ejemplo se eliminóSe registra y se vuelve a comprobar en la siguiente ronda
Otros estados no 2xxCualquier otro falloSe registra y se vuelve a comprobar en la siguiente ronda

8. Notificación del estado de pedidos (opcional)

Sin ella, PunchOut Rocket lee el estado del pedido cada hora. Para enviar confirmaciones y avisos de envío en segundos, notifique a PunchOut Rocket cada cambio en un pedido creado mediante la sección 6 (estado, artículos, nuevo envío):

  • URL: {gateway_url}/order-status-changed (gateway_url de la solicitud de creación del pedido)
  • Método: POST, Content-Type: application/json
  • Sin autenticación: la notificación no contiene datos, solo hace que PunchOut Rocket llame a su endpoint de estado (sección 7) para ese pedido.

Notificación y respuesta

POST {gateway_url}/order-status-changed
Content-Type: application/json

{"order_id": "100045"}

HTTP 202
{"status": "queued"}

Envíela después de guardar el cambio, sin hacer esperar al usuario (fire and forget, tiempo de espera corto). Pueden ignorarse los fallos: la comprobación horaria recupera los cambios.

9. Comprobaciones antes de la puesta en marcha

  1. Configure el sitio (sección 1) e introduzca la misma clave API en su tienda.
  2. Cree un cliente final y establezca su «E-commerce User to Clone».
  3. Haga clic en «Update from e-commerce» en su Category Mapping y asigne las categorías; establezca un Default UNSPSC.
  4. Pruebe un PunchOut con el formulario de prueba cXML del panel de administración: create, después edit con un carrito y luego devuelva el carrito.
  5. Para pedidos de compra (plan Premium): envíe un OrderRequest de prueba y compruebe el pedido en su tienda.
  6. Para actualizaciones de estado (opción OC & ASN): active «Send order status updates» en el cliente final, pase el pedido de prueba por sus estados y compruebe que el sistema del cliente recibe la confirmación y los avisos de envío.

Recuerde:

  • Los usuarios PunchOut no deben completar una compra en su tienda: su carrito vuelve al sistema de compras (sección 4) y el pedido llega después mediante la sección 6.
  • Los pedidos recibidos mediante la sección 6 ya están aprobados por el sistema de compras del cliente: no necesitan pago online.

¿Necesita un cliente de prueba o una revisión de su implementación? Hable con nuestros desarrolladores o encargue el desarrollo con Go-Live Assist.

FAQ

Preguntas sobre la integración

¿Qué campos configuro en PunchOut Rocket?

Con E-commerce Platform en Custom: Site URL y API Key. Las cuatro rutas de endpoints (clonación, categorías, creación y estado de pedidos) solo son necesarias si no utiliza las predeterminadas.

¿Necesito el endpoint de categorías?

Se recomienda. Permite asignar sus categorías a los códigos que exigen los clientes, como UNSPSC; sin él, todos los productos reciben el Default UNSPSC del cliente final.

¿Se puede reutilizar el enlace SSO?

No. El token debe funcionar una sola vez, mediante HTTPS. Déle una validez de varios minutos, no segundos: con carritos predefinidos, el cliente abre el enlace solo después de elegir continuar a su tienda.

¿Cómo llegan los pedidos de compra a una tienda a medida?

Mediante su endpoint de creación de pedidos: el gateway recibe el cXML OrderRequest del cliente y lo envía a su tienda como JSON. Se incluye en el plan Premium y en la prueba gratuita.

¿Puede mi tienda enviar confirmaciones de pedido y avisos de envío?

Sí, con la opción OC & ASN del plan Premium (contacte con nosotros para activarla). Implemente el endpoint de estado: el gateway lee el estado de cada pedido y envía cXML ConfirmationRequest y ShipNoticeRequest al sistema del cliente.

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.