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
En esta página
- Qué implementa su tienda
- 1. Configuración en PunchOut Rocket
- Reglas comunes
- 2. Endpoint de clonación
- 3. Acceso SSO
- 4. Transferencia del carrito
- 5. Endpoint de categorías
- 6. Endpoint de creación de pedidos
- 7. Endpoint de estado de pedidos
- 8. Notificación del estado de pedidos
- 9. Comprobaciones antes de la puesta en marcha
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.
| Sección | Función | Qué implementa su tienda | Obligatorio | Plan |
|---|---|---|---|---|
| 2–3 | Sesión PunchOut (create, edit, inspect) con acceso automático | Endpoint de clonación y acceso SSO | Sí | Todas las licencias |
| 4 | Transferencia del carrito al sistema de compras | Formulario de envío automático a PunchOut Rocket | Sí | Todas las licencias |
| 5 | Asignación de categorías, por ejemplo UNSPSC | Endpoint de categorías | Recomendado | Todas las licencias |
| 6 | Pedidos de compra (cXML OrderRequest) | Endpoint de creación de pedidos | Opcional | Plan Premium |
| 7 | Confirmaciones de pedido y avisos de envío (cXML ConfirmationRequest, ShipNoticeRequest) | Endpoint de estado de pedidos | Opcional, requiere 6 | Plan Premium + opción OC & ASN |
| 8 | Actualizaciones inmediatas de pedidos | Notificación a PunchOut Rocket | Opcional, requiere 7 | Plan Premium + opción OC & ASN |
| – | Carritos predefinidos | Nada: 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
| Campo | Valor |
|---|---|
| E-commerce Platform | Custom |
| Site URL | URL base de su tienda, por ejemplo https://your-store.example.com. Puede incluir una ruta (https://example.com/shop); se elimina el / final |
| API Key | Un 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 Endpoint | Ruta del endpoint de clonación. Vacío: /api/punchout/clone |
| Custom Categories Endpoint | Ruta del endpoint de categorías. Vacío: /api/punchout/categories |
| Custom Create Order Endpoint | Ruta del endpoint de creación de pedidos. Vacío: /api/punchout/create-order |
| Custom Order Status Endpoint | Ruta del endpoint de estado de pedidos. Vacío: /api/punchout/order-status |
| Use Reverse Proxy, Reverse Proxy URL | Activado 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.

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:
| Campo | Utilizado para |
|---|---|
| E-commerce User to Clone | Nombre 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 UNSPSC | Código de categoría para productos cuyas categorías no tienen un código asignado (sección 5) |
| Default Lead Time | Plazo de entrega en días enviado con cada artículo OCI (por defecto 3) |
| EA Override, BX Override | Sustituyen 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 Mapping | Sus categorías, cargadas con «Update from e-commerce», cada una asignada a un código (sección 5) |
| Shipping Method, Payment Method | Se 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 secret | Habilitan las secciones 7–8 para este cliente: la URL y el secreto son los de su sistema de compras |

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
POSTcon 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_codees opcional). Especifique el mensaje, por ejemploProduct 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
| Campo | Tipo | Significado |
|---|---|---|
username | string | «E-commerce User to Clone» del cliente final |
api_key | string | Clave API del sitio |
session_token | string | ID de sesión PunchOut (BuyerCookie cXML o UUID para OCI). Consérvelo: se devuelve en el formulario del carrito (sección 4) |
end_customer_id | integer | ID del cliente final en PunchOut Rocket. Consérvelo: se devuelve en el formulario del carrito (sección 4) |
operation | string | create, edit o inspect para cXML; siempre create para OCI |
gateway_base_url | string | URL base de PunchOut Rocket: el formulario del carrito (sección 4) envía a {gateway_base_url}/start-sso-checkout |
selected_item | object, opcional | Solo 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_items | array, opcional | Solo cXML edit e inspect: el carrito que debe restaurarse. Ausente si el sistema del cliente no envió artículos |
| Campo | Tipo | Significado |
|---|---|---|
sku | string | SKU (puede estar vacío) |
product_id | string | ID del producto en su tienda (puede estar vacío) |
quantity | string | Cantidad, por ejemplo "2" |
price | string | Precio unitario, punto como separador decimal, por ejemplo "15.95". Informativo: el carrito utiliza sus precios actuales |
description | string | Descripción del producto |
currency | string | Có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.
| HTTP | Cuándo | Cuerpo |
|---|---|---|
| 400 | Campos ausentes o no válidos | {"status": "error", "error_code": "invalid_request", "message": "Missing field: operation"} |
| 401 | api_key incorrecta | {"status": "error", "error_code": "unauthorized", "message": "Invalid api_key"} |
| 422 | SSO imposible, por ejemplo username no encontrado | {"status": "error", "error_code": "sso_unavailable", "message": "User buyer123 not found"} |
| 500 | Error interno | {"status": "error", "error_code": "internal_error", "message": "..."} |
3. Acceso SSO
Cuando el cliente abre sso_url, su tienda:
- consume el token (un solo uso) e inicia sesión con el usuario clonado;
- para
editeinspect: llena el carrito exactamente con los productos y cantidades decart_items, y lo muestra (se aplican los precios actuales); - para
create: muestra el productoselected_itemsi 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_urlde 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 mediantesession_tokenyend_customer_id.
| Campo | Obligatorio | Significado |
|---|---|---|
session_token | Sí | De la solicitud de clonación |
end_customer_id | Sí | 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] | No | Código de unidad UN/CEFACT. Predeterminado EA |
products[i][manufacturer_name] | No | Fabricante |
products[i][category_ids] | No | ID 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:
| HTTP | Cuándo |
|---|---|
| 400 | session_token o end_customer_id ausentes o no válidos, o ninguna sesión coincide con ellos |
| 409 | Ya 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}
]
}| Campo | Significado |
|---|---|
id | ID de categoría en su tienda, entero distinto de 0: los mismos ID enviados en category_ids (sección 4) |
name | Nombre visible. Se omiten las categorías sin nombre |
parent_id | ID 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.

Cómo obtiene su código un producto del carrito:
- el código asignado a una de sus
category_ids; - en su defecto, el código de la categoría padre más cercana que tenga uno;
- 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):

Cuerpo de la solicitud
| Campo | Tipo | Significado |
|---|---|---|
api_key | string | Clave API del sitio |
gateway_url | string | URL base de PunchOut Rocket, para la notificación de estado (sección 8) |
customer_email | string | «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_id | string | Número de PO del cliente. Guárdelo en el pedido: es la referencia que conoce el cliente |
order_date | string | Fecha del PO enviada por el cliente (ISO 8601) |
currency | string | ISO 4217 |
total | string | Total del PO, punto como separador decimal |
shipping_method | string | Shipping Method del cliente final. Puede estar vacío: utilice su valor predeterminado |
payment_method | string | Payment Method del cliente final, por ejemplo transferencia bancaria. Puede estar vacío: utilice su valor predeterminado |
billing_address, shipping_address | object | name, 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 |
items | array | Líneas del PO, véase a continuación |
| Campo | Tipo | Significado |
|---|---|---|
line_number | string | Número de línea del PO: devuélvalo en la respuesta |
sku | string | SKU (cXML SupplierPartID) |
product_id | string | ID del producto (SupplierPartAuxiliaryID cXML). Puede estar vacío: en ese caso busque por sku |
quantity | integer | Cantidad pedida |
unit_price | string | Precio unitario del PO (el precio aprobado por el cliente), punto como separador decimal |
currency | string | ISO 4217 |
description | string | Descripció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"}
]
}| Campo | Obligatorio | Significado |
|---|---|---|
status | Sí | Exactamente success |
order_id | Sí | 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 |
items | Recomendado | Para 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}]
}
]
}| Campo | Obligatorio | Significado |
|---|---|---|
status | Sí | Exactamente success |
order_status | Sí | El estado de su pedido asignado a uno de los valores siguientes |
items | Sí | ID de las líneas que siguen en el pedido. Una línea eliminada no aparece aquí |
quantities | Recomendado | Cantidad 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 |
shipments | Recomendado | Una entrada por envío realizado. Vacío ([]) cuando su tienda no registra envíos: solo se envían confirmaciones, sin avisos de envío |
| Valor | Significado | Enviado al cliente |
|---|---|---|
pending | Recibido, aún no aceptado | Nada |
processing | Aceptado | Confirmación |
shipped | Enviado, parcial o totalmente | Confirmación si no se envió antes y después avisos de envío |
delivered | Entregado | Igual que shipped |
cancelled | Cancelado | Rechazo 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
cancelledpara rechazar el pedido.
Los cambios posteriores en artículos no se confirman de nuevo: modifique el pedido antes de aceptarlo.
| Campo | Obligatorio | Significado |
|---|---|---|
id | Sí | ID del envío, único dentro del pedido y nunca reutilizado: cada ID se notifica una sola vez |
shipped_at | Recomendado | Fecha de envío, ISO 8601 con desplazamiento de zona horaria |
carrier | No | Nombre del transportista |
tracking | No | Número de seguimiento. El transportista solo se comunica junto con él |
items | Sí | 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.
| HTTP | Cuándo | Efecto |
|---|---|---|
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 2xx | Cualquier otro fallo | Se 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_urlde 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
- Configure el sitio (sección 1) e introduzca la misma clave API en su tienda.
- Cree un cliente final y establezca su «E-commerce User to Clone».
- Haga clic en «Update from e-commerce» en su Category Mapping y asigne las categorías; establezca un Default UNSPSC.
- 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.
- Para pedidos de compra (plan Premium): envíe un OrderRequest de prueba y compruebe el pedido en su tienda.
- 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.