Get started
API Endpoint URL Prod: https://services.sinigual.com/api/ecommerce URL DEV: https://dev.services.sinigual.com/api/ecommerce
La API de e-commerce de siniwin da acceso a los productos y a los pedidos de la plataforma de Siniwin para su utilización en e-commerce.
Para utilizar esta API es necesario poseer de los datos de autenticación y firma
Autenticación
# Ejemplos.
{
"success": 1,
"error": 0,
"data": [
{
"Ref": "A40031K230020",
"company_id": 596,
"Familia": "RE",
"PedMinimo": "00001",
"CantMaxDto": null,
"Denominacion": "CONTRAPESA MANILLAR NEGRO MATE KEEWAY",
"Coste": null,
"Stock": null,
"ValorStock": null,
"Pvp": "000000643",
"ControlStock": "S",
"StockMinimo": null,
"StockMaximo": null,
"TiArticulo": "R",
"Observaciones": null,
"PesoIntrastat1p": null,
"RefSusti1": null,
"RefSusti2": null,
"RefSusti3": null,
"PorcIva": "2100",
"DtoVta": null,
"FeUltEntrada": null,
"ClaseProd": "VA",
"Marca": null,
"CodEAN13": null
}
}
Para poder realizar cualquier petición a la API es necesario poseer:
- Bearer token
- Id de usuario
- Secret Token
Todos ellos deben ser facilitados por el cliente de Siniwin.
Los dos últimos seran necesarios para crear la firma que tendrá que pasarse a la petición en cada llamada.
Solicitudes
# Ejemplo de firma en PHP
$Date = Carbon::now()->format('Ymd');
$userId = 'USER_ID';
$secretToken = 'SECRET_TOKEN';
$toHash = $userId.$secretToken.$Date;
$signature = hash('sha512',$toHash);
Todas las solicitudes tienen como campo obligatorio la firma de la petición que se envía como parámetro tanto en GET como en POST,y el token bearer que se localizara en el Header.
La firma se genera con la encriptación sha512 de la siguiente manera (en pseudoCódigo):
sha512(User+SecretToken+Date)
El formato de la fecha es: Ymd (ej: 20230506)
Respuestas
# Ejemplo de peticion correcta
{
"success": 1,
"error": 0,
"data": [
{
DATA
}
]
}
# Ejemplo de error
{
"success": 0,
"error": {
"code": 100,
"description": "La firma no es correcta"
},
"data": 0
}
La respuesta a la solicitud es un array con la siguiente información:
Campo | Tipo | Descripción |
---|---|---|
success | Boolean | true si la petición se ha realizado correctamente. false si se ha generado un error |
error | Array | en caso de error se informa del numero de error asi como la descripción |
data | Array | en caso de no haber error se retorna un array con los datos de la petición |
Productos
# Ejemplo de petición de productos en PHP
$curl = curl_init();
$bearer = 'BEARER';
$url = 'https://services.sinigual.com/api/ecommerce/products';
$signature = '?signature=SIGNATURE';
$pagination = '&paginate=1000';
$urlCall = $url.$signature.$pagination;
curl_setopt_array($curl, array(
CURLOPT_URL => $urlCall,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer '.$bearer
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Solicitud para traer el listado de productos con todos los detalles.
Para poder realizar esta solicitud se debe llamar al siguiente end point con GET:
https://services.sinigual.com/api/ecommerce/products
Esta llamada acepta los siguientes filtrados:
QUERY PARAMETERS
Campo | Tipo | Obligatorio | Descripción |
---|---|---|---|
signature | String | Si | Firma de la petición |
ref | Array | No | Referencia producto |
store | string | Si (si se define referencia) | Almacén producto |
paginate | Integer | No | Número de elementos por página |
page | Integer | No | Número de la página, en el caso de haber paginado los resultados |
Productos Respuesta
# Ejemplo de respuesta simple
{
"success": 1,
"error": 0,
"data": [
{
"ref": "18517923528",
"store": "A",
"company": 1,
"family": "RB",
"minOrder": "00001",
"qtMaxDiscount": null,
"denomination": "BMW MOTORRAD L",
"cost": "000008713",
"Stock": "000000300",
"stockValue": "000000034852",
"pvp": "000004760",
"ControlStock": "S",
"stockMin": null,
"stockMax": null,
"typeArticle": "R",
"observations": null,
"weight": null,
"refReplace1": "18517923528",
"refReplace2": "18517923529",
"refReplace3": "18517923526",
"percTax": "2100",
"sellDiscount": null,
"dateLastInput": "211006",
"prodClass": "28",
"brand": "brand X",
"codEAN13": null
}
]
}
#Ejemplo de respuesta paginada
{
"success": 1,
"error": 0,
"data": {
"current_page": 2,
"data": [
{
"ref": "18517923528",
"store": "A",
"company": 1,
"family": "RB",
"minOrder": "00001",
"qtMaxDiscount": null,
"denomination": "BMW MOTORRAD L",
"cost": "000008713",
"Stock": "000000300",
"stockValue": "000000034852",
"pvp": "000004760",
"ControlStock": "S",
"stockMin": null,
"stockMax": null,
"typeArticle": "R",
"observations": null,
"weight": null,
"refReplace1": "18517923528",
"refReplace2": "18517923529",
"refReplace3": "18517923526",
"percTax": "2100",
"sellDiscount": null,
"dateLastInput": "211006",
"prodClass": "28",
"brand": "brand X",
"codEAN13": null
}
],
"first_page_url": "https://services.sinigual.com/api/ecommerce/products?page=1",
"from": 2,
"last_page": 4,
"last_page_url": "https://services.sinigual.com/api/ecommerce/products?page=4",
"links": [
{
"url": "https://services.sinigual.com/api/ecommerce/products?page=1",
"label": "« Previous",
"active": false
},
{
"url": "https://services.sinigual.com/api/ecommerce/products?page=1",
"label": "1",
"active": false
},
{
"url": "https://services.sinigual.com/api/ecommerce/products?page=2",
"label": "2",
"active": true
},
{
"url": "https://services.sinigual.com/api/ecommerce/products?page=3",
"label": "3",
"active": false
},
{
"url": "https://services.sinigual.com/api/ecommerce/products?page=4",
"label": "4",
"active": false
},
{
"url": "https://services.sinigual.com/api/ecommerce/products?page=3",
"label": "Next »",
"active": false
}
],
"next_page_url": "https://services.sinigual.com/api/ecommerce/products?page=3",
"path": "https://services.sinigual.com/api/ecommerce/products",
"per_page": 1,
"prev_page_url": "https://services.sinigual.com/api/ecommerce/products?page=1",
"to": 2,
"total": 4
}
}
La respuesta de la petición de productos contiene los siguientes datos:
Campo | Tipo | Descripción |
---|---|---|
ref | String | Referencia del articulo |
store | String | Almacén |
company | Integer | Id de la empresa |
family | String | Familia |
minOrder | String | Pedido Mínimo |
maxOrder | String | cantidad maxima para pedido |
Denomination | String | Denominación del articulo |
cost | Float | Precio de coste del articulo |
stock | Float | Stock actual |
stockValue | Float | Valor del Stock |
pvp | Float | Precio de venta al publico |
stockControl | String | Control de Stock |
stockMin | String | Stock mínimo |
stockMax | String | Stock Máximo |
prodType | String | Tipo de articulo |
observations | String | Observaciones |
weight | String | Peso unitario en Kg |
refReplace1 | String | Referencia de sustitución 1 |
refReplace2 | String | Referencia de sustitución 2 |
refReplace3 | String | Referencia de sustitución 3 |
percTax | Float | Porcentaje de IVA |
sellDiscount | Float | Descuento de venta |
dateLastInput | String | Fecha de ultima entrada |
prodClass | String | Clase del articulo |
brand | String | Marca |
CodEAN13 | String | Código EAN |
Stock
# Ejemplo de petición de stock en PHP
$curl = curl_init();
$bearer = 'BEARER';
$url = 'https://services.sinigual.com/api/stock';
$signature = '?signature=SIGNATURE';
$referencia = '&Ref=XXX';
$almacen = '&Almacen=Y';
$urlCall = $url.$signature.$referencia.$almacen;
curl_setopt_array($curl, array(
CURLOPT_URL => $urlCall,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer '.$bearer
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Esta petición nos informa del stock y el pvp actual de un producto.
Esta petición se realiza solamente sobre un solo producto
https://services.sinigual.com/api/ecommerce/stock
QUERY PARAMETERS
Campo | Tipo | Obligatorio | Descripción |
---|---|---|---|
signature | String | Si | Firma de la petición |
ref | Integer | Si | Referencia del producto |
store | String | Si | Almacén del producto |
Stock Respuesta
# Ejemplo de respuesta
{
"success": 1,
"error": 0,
"data": [
{
"ref": "488-88-99",
"store": "A",
"stock": 1000,
"pvp": 150
}
]
}
La respuesta de la petición de pedidos contiene los siguientes datos:
Campo | Tipo | Descripción |
---|---|---|
ref | Integer | Referencia del producto |
store | String | Almacén del producto |
stock | float | Stock |
pvp | float | Precio de venta al publico |
Pedidos
# Ejemplo de petición de pedidos en PHP
$curl = curl_init();
$bearer = 'BEARER';
$url = 'https://services.sinigual.com/api/ecommerce/orders';
$signature = '?signature=SIGNATURE';
$pagination = '&paginate=1000';
$urlCall = $url.$signature.$pagination;
curl_setopt_array($curl, array(
CURLOPT_URL => $urlCall,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer '.$bearer
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Solicitud para traer el listado de pedidos con todos los detalles.
Para poder realizar esta solicitud se debe llamar al siguiente end point con GET:
https://services.sinigual.com/api/ecommerce/orders
Esta llamada acepta los siguientes filtrados:
QUERY PARAMETERS
Campo | Tipo | Obligatorio | Descripción |
---|---|---|---|
signature | String | Si | Firma de la petición |
orderId | Array | No | Array de ids de pedidos |
dateStart | Date (dd/mm/yyy) | No | Fecha inicio búsqueda por fecha de pedido |
dateEnd | Date (dd/mm/yyy) | No | Fecha final búsqueda por fecha de pedido |
paginate | Integer | No | Número de elementos por página |
page | Integer | No | Número de la página, en el caso de haber paginado los resultados |
Pedidos Respuesta
# Ejemplo de respuesta
{
"success": 1,
"error": 0,
"data": [
{
"id": 1,
"orderId": 1,
"nameInvoice": "Name",
"nameShipping": "Name",
"surnameInvoice": "Surname",
"surnameShipping": "Surname",
"streetInvoice": "Street",
"streetShipping": "Street",
"cityInvoice": "City",
"cityShipping": "City",
"provInvoice": "Prov",
"provShipping": "Prov",
"zipInvoice": "08000",
"zipShipping": "0800",
"countryInvoice": "Spain",
"countryShipping": "Spain",
"dniInvoice": "0000000L",
"dniShipping": "0000000L",
"disCoupon": null,
"discShipping": null,
"disDesc": null,
"emailInvoice": "email@email.com",
"emailShipping": "email@email.com",
"phoneInvoice": "932012235",
"phoneShipping": "98545254",
"guest": null,
"idStore": "1",
"orderDate": "03/07/2023",
"orderQtyDisc": null,
"orderShippingCost": "25",
"refGroup": "1245",
"products": [
{
"orders_id": "1",
"orderId": 1,
"ref": "265.404",
"store": "A",
"prodName": "Name 1",
"prodQty": 2,
"idStore": 596,
"prodPrice": 150,
"discountQty": 0,
"discountPercentage": 0
},
{
"orders_id": "1",
"orderId": 1,
"ref": "265.515",
"store": "B",
"prodName": "Name 2",
"prodQty": 5,
"idStore": 596,
"prodPrice": 15,
"discountQty": 0,
"discountPercentage": 0
}
]
}
]
}
La respuesta de la petición de pedidos contiene los siguientes datos:
Campo | Tipo | Descripción |
---|---|---|
orderId | String | Numero de orden del ecommerce |
nameInvoice | String | Nombre del cliente de facturación |
nameShipping | String | Nombre del cliente de envío |
surnameInvoice | String | Apellido del cliente de facturación |
surnameShipping | String | Apellido del cliente de envío |
streetInvoice | String | Calle del cliente de facturación |
streetShipping | String | Calle del cliente de envío |
cityInvoice | String | Ciudad del cliente de facturación |
cityShipping | String | Ciudad del cliente de envío |
provInvoice | String | Provincia del cliente de facturación |
provShipping | String | Provincia del cliente de envío |
zipInvoice | String | Código postal del cliente de facturación |
zipShipping | String | Código postal del cliente de envío |
countryInvoice | String | País del cliente de facturación |
countryShipping | String | País del cliente de envío |
dniInvoice | String | DNI del cliente de facturación |
dniShipping | String | DNI del cliente de envío |
disCoupon | String | Cupón de descuento |
discShipping | String | Descuento del envío |
disDesc | String | Descripción del descuento |
emailInvoice | String | Email del cliente de facturación |
emailShipping | String | Email del cliente de envío |
phoneInvoice | String | Teléfono del cliente de facturación |
phoneShipping | String | Teléfono del cliente de envío |
guest | String | Invitado |
orderDate | String | Fecha del pedido |
orderQtyDisc | String | Cantidad del descuento |
orderShippingCost | String | Coste del envío |
refGroup | String | Referencia del grupo |
products | Array | Array de artículos del pedido |
Datos Products Array
Campo | Tipo | Descripción |
---|---|---|
ref | String | Referencia del articulo |
prodName | String | Nombre del articulo |
prodQty | float | Cantidad |
store | Integer | Almacén |
prodPrice | Float | Precio |
discountQty | Float | Descuento |
discountPercentage | Float | porcentaje de descuento |
Enviar pedido
# Ejemplo de envío de pedido en PHP
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://ecommerce.local/api/ecommerce/postorder',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"signature": "SIGNATURE",
"order": [
{
"orderId": 11,
"nameShipping": "Name",
"surnameShipping": "Surname",
"streetShipping": "Street",
"cityShipping": "City",
"provShipping": "Prov",
"zipShipping": "0800",
"countryShipping": "Spain",
"dniShipping": "0000000L",
"emailShipping": "email@email.com",
"orderDate": "03/07/2023",
"orderShippingCost": "0",
"products": [
{
"orders_id": "1",
"orderId": 1,
"ref": "265.515",
"store": "B",
"prodName": "Name 2",
"prodQty": 5,
"idStore": 596,
"prodPrice": 15,
"discountQty": 0,
"discountPercentage": 0
},
{
"ref": "265.404",
"store": "A",
"prodName": "Name 1",
"prodQty": 2,
"prodPrice": 150
}
]
}
]
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Bearer BEARER_TOKEN'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
Para poder insertar un pedido se debe enviar en POST dentro de la key order, lo siguiente:
https://services.sinigual.com/api/ecommerce/postorder
PARAMETERS INSIDE ORDER
Campo | Tipo | Obligatorio | Descripción |
---|---|---|---|
orderId | String | Si | Numero de orden del ecommerce |
nameInvoice | String | No | Nombre del cliente de facturación |
nameShipping | String | Si | Nombre del cliente de envío |
surnameInvoice | String | No | Apellido del cliente de facturación |
surnameShipping | String | Si | Apellido del cliente de envío |
streetInvoice | String | No | Calle del cliente de facturación |
streetShipping | String | Si | Calle del cliente de envío |
cityInvoice | String | No | Ciudad del cliente de facturación |
cityShipping | String | Si | Ciudad del cliente de envío |
provInvoice | String | No | Provincia del cliente de facturación |
provShipping | String | Si | Provincia del cliente de envío |
zipInvoice | String | No | Código postal del cliente de facturación |
zipShipping | String | Si | Código postal del cliente de envío |
countryInvoice | String | No | País del cliente de facturación |
countryShipping | String | Si | País del cliente de envío |
dniInvoice | String | No | DNI del cliente de envió |
dniShipping | String | No | DNI del cliente de facturación |
disCoupon | String | No | Cupón descuento |
discShipping | String | No | Descuento en el envío |
disDesc | String | No | Descripción del descuento |
emailInvoice | String | No | Email del cliente de facturación |
emailShipping | String | Si | Email del cliente de envío |
phoneInvoice | String | No | Teléfono del cliente de facturación |
phoneShipping | String | No | Teléfono del cliente de envío |
guest | String | No | Invitado |
orderDate | String | Si | Fecha del pedido |
orderQtyDisc | String | No | Cantidad del descuento |
orderShippingCost | String | Si | Coste del envío |
refGroup | String | No | Referencia del grupo |
products | Array | Si | Array de artículos del pedido |
Datos Products Array
Campo | Tipo | Obligatorio | Descripción |
---|---|---|---|
ref | String | Si | Referencia del articulo |
prodName | String | Si | Nombre del articulo |
prodQty | float | Si | Cantidad |
prodPrice | Float | Si | Precio |
discountQty | Float | No | Descuento |
discountPercentage | Float | No | porcentaje de descuento |
store | String | Si | Almacén |