Configuración del cliente REST

El cliente REST es la aplicación .NET que esta instalada en una computadora conectada a internet y que esta continuamente haciendo llamadas al servidor para poder realizar las operaciones requeridad por el servidor.

Puerto Serial Parametro
Encoding UTF8
Web Request http://www.domian.owldesarrollos.com/coin.php
Time out 2000 milliseconds
Content type application/json
Content length Data bytes

Descripción del protocolo

REST es una interfaz entre sistemas que usa HTTP para obtener datos o generar operaciones sobre esos datos en todos los formatos posibles, en este caso se utiliza JSON

Características de REST

● Protocolo cliente/servidor sin estado: cada petición HTTP contiene toda la información necesaria para ejecutarla, lo que permite que ni cliente ni servidor necesiten recordar ningún estado previo para satisfacerla. Aunque esto es así, es necesario tener enlazada una base de datos para poder verificar los estatus y movimientos de la aplicación asi como guardas los metricos necesarios para las diferentes configuraciones (precios, productos, combos, usuarios, reportec, etc).

● Las operaciones más importantes relacionadas con los datos en cualquier sistema REST y la especificación HTTP son cuatro: POST (crear), GET (leer y consultar), PUT (editar) y DELETE (eliminar).

● Los objetos en REST siempre se manipulan a partir de la URI. Es la URI y ningún otro elemento el identificador único de cada recurso de ese sistema REST. La URI nos facilita acceder a la información para su modificación o borrado, o, por ejemplo, para compartir su ubicación exacta con terceros.

Screenshot

A continuación se describen las operaciones posibles en esta API de control de hardware para sistemas vendig machine, estas operaciones estan basadas en una URI (Uniform Resource Identifier O url).

Glosario JSON

JSON (JavaScript Object Notation - Notación de Objetos de JavaScript) es un formato ligero de intercambio de datos. Leerlo y escribirlo es simple para humanos, mientras que para las máquinas es simple interpretarlo y generarlo

  1. data_key: valor único que se le asigna a cada equipo para identificarse con el servidor.

  2. handler: valor que le indica al servidor que operacion realizar, por ejemplo si es "lisen_sale" el servidor mandara el estatus correspondiente.

  3. ubicacion: indica el destino del dinero ingresado, si es una moneda, se puede ubicar en un tubo o en la bolsa de ganancias, si es un billete, se puede ubicar en el stacker, pre stacker o payout.

  4. no: indica el número de identificacion de operación a realizar para la aplicacion .NET, por ejemplo el número 109 se usa para enviar la instrucción de cambio a los dispositivos.

  5. WS: WEB SERVICE, pagina web almacenada en un servidor que tiene la programación requerida para la generación y procesamiento de la interfaz de usuario y control de dispositivos de cobro.

Tabla de no. utilizados por la aplicación .NET

No Operación
100 Inicio de nueva operación, el usuario presiono el botón pagar en efectivo para Kiosco
101 Sin movimientos disponibles o estatus del movimiento actualizado por id
102 Seguir cobrando, no se a cubierto el monto a pagar en efectivo
*103 *Inicio de cobro con tarjeta de credito
*104 *Estatus del cobro con tarjeta "INSERT_CARD", "PRODUCT_OUT",
105 Registro para puerta abierta o cerrada
*106 *Inicio de cobro con efectivo para Vending
*107 *Espera mientras se cubre el importe en la Vending
*108 *Dispensa el producto y espera el status
109 Instrucción de disposición de efectivo o estatus del movimiento que ya esta pagado
110 Leer tubos del monedero

Tabla de handlers utilizados por la aplicación .NET

No Operación
listen_sale permite obtener el estatus del servidor
insert_money indica cuando se a insertado efectivo
puerta_abierta indica cuando la puerta del gabinete esta abierta
retiro indica el status final de la operación retiro de efectivo de los dispositivos
leer envía al servidor la lectura de los sensores acusticos en el monedero MEICF7000
cashless hanlder que ocupa la aplicación .NET para notificar del estatus del lector de tarjeta NAYAX

Operación A

Para poder saber los diferentes estatus del servidor es necesario que la aplicación de escritorio este generando llamadas al WS entre 2 o 3 segundos, este medio permite saber que operaciones son requeridas por el WS, a traves de de este handler "listen_sale" la aplicación .NET puede verse afectada por el WS.

JSON enviado por la aplicación .NET

{
    "data_key":"1234",
    "handler":"listen_sale",
    "movimiento":"0"
}

JSON de respuesta por parte del WS

{
    "no":"101",
    "type":"ERROR",
    "message":"SIN MOVIMIENTOS DISPONIBLES"
}

Screenshot

Operación B

Proceso de compra con cambio, se paga con un billete de 50 y se devuelve cambio con billetes y monedas, en esta secuencia de compra se puede apreciar un proceso de compra completo donde todas las condicones se llevaron con normalidad y ninguna condición extraordinaria se presento. Es interesante apreciar el JSON de cambio ya que a traves de ese arreglo la aplicación WEB puede indicar la disposición de efectivo.

{
    "no":"109",
    "type":"SUCCESS",
    "estatus":"COBRAR",
    "message":
    {
        "0":
        {
            "kiosko":"1234",
            "usuario":"0",
            "estatus":"PAGADO",
            "movimiento":"29362"
        },
        "B1000":0,
        "B500":0,
        "B200":0,
        "B100":0,
        "B50":0,
        "B20":1,
        "M10":0,
        "M5":0,
        "M2":1,
        "M1":3,
        "M50C":0,
        "alert":false
    }
}

Screenshot

Operación C

Se muestra el proceso de pago exacto, en este operación el WS no envía el array de cambio, ya que se el usuario cubrio el monto exacto.

{
    "no":"109",
    "type":"SUCCESS",
    "estatus":"COBRAR",
    "message":0
}

Screenshot

Operación D

En esta operación ejemplo se muestra el proceso y la indicación de la aplicación de escritorio .NET para enviar el estatus del monto dispensado por los dispositivos.

{
    "data_key":"1234",  
    "handler":"retiro",
    "movimiento":"29351",
    "efectivo":
    {
        "1":"1","2":"2","5":"0","10":"0",
        "20":"0","50":"0","100":"0","200":"0","500":"0","1000":"0",
        "50c":"0","50cn":"0"
    }
}

Screenshot

Operación E

Esta operación muestra la cancelación de una compra con credito presente en el sistema, esta operación se plantea para realizar la devolución del credito insertado y en caso de ser cancelado acer la devolución del monto existente.

JSON de respuesta por parte del WS

{
    "no":102,
    "type":"WARNING",
    "message":"CANCELADO",
    "extra":"CANCELADO"
}

JSON que se puediera aplicar

{
    "no":"109",
    "type":"SUCCESS",
    "estatus":"CANCELACION",
    "message":
    {
        "0":
        {
            "kiosko":"1234",
            "usuario":"0",
            "estatus":"DEVOLUCION",
            "movimiento":"29362"
        },
        "B1000":0,
        "B500":0,
        "B200":0,
        "B100":0,
        "B50":0,
        "B20":1,
        "M10":0,
        "M5":0,
        "M2":1,
        "M1":3,
        "M50C":0,
        "alert":false
    }
}

Actualemente si el usuario a insertado credito y en la interfaz de usuario existe un botón de cancelación y esté es presionado, ese credito es omitido por el sistema y se cancela dicha operación, como a continuación se muestra.

Proceso actual a la fecha 21 Junio de 2019

Screenshot

Operación F

En esta operación se aprecia la cancelación sin un credito existente, en este caso este flujo no causa conflicto con el usuario ya que al no haber credito detectado la cancelación procede sin mayor relevancia.

Screenshot

Operación G

En esta operación se analiza el caso en el cual el cambio no es suficiente.

Screenshot

Operación H

Screenshot

Operación I

Screenshot

Operación J

Screenshot

Operación K

Screenshot

Operación L

Screenshot

Operación M

Screenshot

Ejemplo de implementación

A continuación se muestra secciones de codigo en lenguage Basic y C#, la finalidad de esta documentación es proporcionar una guia en estos lenguages para poder implementar el protocolo de comunicación,

A continuación se describen algunos metodos y funciones en Visual Basic y C#

VB Setting port

C# Setting port