WinnerPOS API

WinnerPOS API es la forma de comunicar e integrar el software WinnerPOS con aplicaciones externas.
Estos “webhooks” están a disposición de todos los clientes que tengan contratado el servicio en la Nube.
Para que un cliente pueda comenzar a utilizarlos, debe pasar por un proceso de pruebas que validan que está en condiciones de utilizar correctamente los servicios ofrecidos.
Para consultas más detalladas contáctese a nuestro chat de soporte.

Chat en Línea »

Términos y Condiciones

Antes de iniciar cualquier actividad de integración y desarrollo para el consumo de las APIs de WinnerPOS, es importante que el cliente integrador tenga pleno conocimiento de los términos y condiciones del servicio.

WinnerPOS pone a disposición de sus clientes las herramientas necesarias para que puedan desarrollar software de integración con el sistema WinnerPOS, bajo las condiciones establecidas en este documento.

La carga masiva de información en las bases de datos de WinnerPOS deberá ser objeto de verificación por parte del cliente integrador, a fin de constatar que los datos se encuentren correctamente registrados en el sistema. La responsabilidad de realizar dicha verificación recae exclusivamente en el usuario de las APIs y en el cliente, quienes deberán proceder a la revisión exhaustiva de los datos tras cada carga efectuada.

WinnerPOS e Innovaplus declinan expresamente toda responsabilidad derivada del manejo de la información que el cliente manipule, ya sea de manera masiva o individual, y no asumen responsabilidad alguna por los datos ingresados a través del software de escritorio o mediante software propio o de terceros.

El cliente reconoce y asume íntegramente la responsabilidad por cualquier daño o perjuicio que pudiera sufrir como consecuencia del uso de estas herramientas, incluyendo fallas del software WinnerPOS o sus librerías, errores en los datos o cualquier otro motivo que afecte la integridad de la información.

El cliente exime de toda responsabilidad a WinnerPOS e Innovaplus, declarando y aceptando que es su obligación revisar y verificar los procesos luego de cada transacción de información, ya sea ejecutada en forma masiva o individual.

El uso de estas herramientas por parte del cliente implica su aceptación tácita y expresa de los presentes términos y condiciones, obligándose a su cumplimiento en todo momento.

Recomendaciones

Si es primera vez que usted está integrando el software, le recomendamos hacer el proceso de testeo por etapas.

1) Etapa Inicial:
Probar 1 o 2 artículos.
Esta etapa es para verificar que el código desarrollado por el integrador está funcionando y hace lo que tiene que hacer.

2) Condiciones de borde:
Probar set limitado 1 a 10 artículos.
Esta etapa es para comprobar que la información en sus distintas variantes está llegando correctamente a la nube

Probar con artículos que tengan condiciones diferentes entre si
Por ejemplo:
Artículos Pesables
No Pesables
Cigarrillos
Licores Con Impuestos Específicos
Etc.
3) Marcha Blanca:
Probar set limitado 1 a 10 artículos en 1 Sola Sucursal.
Esta etapa es para comprobar que al vender los articulos no se producen diferencias de precios, errores u otas dificultades.
Deben ser artículos de salida frecuente y se recomienda un plazo de pruebas de uso no menor a una semana.

4) Piloto:
Probar maestro completo en 1 Sola Sucursal.
Una vez superadas las otras etapas en forma exitosa, ya se está en condiciones de probar con el maestro completo.
Se recomienda un plazo de pruebas de uso no menor a un mes.

5) Producción:
Una vez superadas las otras etapas en forma exitosa, ya se está en condiciones de implementar la solución en las demás sucursales.


NOTA IMPORTANTE:
Una vez que el sistema esté en modo Producción, se recomienda realizar las cargas masivas durante el horario en el que WinnerPOS ofrece soporte técnico:
Lunes a Viernes, de 09:00 a 18:00
De esta forma podremos asistirlo y ayudarle en caso de que surga cualquier emergencia con la información. (Se sugiere durante las mañanas)

En caso de realizar cargas fuera de este horario, el cliente deberá contar o desarrollar, si aún no las tiene, todas las herramientas necesarias para corregir cualquier dato que pudiera resultar dañado o modificado, especialmente si dicha información afecta el correcto funcionamiento del software o no coincide con la esperada.
Por seguridad, No recomendamos hacer cargas masivas los fines de semana o festivos.


Conceptos Iniciales

WinnerPOS Permite Insertar o Actualizar datos en la Nube del cliente, y tambien tener acceso a la información almacenada para ser descargada a una base de datos local.
Luego el cliente podrá accesar esta información y extraer todo lo necesario para interactuar con sus propios sistemas internos.

El Software WinnerPOS ofrece 2 métodos de interacción:

a) API Rest Para envío de Información
b) Servicio Windows Para Captura de Información

Este Documento está oriendado a personal técnico con Conocimientos en Programación.
En este documento se explica como utilizar los servicios, pero el técnico implementador debe tener conocimientos sobre consumo de API REST, Bases de Datos SQL Server y Monitoreo de Servicios Windows.

Los requisitos previos para implementar la integración de WinnerPOS, es conocer la funcionalidades del Software.
WinnerPOS Tampoco provee Capacitación sobre Consumo de API REST, ni de Lenguajes de Programación.

Todos los emjemplos de este documento están desarrollados para lenguaje C#.
El cliente debe adaptar el código a sus propios lenguajes ya sean php,java,phyton,etc.

Estructura de Endpoint

Todas las URLs serán de la siguiente forma:

http://[IP Servidor Nube]/webhook/wpos

Donde [IP Servidor Nube] Corresponde al número de dirección IP del servidor en el cual su base de datos está instalada:

Autenticación

Para autenticarse debe copiar el Token de Pruebas desde su mismo Sitio Web en el menú:

Configuración » Datos Empresa » Parametros Generales » Test Token Webhook

Este token debe ser pasado a la API en la Seccion Headers de la llamada a la API.
Asumiendo que su token es XXXXXXX un ejemplo en c# sería de la siguiente forma:


NOTA IMPORTANTE:
Dentro del token está incluida la información de la base de datos del cliente y el Rut.
Si usted trabaja con más de una empresa en WinnerPOS, debe usar el token que le corresponde al rut de cada empresa.
NO utilice el mismo token para todas las empresas.



Ejemplo C#

request.Headers.Add("token", "XXXXXXX");

Método

Todas las acciones de envío de datos a la nube WinnerPOS serán con el método POST.

Captura de Artículos

Todas las interacciones desde y hacia la API Rest serán en formato JSON y método POST.
Para cada operación, existe un modelo definido tanto para el consumo del API Rest como para la respuesta.

Ejemplo Request C#

Content Type: aplication/json

{"CapturaArticulos":
[
{"Tipo":"string","SKU":"string","Nombre":"string","PrecioBruto":double,"CostoNeto":double,"CodFamilia":"string",
 "CodBarra":"string","ControlaPeso":smallint,"PLU":bigint,"CodImpto":"string"},


{"Tipo":"string","SKU":"string","Nombre":"string","PrecioBruto":double,"CostoNeto":double,"CodFamilia":"string",
 "CodBarra":"string","ControlaPeso":smallint,"PLU":bigint,"CodImpto":"string"},


{"Tipo":"string","SKU":"string","Nombre":"string","PrecioBruto":double,"CostoNeto":double,"CodFamilia":"string",
 "CodBarra":"string","ControlaPeso":smallint,"PLU":bigint,"CodImpto":"string"},

]
}

Valores Posibles

Tipo:
P=Artículo; G=Gasto; S=Servicio; R=Cigarrilo
SKU:
string [max 20]
Nombre:
string [max 50]
PrecioBruto:
double
CodFamilia:
Debe existir en la tabla de Familias
CodBarra:
string [max 14]
ControlaPeso:
-1=Controla Peso; 0=No Controla Peso
PLU:
Número max 5 dígitos
CodImpto:
0000 [Si no tiene Impto. Específico]
Otros Valores: ILA1; ILA2; ILA3; ILA4; ILA5; ILA6; ILA7; ILA8

NOTA: Los campos en Rojo son campos obligatorios, el resto son opcionales.

Requisitos:

1) Solo deben ser nuevos artículos, los ya existentes serán rechazados.
2) Ningún SKU, PLU, CodBarra debe repetirse entre sí ni tampoco con otros Artículos.
3) Debe tener previamente creadas en la nube, las Familias e Impuestos Específicos.


Ejemplo Response C#

El Modo lo determina el token:
La primera vez que usted hace su integración recibirá un token en modo Test.
Una vez que su sistema pase el set de pruebas, se le otorgará un token en modo Alta.

Modo: Test
Content Type: aplication/json

{"WPOSResult":
{
"Mode": "Test",
"Status": "OK",
"Result": ""
}
}


En caso de Error Existen 2 tipos de Respuesta:

1) Cuando hay un error general:
La variable Result devolverá el mesaje de error.
2) Cuando hay un error en los datos enviados:
La variable Data devolverá un JSON con el detalle de cada Registro.

El proceso de Captura es en Bloque, No Parcial: Se captura Todo o No se captura nada.

Caso 1)

Modo: Test
Content Type: aplication/json

{"WPOSResult":
{
"Mode": "Test",
"Status": "ERROR",
"Result": "Precio Bruto debe ser numérico"
}
}

Caso 2)

Modo: Test
Content Type: aplication/json

{"WPOSResult":
{
"Mode": "Test",
"Status": "ERROR",
"Result": ""
"data":
{
"CapturaArticulos":
[
{
"Resultado": "ERROR:SKU Ya existe",
"Tipo": "P",
"SKU": "124257",
"Nombre": "ANDINA DEL VALLE",
"PrecioBruto": 1290
}
]
}
}
}


NOTA IMPORTANTE:
Para cada registro enviado, el JSON retornado tendrá un registro equivalente con la respuesta.
Debe corregir el JSON y volver a intentar.



Ejemplo Completo de Consumo API Rest C#

En Este ejemplo debe reemplazar XXXXXX por el Token obtenido de la nube.
[IP Servidor] por el número de IP correspondiente al servidor.
No deben existir los SKUs (123,124,125).

using
 System;
using
 System.Net.Http;

namespace
 ConsoleApp1
{
class
 Program
{
static void
 Main(string[] args)
{
//Token obtenido de página de la nube
string
 token ="
XXXXXX
";
//URL del servidor de nase de datos
string
 url = "http://
[IP Servidor]
/webhook/wpos";

//Datos de los SKUs a actualizar
string
 JSONData = "{\"CapturaArticulos\": [";
JSONData += "{\"Tipo\": \"
P
\",\"SKU\": \"
123
\",\"Nombre\": \"
ANDINA MANZANA
\",\"PrecioBruto\":
1290
},";
JSONData += "{\"Tipo\": \"
P
\",\"SKU\": \"
124
\",\"Nombre\": \"
ANDINA FRUTILLA
\",\"PrecioBruto\":
1290
},";
JSONData += "{\"Tipo\": \"
P
\",\"SKU\": \"
125
\",\"Nombre\": \"
ANDINA NARANJA
\",\"PrecioBruto\":
1290
}";
JSONData += "]}";


//Se crea la conexion
HttpClient
 client =
 new
 HttpClient();
StringContent
 content =
 new
 HttpRequestMessage(HttpMethod.Post, url);

//Se asigna el token y los datos
HttpRequestMessage
 request =
 new
 StringContent(JSONData, null, "application/json");
request.Content = content;
request.Headers.Add("Token", token);

//Se consume el API Rest
HttpResponseMessage
 response =
 client.SendAsync(request).Result;

//Se obtiene la respuesta
if (response.IsSuccessStatusCode)
Console
.WriteLine(response.Content.ReadAsStringAsync().Result);
else
Console
.WriteLine(response.ReasonPhrase.ToString());
}
}
}

Listas de Precio

Todas las interacciones desde y hacia la API Rest serán en formato JSON y método POST.

Ejemplo Request C#

Content Type: aplication/json

{"ListaPreciosProducto":
[
{"CodListaPrecios": "string","SKU": "string","Precio": double},
{"CodListaPrecios": "string","SKU": "string","Precio": double},
{"CodListaPrecios": "string","SKU": "string","Precio": double}
]
}

Requisitos:

1) Lista de Precios debe Existir en la Nube
2) Lista de Precios debe ser de Tipo Precio Fijo
3) SKUs deben Existir en la Nube


Ejemplo Response C#

El Modo lo determina el token:
La primera vez que usted hace su integración recibirá un token en modo Test.
Una vez que su sistema pase el set de pruebas, se le otorgará un token en modo Alta.

Modo: Test
Content Type: aplication/json

{"WPOSResult":
{
"Mode": "Test",
"Status": "OK",
"Result": ""
}
}


Ejemplo Completo de Consumo API Rest C#

En Este ejemplo debe reemplazar XXXXXX por el Token obtenido de la nube.
[IP Servidor] por el número de IP correspondiente al servidor.
Además debe existir la lista de precios 0001 y
los SKUs (037000124429,041333016634,070501013304).

using
 System;
using
 System.Net.Http;

namespace
 ConsoleApp1
{
class
 Program
{
static void
 Main(string[] args)
{
//Token obtenido de página de la nube
string
 token ="
XXXXXX
";
//URL del servidor de nase de datos
string
 url = "http://
[IP Servidor]
/webhook/wpos";

//Datos de los SKUs a actualizar
string
 JSONData = "{\"ListaPreciosProducto\": [";
JSONData += "{\"CodListaPrecios\": \"
0001
\",\"SKU\": \"
037000124429
\",\"Precio\":
1990
},";
JSONData += "{\"CodListaPrecios\": \"
0001
\",\"SKU\": \"
041333016634
\",\"Precio\":
900
},";
JSONData += "{\"CodListaPrecios\": \"
0001
\",\"SKU\": \"
070501013304
\",\"Precio\":
3990
}";
JSONData += "]}";


//Se crea la conexion
HttpClient
 client =
 new
 HttpClient();
StringContent
 content =
 new
 HttpRequestMessage(HttpMethod.Post, url);

//Se asigna el token y los datos
HttpRequestMessage
 request =
 new
 StringContent(JSONData, null, "application/json");
request.Content = content;
request.Headers.Add("Token", token);

//Se consume el API Rest
HttpResponseMessage
 response =
 client.SendAsync(request).Result;

//Se obtiene la respuesta
if (response.IsSuccessStatusCode)
Console
.WriteLine(response.Content.ReadAsStringAsync().Result);
else
Console
.WriteLine(response.ReasonPhrase.ToString());
}
}
}