Órdenes de compra
Las órdenes de compra son aquellas con las que es posible integrar los servicios de comisiones de venta. Utiliza los llamados de API de Gestión de Productos para gestionar tus órdenes con Ocular.
En esta sección está el detalle para llamar a los servicios de creación y actualización
de una orden de compra, este módulo es un complemento del widget de video atención
de Ocular Solution, el cual se configura para entregar de forma automática
un input en sus formularios de actualización de carrito en el momento de una videoatención:
<input type="hidden" name="ocular_session_id" value="1536">
El objetivo de este input adicional es trackear la venta del agente, entregando el parámetro
identificador de la video atención ocular_session_id.
Crear o actualizar una orden
POST /sessions/OCULAR_SESSION_ID/orderCrea o actualiza una orden de compra.
Endpoint
https://api.ocularsolution.com/api/product-management/v1/sessions/{ocular_session_id}/order
Parámetros
external_id
STRING
OPCIONAL
Identificador o código de la orden de compra.
Valores de ejemplo: 1015, ORDER-8454
items
OBJECT[]
OBLIGATORIO
Listado de los productos pertenecientes a la orden de compra.
Mostrar propiedades
external_idSTRING OPCIONALIdentificador o código de un producto en orden de compra.
Valores de ejemplo: 3105, SKU-845-G54
imageSTRING OPCIONALUrl de la imagen principal del producto.
Valores de ejemplo: https://domain.com/images/products/product/product_image.jpg
nameSTRING OBLIGATORIONombre del producto.
Valores de ejemplo: Crema facial
descriptionTEXT OPCIONALDescripción del producto.
Valores de ejemplo: Este es el detalle de la crema facial
quantityINTEGER OBLIGATORIOCantidad del producto en la orden de compra.
Valores de ejemplo: 1, 5
priceDECIMAL OBLIGATORIOPrecio del producto
Valores de ejemplo: 2990, 39000.00, 0.99
unit_priceBOOLEAN OPCIONALPrecio del producto que se envía corresponde al precio unitario o al precio total.
El precio se calcula de la siguiente forma:
true: precio = price * quantity
false: precio = price
Valores posibles: true, false.
DEFAULT false
currencySTRING OBLIGATORIOMoneda utilizada en la orden de compra.
Valores posibles: CLP, USD, EUR
include_taxBOOLEAN OPCIONALDefine si el precio del producto incluye el impuestos o no.
Valores posibles: true, false
DEFAULT true
discount_typeCHAR OPCIONALDefine si el descuento del producto es un porcentaje o un monto absoluto.
Valores posibles: percent amount
DEFAULT amount
discountDECIMAL OPCIONALDescuento aplicado al producto.
Valores de ejemplo: 1990.00 (amount) 5.00 (percent = 5%) 30.00 (percent = 30%) 25.50 (percent = 25.5%)
DEFAULT 0.00
variantsOBJECT[] OPCIONALVariantes del producto en la orden de compra.
DEFAULT []
Mostrar propiedades
nameSTRING OBLIGATORIONombre de la variante del producto.
Valores de ejemplo: Talla, Medidas, Volumen
valueSTRING OBLIGATORIOValor de la variante del producto.
Valores de ejemplo: Negro, XL, 30cm x 30cm, 30ml
categoriesARRAY[] OPCIONALCategorias del producto.
DEFAULT []
Mostrar propiedades
categoriesARRAY OPCIONALArreglo de las categorias a las cuales puede pertenecer el producto.
Valores de ejemplo: [Atención Online, Bussines]
Ejemplo de Parámetros
{
external_id: 'ORDER-8454',
items: [
{
external_id: 'SKU-845-G54',
image: 'https://domain.com/images/products/product/product_image.jpg',
name: 'Nombre del producto', // Obligatorio
description: 'Descripción del producto',
quantity: 2, // Obligatorio
include_tax: true,
unit_price: false,
discount_type: 'amount',
discount: 2990.00,
currency: 'CLP', // Obligatorio
price: 10000.00, // Obligatorio
variants: [
{
name: 'Color', // Obligatorio
value: 'Negro' // Obligatorio
},
{
name: 'Talla', // Obligatorio
value: 'XL' // Obligatorio
},
{
name: 'Medidas', // Obligatorio
value: '30cm x 30cm' // Obligatorio
}
],
categories: ["Atención Online", "Bussines"] // Opcional
},
]
}
Respuestas del servicio
Respuesta exitosa
{
statusCode: 0,
message: 'Success'
}
Respuesta fallida
{
statusCode: 1,
message: 'Error 500 - Internal server error'
}
Respuesta con errores de validación
{
statusCode: 2,
message: 'Field validation error',
detail: {
field_one: [
'SessionOrderControllerValidator: field_one is required.',
'SessionOrderControllerValidator: field_one must be an integer.',
...
],
field_two: [
'SessionOrderControllerValidator: field_two is required.',
'SessionOrderControllerValidator: field_two must be a string.',
'SessionOrderControllerValidator: field_two exceeds the maximum number of characters :max.',
...
],
...
}
}
Actualizar el estado de una orden
PUT /sessions/OCULAR_SESSION_ID/orderCrea o actualiza una orden de compra.
Endpoint
https://api.ocularsolution.com/api/product-management/v1/sessions/{ocular_session_id}/order
Parámetros
external_id
STRING
OPCIONAL
Identificador o código de la orden de compra.
Valores de ejemplo: ORDER-8454
payment_status
INTEGER
OBLIGATORIO
Estado del pago de la orden de compra.
Valores de ejemplo: 0 (success), 1 (declined)
Ejemplo de parámetros
{
external_id: 'SKU-845-G54',
payment_status: 0
}
Respuestas del servicio
Respuesta exitosa
{
statusCode: 0,
message: 'Success'
}
Respuesta fallida
{
statusCode: 1,
message: 'Error 500 - Internal server error'
}
Respuesta con errores de validación
{
statusCode: 2,
message: 'Field validation error',
detail: {
field_one: [
'SessionOrderControllerValidator: field_one is required.',
'SessionOrderControllerValidator: field_one must be an integer.',
...
],
field_two: [
'SessionOrderControllerValidator: field_two is required.',
'SessionOrderControllerValidator: field_two must be a string.',
...
],
...
}
}
Ver detalles de la orden de compra
GET /sessions/OCULAR_SESSION_ID/orderVer detalles de orden de compra de la sessiòn.
Endpoint
https://api.ocularsolution.com/api/product-management/v1/sessions/{ocular_session_id}/order
Parámetros
ocular_session_id
INTEGER
OBLIGATORIO
Detalles de la orden de compra de la sessiòn.
El parametro se debe enviar en la url.
Valores de ejemplo: 1
Respuestas del servicio
Respuesta exitosa
{
statusCode: 0,
message: 'Sucess',
sessionOrder: {
id: 4,
session_id: 1,
external_id: 'ORDER-8454',
session_order_state_id: 2,
session_order_state: {
id: 2,
name: 'Pagada',
description: null
},
session_order_items: [
{
id: 7,
session_order_id: 4,
item_id: 7,
unit_of_measurement_id: 2,
quantity: '2',
unit_price: false,
price: '10000.00',
discount_type: 'amount',
discount: '2990.00',
include_tax: true,
tax_value: '10.0',
currency: 'CLP',
unit_of_measurement: {
id: 2,
name: 'Unidad',
description: null
},
item: {
id: 7,
name: 'Nombre del producto',
image: 'https://domain.com/images/products/product/product_image.jpg',
description: 'Descripción del producto',
stock: 1,
item_state_id: 2,
organization_id: 1,
brand_id: null,
external_id: 'SKU-845-G54',
item_state: {
id: 2,
name: 'Sin stock',
description: null
},
item_attrs: [
{
id: 19,
item_id: 7,
name: 'Color',
value: 'Negro'
},
{
id: 20,
item_id: 7,
name: 'Talla',
value: 'XL'
},
{
id: 21,
item_id: 7,
name: 'Medidas',
value: '30cm x 30cm'
}
],
brand: null
}
}
]
}
}
}
Respuesta fallida
{
statusCode: 1,
message: 'Error 500 - Internal server error'
sessionOrder: null
}
Ejemplo actualizar una orden de compra
- Node.js
import axios from 'axios'
const baseURL: 'https://api.ocularsolution.com/api/product-management/v1'
const ocularSessionId = 1654653
const params = {
external_id: 'ORDER-8454',
items: [
{
external_id: 'SKU-845-G54',
image: 'https://domain.com/images/products/product/product_image.jpg',
name: 'Nombre del producto',
description: 'Descripción del producto',
quantity: 2,
include_tax: true,
unit_price: false,
discount_type: 'amount',
discount: 2990.00,
currency: 'CLP',
price: 10000.00,
variants: [
{
name: 'Color',
value: 'Negro'
},
{
name: 'Talla',
value: 'XL'
},
{
name: 'Medidas',
value: '30cm x 30cm'
}
]
},
]
}
axios.post(`${baseURL}/sessions/${ocularSessionId}/order`, params)
.then(response => {
console.log(response)
})
.catch(error => {
console.log(error)
})