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