Confirmar Pedidos
Proceso de confirmar un pedido y generar su guía de envío. Permite confirmar pedidos que están en estado de preconfirmación (revisarCE = 1) o pedidos pagados desde canal de venta. El endpoint actualiza los datos del cliente, confirma el pedido y genera automáticamente la guía con el operador asignado.
Request 🚀
url
https://app.aveonline.co/avestock/api/confirmarPedido.php
Method
POST
Header
Content-Type: application/json
Params JSON
Identificación del Pedido (requerido uno de los siguientes)
- pedido
StringNúmero de pedido generado por AVECRM o número de pedido externo - numeroPedidoExterno
StringNúmero de pedido externo generado desde una tienda, ERP, POS, etc. - integrationOrderId
StringID de integración del pedido
Datos del Agente
- idAgente
NumberID del agente. Requerido cuando se usa numeroPedidoExterno o integrationOrderId
Datos del Cliente (requeridos)
- clientContact*
StringNombre del destinatario - clientId*
StringIdentificación del destinatario - clientDir*
StringDirección del destinatario - clientTel*
StringTeléfono del destinatario
Datos Adicionales (opcionales)
- clientEmail
StringCorreo electrónico del destinatario - obs
StringObservaciones para el envío (dice contener). Si no se envía, se generará automáticamente con los productos del pedido - notas
StringNotas internas del pedido - grandTotalValue
NumberValor total del pedido. Debe ser numérico - valorEnvioValue
NumberValor del envío. Debe ser numérico - seloperadorEnvio
NumberID del operador de envío a utilizar - cadenaEnvio
ObjectDatos de la cadena de envío - ilaConfirmed
StringIndica si es una preconfirmación (valor "1")
Ejemplo - Confirmación con número de pedido
{
"tipo": "authave",
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uIjoxMTY5MDYsImV4cCI6MTYyNTYwMzA2MCwiYXByb2JhZG9zIjpbMTUyODldfQ.QjLQUri4XrArwIDFL1dTr2aQdKv6WgKiTBj25qJkaLM",
"empresa": 6077,
"pedido": "00000000",
"clientContact": "nombre prueba",
"clientId": "78000000",
"clientDir": "DIRECCION DE PRUEBA DE CLIENTE",
"clientTel": "2340000000",
"clientEmail": "prueba@prueba.com",
"obs": "",
"notas": "Notas internas del pedido",
"grandTotalValue": 100000,
"valorEnvioValue": 15000
}
Ejemplo - Confirmación con integrationOrderId y agente
{
"tipo": "authave",
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXNzaW9uIjoxMTY5MDYsImV4cCI6MTYyNTYwMzA2MCwiYXByb2JhZG9zIjpbMTUyODldfQ.QjLQUri4XrArwIDFL1dTr2aQdKv6WgKiTBj25qJkaLM",
"empresa": 6077,
"integrationOrderId": "ORD-12345",
"idAgente": 123,
"clientContact": "nombre prueba",
"clientId": "78000000",
"clientDir": "DIRECCION DE PRUEBA DE CLIENTE",
"clientTel": "2340000000",
"clientEmail": "prueba@prueba.com",
"seloperadorEnvio": 5,
"ilaConfirmed": "1"
}
Response 📄
Success
- status
StringEstado de la respuesta: "ok" - messages
Array Object -> [{}]- data
StringMensaje asociado al proceso solicitado
- data
- pedido
StringNúmero de pedido confirmado - transportadora
StringOperador logístico asociado al número de guía generado - flete
NumberValor del flete de transporte - variable
NumberCosto del pedido declarado - costorecaudo
NumberCosto del pedido a recaudar - totalflete
NumberTotal de transporte - costo_proveedor
NumberValor total del costo a dispersar o pagar al proveedor - costo_dp
NumberValor total a dispersar o pagar al ecommerce o vendedor - response
ObjectObjeto con la respuesta del servicio de generación de guía - log
StringLog del cambio de estado del pedido
Ejemplo - Confirmación exitosa
{
"status": "ok",
"messages": {
"data": "Proceso realizado con éxito para el pedido 00000 en proceso de generación de guía."
},
"pedido": "00000",
"transportadora": "",
"flete": 0,
"variable": 0,
"costorecaudo": 0,
"totalflete": 0,
"costo_proveedor": 0,
"costo_dp": 0,
"response": {
"success": true
},
"log": "Confirmada"
}
Ejemplo - Preconfirmación exitosa (ilaConfirmed = "1")
{
"status": "ok",
"messages": {
"data": "Proceso completado"
},
"pedido": "00000",
"transportadora": "",
"flete": 0,
"variable": 0,
"costorecaudo": 0,
"totalflete": 0,
"costo_proveedor": 0,
"costo_dp": 0,
"response": [],
"log": "Preconfirmado"
}
Errores de Validación
Campos obligatorios faltantes (422)
{
"status": "error",
"message": "El campo clientContact es requerido (1) errores en total.",
"errors": [
{
"detail": "El campo clientContact es requerido",
"field": "clientContact"
}
]
}
Valores numéricos inválidos (422)
{
"status": "error",
"message": "El total del pedido debe ser un valor numérico."
}
{
"status": "error",
"message": "El valor de envío debe ser un valor numérico."
}
Recaudo menor al mínimo (422)
{
"status": "error",
"message": "El valor del recaudo debe ser mayor o igual a 5000."
}
Errores de Pedido
Pedido no encontrado (404)
{
"status": "error",
"message": "Pedido con el identificador 00000000 y agente 123 no se ha encontrado."
}
Agente no encontrado (404)
{
"status": "error",
"message": "Agente con el identificador 123 no se ha encontrado, Verifique la información del agente en la orden."
}
Pedido ya confirmado (400)
{
"status": "error",
"message": "Pedido con el identificador 00000000 ya ha sido confirmado."
}
Pedido con guía existente (400)
{
"status": "error",
"message": "Pedido con el identificador 00000000 ya tiene una guía asociada."
}
Pedido sin operador asignado (400)
{
"status": "error",
"message": "Pedido con el identificador 00000000 no tiene un operador asignado."
}
Pedido sin bodega asignada (400)
{
"status": "error",
"message": "Pedido con el identificador 00000000 no tiene una bodega asignada."
}
Pedido sin nombre de bodega (400)
{
"status": "error",
"message": "Pedido con el identificador 00000000 no se pudo obtener el nombre de la bodega. Verifique la configuración de la bodega."
}
Pedido sin agente asignado (400)
{
"status": "error",
"message": "Pedido con el identificador 00000000 no tiene un agente asignado."
}
Pedido con novedad (400)
{
"status": "error",
"message": "Pedido con el identificador 00000000 se encuentra en novedad: Cliente rechazó el pedido"
}
Pedido sin productos (400)
{
"status": "error",
"message": "Pedido con el identificador 00000000 no tiene productos asociados."
}
Errores del Sistema
Error al actualizar cliente (500)
{
"status": "error",
"message": "Error al actualizar los datos del cliente: [detalle del error]"
}
Error al confirmar pedido (500)
{
"status": "error",
"message": "Error al confirmar el pedido 00000000: [detalle del error]"
}
Error al registrar log (500)
{
"status": "error",
"message": "Error al registrar el log del pedido 00000000: [detalle del error]"
}
Credenciales incorrectas o token expirado
{
"status": "error",
"mensaje": "Credenciales invalidas o el cliente se encuentra inactivo"
}
Proceso Interno 🔄
Validaciones Realizadas
- Validación de campos requeridos: Se verifica que estén presentes los campos obligatorios según la forma de identificación del pedido
- Validación de valores numéricos: grandTotalValue y valorEnvioValue deben ser numéricos
- Búsqueda del pedido: Se busca por order_consec, numeroPedidoExterno o integrationOrderId
- Validación de agente: Si el pedido tiene agente pero falta el nombre, se actualiza automáticamente
- Validación de bodega: Si existe bodegaName pero falta bodegaContact, se actualiza automáticamente
- Estado del pedido: Debe estar en preconfirmado, en proceso, solicitada o pagado desde canal de venta
- Guía existente: No debe tener una guía activa asociada
- Operador de envío: Debe tener un operador asignado
- Bodega: Debe tener una bodega y su nombre configurados
- Agente: Debe tener un agente y su nombre asignados
- Novedad: No debe estar en estado de novedad
- Recaudo mínimo: Si tiene recaudo, debe ser mayor o igual a 5000
- Productos: Debe tener al menos un producto asociado
Actualizaciones Automáticas
- Nombre del agente: Si falta, se obtiene desde la tabla de agentes
- Nombre de bodega: Si falta, se obtiene desde la tabla de bodegas
- Observaciones: Si no se envían, se generan automáticamente con la lista de productos
- Datos del cliente: Se actualizan teléfono, dirección y email en la tabla clientes
Proceso de Confirmación
- Actualizar datos del cliente en la tabla
clientes - Actualizar datos del pedido:
- clientContact, clientId, grandTotal, clientDir, clientEmail, clientTel
- revisarCE = 0 (marca como confirmado)
- notas, obs
- Si se envía operador: valorEnvio, seloperadorEnvio, cadenaEnvio
- Cambiar estado del pedido:
- Si ilaConfirmed = "1": estado 1111 (Preconfirmado)
- Si no: estado 1 (Confirmada)
- Registrar en log: Se crea un registro en order_status_log
- Si cambió el operador: Se registra en order_log
- Si no es preconfirmación:
- Se genera la guía automáticamente mediante GuideService
- Si la guía se genera exitosamente, cambia a estado "Solicitada"
- Se envía correo de confirmación
- Sincronización con Shopify (si aplica)
Registro de Cambios (Log)
El sistema registra automáticamente en order_status_log:
- Actualización de nombre de agente
- Actualización de nombre de bodega
- Cambios en datos del cliente (teléfono, dirección, email)
- Cambios en valores del pedido (total, valor envío)
- Cambio de operador de envío
- Confirmación del pedido
- Proceso de generación de guía
Notas Importantes 📝
- El campo
obsse auto-genera con los productos si no se proporciona - Los valores de
grandTotalValueyvalorEnvioValuese redondean automáticamente - Si
ilaConfirmed = "1", solo se preconfirma sin generar guía - El sistema actualiza automáticamente datos faltantes de agente y bodega
- Se valida que el recaudo sea mínimo 5000 si existe
- El método HTTP debe ser POST, de lo contrario retorna error 405