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
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());
}
}
}