Skip to main content
Version: Latest

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

Content-Type: application/json

Params JSON

Identificación del Pedido (requerido uno de los siguientes)

  • pedido String Número de pedido generado por AVECRM o número de pedido externo
  • numeroPedidoExterno String Número de pedido externo generado desde una tienda, ERP, POS, etc.
  • integrationOrderId String ID de integración del pedido

Datos del Agente

  • idAgente Number ID del agente. Requerido cuando se usa numeroPedidoExterno o integrationOrderId

Datos del Cliente (requeridos)

  • clientContact* String Nombre del destinatario
  • clientId* String Identificación del destinatario
  • clientDir* String Dirección del destinatario
  • clientTel* String Teléfono del destinatario

Datos Adicionales (opcionales)

  • clientEmail String Correo electrónico del destinatario
  • obs String Observaciones para el envío (dice contener). Si no se envía, se generará automáticamente con los productos del pedido
  • notas String Notas internas del pedido
  • grandTotalValue Number Valor total del pedido. Debe ser numérico
  • valorEnvioValue Number Valor del envío. Debe ser numérico
  • seloperadorEnvio Number ID del operador de envío a utilizar
  • cadenaEnvio Object Datos de la cadena de envío
  • ilaConfirmed String Indica 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 String Estado de la respuesta: "ok"
  • messages Array Object -> [{}]
    • data String Mensaje asociado al proceso solicitado
  • pedido String Número de pedido confirmado
  • transportadora String Operador logístico asociado al número de guía generado
  • flete Number Valor del flete de transporte
  • variable Number Costo del pedido declarado
  • costorecaudo Number Costo del pedido a recaudar
  • totalflete Number Total de transporte
  • costo_proveedor Number Valor total del costo a dispersar o pagar al proveedor
  • costo_dp Number Valor total a dispersar o pagar al ecommerce o vendedor
  • response Object Objeto con la respuesta del servicio de generación de guía
  • log String Log 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

  1. Validación de campos requeridos: Se verifica que estén presentes los campos obligatorios según la forma de identificación del pedido
  2. Validación de valores numéricos: grandTotalValue y valorEnvioValue deben ser numéricos
  3. Búsqueda del pedido: Se busca por order_consec, numeroPedidoExterno o integrationOrderId
  4. Validación de agente: Si el pedido tiene agente pero falta el nombre, se actualiza automáticamente
  5. Validación de bodega: Si existe bodegaName pero falta bodegaContact, se actualiza automáticamente
  6. Estado del pedido: Debe estar en preconfirmado, en proceso, solicitada o pagado desde canal de venta
  7. Guía existente: No debe tener una guía activa asociada
  8. Operador de envío: Debe tener un operador asignado
  9. Bodega: Debe tener una bodega y su nombre configurados
  10. Agente: Debe tener un agente y su nombre asignados
  11. Novedad: No debe estar en estado de novedad
  12. Recaudo mínimo: Si tiene recaudo, debe ser mayor o igual a 5000
  13. 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

  1. Actualizar datos del cliente en la tabla clientes
  2. 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
  3. Cambiar estado del pedido:
    • Si ilaConfirmed = "1": estado 1111 (Preconfirmado)
    • Si no: estado 1 (Confirmada)
  4. Registrar en log: Se crea un registro en order_status_log
  5. Si cambió el operador: Se registra en order_log
  6. 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
  7. 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 obs se auto-genera con los productos si no se proporciona
  • Los valores de grandTotalValue y valorEnvioValue se 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