El recorrido en términos simples
- Explorar — El cliente elige tienda, canal y
fulfillment_id, y carga el menú compuesto. - Personalizar — Usa
@fire-spark/storefront(createSession/toOrderLines) para convertir un producto personalizado en filasOrderLinecon precios. - Abrir carrito — Llama a Crear pedido con el alcance (y normalmente
linesvacías).201es un carrito nuevo;202es elOPENque ya existe para ese alcance — usa elidde la respuesta. - Sincronizar carrito — Aplica debounce a los cambios locales y Actualizar pedido con
lines+totals. - Validar — Antes del checkout, llama a Validar pedido (o
order.validateOrder()en@fire-spark/storefront) para comprobar precios y disponibilidad contra un menú fresco. - Pagar y colocar — Guarda los tenders con Guardar intent de pago (
order.setTenders) o pasa un solo método al colocar. Luego llama a Colocar pedido (order.placeOrder()). Pasaintent_idpara bloquear ese borrador. Omítelo para armar un tender real desdepayment.typemás un tenderREDEMPTIONpor cadapayment_idde canje. No hay efectivo por defecto: sinintent_idnipayment.type, place falla conPAYMENT_REQUIREDsalvo que los canjes cubran el total (entonces solo tendersREDEMPTION). El carrito pasa aCLOSEDy arranca fulfillment. - Seguimiento — Suscríbete con
realtime.listenOrder({ orderId })(ver Emitir token realtime) o consulta Obtener fulfillment paracheckout_state, estados visitados ycurrent_node_ids. En el historial usa Listar fulfillments en vez de un GET por pedido. Obtener pedido sigue exponiendofulfillment_status. Cómo espera el overlay se configura en el workflow de fulfillment.
Requisitos previos
- Cliente registrado y autenticado mediante intercambio de token
- Ids de tienda, canal y fulfillment desde Listar tiendas y Listar fulfillment
- Menú cargado para la misma combinación de tienda, canal y fulfillment
Paso 1 — Generar líneas con precio desde la personalización
Paso 2 — Asignar ids antes de crear
Genera el id del pedido en tu servidor antes del POST. Así los reintentos son seguros si se pierde la conectividad.Paso 3 — Crear y luego actualizar el pedido
lines y totals cuando cambie el carrito. La clase headless Order de @fire-spark/storefront aplica debounce a esas actualizaciones por ti.
Paso 4 — Validar antes del checkout
422, usa details.issues y details.lines para actualizar la UI del carrito. Ver Validar pedido para cada código de error.
Paso 5 — Colocar el pedido
placeOrder() sin intent_id guarda el borrador y coloca con él. placeOrder({ payment }) es el atajo de un solo método. Una sincronización del carrito rechazada sale como OrderSyncRejectedError y no se coloca nada; sin un tender real lanza OrderPaymentRequiredError. 201 inicia fulfillment. 202 significa que ya hay un place en curso. 409 significa que el pedido ya fue colocado.
Paso 6 — Mostrar el estado al cliente
Consulta Obtener fulfillment para estados visitados (entered_at), current_node_ids y milestones. En un listado de pedidos cerrados, llama Listar fulfillments una vez. Obtener pedido sigue exponiendo fulfillment_status.
Cocina y POS avanzan el walker con Actualizar estado.
Paso 7 — Cancelar o reembolsar
Si el cliente cancela antes del fulfillment, llama a Cancelar pedido. Eso interrumpe un workflow de fulfillment en curso. En un kiosco, Cancelar durante la espera de liberación del checkout llama a Reabrir pedido: se anulan los tenders sin cobrar y vuelve un pedidoOPEN nuevo. order_id es opcional y puede ser cualquier id de genId (genOrderId es una opción y sigue devolviendo ord-<tienda>-<hash>); omítelo para conservar el id generado. genId().hash(length, format) usa un hash de al menos 8 caracteres (por defecto 12; alphanumeric, numeric o alphabetic). genId().literal("BB21921").hash(8, "numeric").build() produce un id como BB2192100000001. Después de fulfilled, Reembolsar pedido está disponible durante 24 horas. Un tender se reembolsa con Reembolsar tender.
Enlaces relacionados
Crear pedido
Abrir un pedido con alcance
Actualizar pedido
Sincronizar líneas y totales
Validar pedido
Comprobar líneas contra un menú fresco
Colocar pedido
Cerrar el carrito e iniciar fulfillment
Guardar intent de pago
Tenders antes de colocar
Reabrir pedido
Anular tenders sin cobrar y abrir un carrito nuevo
Cancelar pedido
Detener fulfillment antes de que el pedido se cumpla
Reordenar
Clonar un pedido fulfilled en un carrito OPEN
Reembolsar pedido
Reembolsar un pedido fulfilled dentro de 24 horas
Obtener fulfillment
Estados visitados y milestones
Listar fulfillments
Historial sin N+1 peticiones
Listar pedidos
Historial de pedidos
Concepto: pedidos
Visión comercial