Orders
Crea y sigue los pedidos de los clientes a lo largo de todo el ciclo de checkout, pago y cumplimiento.
Más información sobre la interfaz de usuario del módulo https://doc.oneentry.cloud/docs/category/orders (abre en una nueva pestaña)
El módulo Orders convierte un carrito en un pedido, calcula una vista previa de los totales (descuentos, cupones, bonificaciones), sigue el estado del pedido y gestiona las solicitudes de reembolso. La interfaz del carrito la construyes tú.
Los pedidos se guardan en almacenamientos de pedidos: contenedores que configuras en el panel de administración y a los que haces referencia por marcador. El pago se realiza a través de la pasarela configurada para la cuenta de pago elegida; consulta el módulo Payments.
Inicio rápido
Inicializa el módulo desde defineOneEntry:
const { } = defineOneEntry( , { });
Crea un pedido en un almacén y lee el resultado (este ejemplo usa un usuario con sesión iniciada):
// Create an order in the "my_order" storage.
const order = await Orders.createOrder("my_order", {
formIdentifier: "orderForm",
paymentAccountIdentifier: "cash",
formData: [],
products: [{ productId: 2957, quantity: 2 }],
});
if ('statusCode' in order) throw new Error(order.message);
console.log(order.id, order.totalSum, order.statusIdentifier);
// 179 285 "inProgress-payment"
Objeto de pedido
Los métodos de lectura (getOrderByMarkerAndId(), getOrderById(), getAllOrdersByMarker()) devuelven los pedidos con esta forma (IOrderByMarkerEntity). createOrder() y updateOrderByMarkerAndId() devuelven un IBaseOrdersEntity más corto.
{
id: 179,
storageId: 1,
createdDate: '2025-07-03T00:43:02.908Z',
statusIdentifier: 'inProgress',
formIdentifier: 'orderForm',
formData: [
{ marker: 'order_name', type: 'string', value: 'John' }
],
attributeSetIdentifier: 'order_form',
totalSum: '300.00',
currency: 'USD',
paymentAccountIdentifier: 'cash',
paymentAccountLocalizeInfos: { title: 'Cash' },
paymentUrl: null,
products: [
{
id: 2957,
title: 'Cosmo',
sku: null,
previewImage: null,
price: 150,
quantity: 2,
isGift: false,
},
],
isCompleted: false,
}
Los campos que más usarás:
id: identificador del pedidostorageId: el almacenamiento de pedidos al que pertenece el pedidoformIdentifier/formData: el formulario del pedido y los datos que envió el clienteproducts: líneas del pedido (id,title,quantity,price, …)totalSum/currency: total del pedido y monedapaymentAccountIdentifier: la cuenta de pago elegidapaymentUrl: enlace de checkout de la pasarela, onullstatusIdentifier/isCompleted: estado actualcreatedDate: marca de tiempo
Almacenamientos y estados
Un almacenamiento de pedidos agrupa pedidos relacionados, por ejemplo los pedidos de un formulario o de un canal de venta concreto. Te diriges a un almacenamiento por su marcador y a un pedido dentro de él por marcador e id. Los marcadores son estables, así que haz referencia a los almacenamientos y formularios por marcador y no por el nombre visible.
Cada almacenamiento define su propio conjunto de estados, y el estado actual de un pedido está en statusIdentifier. Obtén los estados disponibles en un almacenamiento con getAllStatusesByStorageMarker() y cambia el estado de un pedido con updateOrderByMarkerAndId(). Para reaccionar a los cambios de estado, usa el módulo Events.
Crear un pedido
Tú aportas los datos del formulario y las líneas del pedido; OneEntry calcula el total. Para crear un pedido, pasa:
formIdentifier: el formulario del pedidoformData: los campos que envió el clienteproducts: un array de líneas, cada una conproductId,quantityy unsignedPriceopcionalpaymentAccountIdentifier: cómo pagará el cliente
Llama primero a previewOrder() para mostrar descuentos, cupones y bonos en el resumen del pago. Los métodos de lectura y actualización requieren un usuario autenticado (consulta AuthProvider). createOrder() también funciona para invitados si el grupo de usuarios de invitados tiene permiso. Pagina las listas de pedidos con offset y limit en lugar de cargar todos los pedidos a la vez.
El módulo no almacena datos de tarjeta sin procesar: el pago lo gestiona la pasarela, mediante la sesión de pago o paymentUrl.
Puedes modificar un pedido después de crearlo con updateOrderByMarkerAndId(): su estado, los datos del formulario o los productos. Ten cuidado al cambiar artículos o totales cuando el pago ya está en curso.
Cancelaciones y reembolsos
Para cancelar un pedido, actualiza su estado con updateOrderByMarkerAndId(). Los reembolsos se gestionan en este módulo: solicita uno con createRefundRequest(), lista las solicitudes de reembolso de un pedido con getRefunds() y cancela una con cancelRefundRequest().
Métodos
| Método | Descripción |
|---|---|
| createOrder() | Crea un pedido nuevo |
| getAllOrdersByMarker() 🔐 | Obtiene todos los pedidos de un almacenamiento (con paginación) |
| getOrdersStorageByMarker() 🔐 | Obtiene un almacenamiento de pedidos por marcador |
| getAllOrdersStorage() 🔐 | Obtiene todos los almacenamientos de pedidos |
| getOrderByMarkerAndId() 🔐 | Obtiene uno de los pedidos del usuario por marcador de almacenamiento e id |
| getOrderById() 🔐 | Obtiene uno de los pedidos del usuario por id, sin el marcador de almacenamiento |
| updateOrderByMarkerAndId() 🔐 | Actualiza uno de los pedidos del usuario por marcador de almacenamiento e id |
| previewOrder() | Previsualiza los totales, descuentos y cupones del pedido antes de crearlo |
| getAllStatusesByStorageMarker() 🔐 | Obtiene todos los estados de pedido de un almacenamiento |
| getRefunds() 🔐 | Obtiene todas las solicitudes de reembolso de un pedido |
| createRefundRequest() 🔐 | Crea una solicitud de reembolso para un pedido |
| cancelRefundRequest() 🔐 | Cancela una solicitud de reembolso de un pedido |
| getOrdersByVectorSearch() 🔐 | Búsqueda semántica (vectorial) en los pedidos del usuario autenticado |
🔐 = Requiere autorización
Precio fijo del producto (signedPrice)
signedPrice es un token firmado que bloquea el precio de un producto. Cuando una línea del pedido lo lleva, el servidor cobra ese precio fijo en lugar de volver a consultar el precio, de modo que el cliente paga el importe que vio en el catálogo o en el carrito. Úsalo siempre que los productos pasen al checkout, para que el precio no cambie entre la navegación y el pedido.
De dónde se obtiene
signedPrice no lo generas tú. Llega dentro de los datos del producto, pero solo si solicitaste los productos con el parámetro signPrice establecido en el marcador de tu almacenamiento de pedidos:
- Módulo Products: pasa
signPriceenuserQuery(getProducts,getProductsByPageUrl, …). - Módulo Blocks: pasa
signPricecomo argumento de los métodos de recomendaciones (getCartSimilar,getRecentlyViewed, …).
Entonces cada producto devuelto contiene una cadena signedPrice. Consulta Fijar el precio (signPrice) para más detalles.
Cómo usarlo
Devuelve el token en cada producto del body de createOrder() y el pedido conservará el precio fijo:
const products = await Products.([], "en_US", { signPrice: "my_order"});if ('statusCode' in products) throw new Error(products.message);const { items } = products;
const = { formIdentifier: "orderForm", paymentAccountIdentifier: "cash", formData: [], products: [ { productId: items[0].id, quantity: 2, signedPrice: items[0]. } ]};
const order = await Orders.createOrder("my_order", body);
Sin signedPrice, el pedido se crea con el precio actual del producto en el momento del checkout.
Relacionado
- Products: productos disponibles para comprar
- Payments: sesiones de pago de los pedidos
- Users: los clientes que hacen pedidos
- AuthProvider: autorización para los métodos de pedidos
- Events: notificaciones de estado de los pedidos