Академический Документы
Профессиональный Документы
Культура Документы
DEPARTAMENTO DE DESARROLLO
DOCUMENTACIN
SDK PUNTO DE PAGO MULTISERVICIOS
V 1.1.1
BOGOT D.C.
SEPTIEMBRE, 2015
TABLA DE CONTENIDO
1. INTRODUCCIN
2. ESPECIFICACIONES Y USO DE LA LIBRERA
2.1. Uso de la librera
2.2. Estructura
3. CONTROL DE PERIFRICOS
3.1. ClassManejoDispositivos
3.2. ClassCerrojosPP
3.3. ClassDispensador
3.4. ClassHuellero
3.5. ClassScanner
3.6. ILectora
3.7. ClassImpresoraKiosko
1. INTRODUCCIN
2.
ESPECIFICACIONES Y REQUERIMIENTOS
2.1.
USO DE LA LIBRERA
Para hacer uso de la librera se deben incluir en el proyecto los archivos que se muestran en la
siguiente tabla. Es importante incluir cada uno de los archivos en la carpeta que contiene el
ejecutable as no estn directamente referenciados en el proyecto, ya que algunas funciones
del SDK realizan el llamado directo a estas libreras.
NOMBRE DEL ARCHIVO
MultiserviciosSDK.dll
ApiIS.dll
ApiIS-dotnet.dll
BnrCtlDotNet40.dll
BnrXmlRpc.dll
CCNET.dll
CRT_285.dll
devcon.exe
DPUruNet.dll
evolib.dll
iomem.dll
ITLib.dll
log4net.dll
log4net.xml
pcsc-sharp.dll
XmlParse.dll
XmlTok.dll
COMPONENTE ASOCIADO
Todos
Scanner
Scanner
Mei BNR
Mei BNR
Bill to Bill
Lectora tipo 5
Control de puertos USB
Huellero
Impresora de Tarjetas
Impresora de Tarjetas
Monedero
Registro de eventos
Registro de eventos
Lectora ACR1222L
Mei BNR
Mei BNR
Luego de haber incluido todos los archivos al proyecto, se debe hacer referencia a la librera
MultiserviciosSDK.dll.
2.2.
ESTRUCTURA
La librera est compuesta por clases que contienen funciones para el control de los perifricos
que componen el punto de pago, siguiendo el paradigma de la programacin orientada a
objetos. Algunas de las clases requieren llamado de funciones asincrnicas y control de
eventos, mientras que otras funciones realizan el control de dispositivos mediante lgica
sincrnica y cdigos de error. En la siguiente tabla se mencionan cada una de las clases que
componen la librera, su lgica asociada y los dispositivos controlados.
NOMBRE DE LA CLASE
ClassCerrojosPP
ClassDispensador
ClassHuellero
ClassImpresoraKiosko
ClassImpresoraTarjetas
ILectora
TIPO DE LGICA
Asincrnica
Asincrnica
Sincrnica
Sincrnica
Sincrnica
Sincrnica / Asincrnica
DISPOSITIVOS ASOCIADOS
Tarjeta de Cerrojos
Dispensador de Tarjetas
Huellero UareU
Impresora de Facturas
Impresora de Tarjetas
Interfaz de control de lectores de
tarjetas inteligentes:
ACR1222L
SL025M
ClassScanner1000
ClassManejoDispositivos
3.
Tipo 5
Sincrnica
Scanner de documentos: Scanner
1000
Sincrnica / Asincrnica Dispositivos de manejo de billetes
y monedas:
Bill to Bill
Mei BNR
Fujitsu
SNR CashCode
Aceptor de billetes V7E
Smart Hopper
CONTROL DE PERIFRICOS
En esta seccin se describirn cada una de las propiedades y mtodos que componen las clases
del SDK, as como la forma correcta de invocarlos dependiendo de los procedimientos que se
requieren realizar dentro del Kiosko.
3.1.
ClassManejoDispositivos
DESCRIPCIN
Librera que realiza el control de los dispositivos de pago, as como los procesos de recepcin y
retiro de efectivo, control de errores, vaciados y recargas.
DISPOSITIVOS SOPORTADOS:
Bill to Bill
Mei BNR
Fujitsu
SNR CashCode
Aceptor de billetes V7E
Smart Hopper
REQUISITOS DE SOFTWARE
MEI BNR: Instalacin del controlador del billetero. BNR Mei Support Tools.
Fujitsu: Instalacin del Service Provider. Plantilla de pesos colombiana.
Smart Hopper: Instalacin del driver ITL device.
USO DE LA CLASE
Para el control de los dispositivos de dinero se debe crear una instancia de la clase
ClassManejoDinero, y se debe suscribir una funcin al evento IDispositivoEvent. Este evento
permite conocer el estado de los dispositivos durante el proceso de recepcin de dinero, as
como el valor recibido y los errores presentes durante la transaccin.
Antes de realizar cualquier operacin sobre los dispositivos se debe realizar el llamado a la
funcin LoadLibraries, la cual carga los ensamblados necesarios para la operacin de los
perifricos soportados por el SDK.
Todos los dispositivos de recepcin del dinero estn adaptados a una interfaz que contiene
todas las funciones bsicas. Para agregar un dispositivo, se utiliza la funcin
AdicionarDispositivo la cual recibe como argumento el tipo de mquina que se desea usar. A
continuacin se muestra la manera de inicializar la clase para un Kiosko que cuenta con un BNR
y un SmartHopper dentro de su lista de perifricos.
ClassManejoDispositivos.LoadLibraries();
}
static void LeerListaErrores()
{
List<ClassErrorDispositivos> listaErrores = dispositivos.ObtenerListaDeErrores();
foreach (ClassErrorDispositivos errorDispositivos in listaErrores)
{
TipoDispositivo device = errorDispositivos.tipoDispositivo;
Console.WriteLine("Dispositivo: " + device.ToString());
}
}
RECEPCIN DE EFECTIVO
La recepcin de efectivo dentro del sistema se inicia con el mtodo Recibir. Existen varios
modos de recepcin que se pueden utilizar dependiendo de la aplicacin que se quiere
desarrollar. Las sobrecargas que pueden ser llamadas por este mtodo son las siguientes:
Recibir (bool preguntarAlPrimerBillete)
Inicia el modo de recepcin de efectivo. El sistema recibir billetes y monedas hasta el
momento que se llame a la funcin Detener y se reciben los eventos OK o ERROR. Para
el caso de los billeteros, el sistema tiene la opcin de recibir automticamente todos los
billetes que se insertan, o de notificar al programa la recepcin del primer billete
permitir su ingreso o rechazo a travs de la funcin AceptarEscrow y RechazarEscrow.
Recibir (int monto, bool validarVueltas, bool validarAltaDenominacion)
A diferencia de la anterior, esta sobrecarga detiene la recepcin de dinero en el
momento en que el valor recibido supera el monto ingresado como argumento. Para el
caso de los billeteros, el sistema permite realizar validacin de vueltas durante la
recepcin de billetes, revisando si el monto ingresado puede ser devuelto por el
sistema. En caso de no cumplirse esta condicin, el sistema devolver el dinero y lo
notificar mediante el evento rechazadoPorVueltas.
El sistema permite rechazar los billetes que superen una denominacin definida por el
sistema, fijando la variable validarAltaDenominacin. El sistema notificar el rechazo
disparando el evento rechazadoPorAltaDenominacin.
montoRecibido = dispositivos.ObtenerTotalRecibido();
Console.WriteLine("Monto Recibido: " + montoRecibido);
if (evento == EventosIDispositivo.ok)
{
Console.WriteLine("Recepcion finalizada");
break;
}
else if (evento == EventosIDispositivo.error)
{
Console.WriteLine("Error");
LeerListaErrores();
break;
}
else if (evento == EventosIDispositivo.rechazadoPorVueltas)
{
Console.WriteLine("Rechazado por vueltas");
}
else if (evento == EventosIDispositivo.rechazadoPorVueltas)
{
Console.WriteLine("Rechazado por alta denominacion");
}
}
montoRecibido = dispositivos.ObtenerTotalRecibido();
Console.WriteLine("Monto Recibido: " + montoRecibido);
PAGO DE EFECTIVO
El proceso de pago de efectivo se realiza mediante el mtodo Pagar, el cual recibe como
argumento el total de dinero a pagar y retorna el total pagado al usuario. Este mtodo permite
realizar el pago mediante todos los dispositivos de pago registrados durante la inicializacin, o
el pago individual mediante un dispositivo nico definido por el enumerado TipoDispositivo.
Para verificar si el sistema tiene cantidad suficiente de elementos para realizar la transaccin se
utiliza el mtodo VerificarPagoDisponible, el cual genera una lista de inventarios de los
dispositivos y genera la lista de pagos.
El siguiente ejemplo muestra un procedimiento bsico de pago. En caso de que el sistema
reporte error en el mtodo, se puede obtener la descripcin detallada del problema a travs
del mtodo ObtenerListaDeErrores.
int montoAPagar = 5000;
if (dispositivos.VerificarPagoDisponible(montoAPagar) == false)
{
Console.WriteLine("No se puede realizar el pago solicitado");
}
else
{
int totalPagado;
if (dispositivos.Pagar(montoAPagar, out totalPagado) == true)
{
Console.WriteLine("Pago Realizado con exito");
}
else
{
Console.WriteLine("Error en pago. Total Pagado: " + totalPagado);
LeerListaErrores();
}
}
VACIADO
Para llevar el procedimiento de vaciado en los recicladores se utiliza el mtodo Vaciar. Al igual
que el proceso de pago, este mtodo retorna el total vaciado por los dispositivos. En caso de
que se presente un error dentro del sistema, la descripcin del problema se puede obtener
mediante la funcin ObtenerListaDeErrores.
El sistema tambin soporta realizar vaciados parciales a los billeteros por medio del mtodo
Float, el cual opera de forma similar al proceso normal de vaciado, solo que en este caso, el
sistema recibe la lista de los billetes que se quieren almacenar en las caseteras. El ejemplo del
procedimiento de vaciado se muestra a continuacin:
int totalVaciado;
if (dispositivos.Vaciar(out totalVaciado) == true)
{
Console.WriteLine("Vaciado finalizado");
}
else
{
Console.WriteLine("Error. TotalVaciado: " + totalVaciado);
}
3.2.
ClassCerrojosPP
DESCRIPCIN
Librera que realiza el control de la tarjeta de cerrojos desarrollada por Controles Inteligentes.
Este componente, adems de controlar y obtener el estado de las puertas del punto de pago,
permite controlar las luces que estn conectadas a la boquilla del billetero y el dispensador.
DISPOSITIVOS SOPORTADOS:
Tarjeta de cerrojos Controles Inteligentes
REQUISITOS DE SOFTWARE
USO DE LA CLASE
El control de la tarjeta de cerrojos se realiza mediante la creacin de una instancia de la
ClaseCerrojosPP. Debido a que la lgica del dispositivo es asincrnica, se debe suscribir un
mtodo al evento cerrojosPPEvent, el cual nos permite obtener notificaciones de la apertura y
cierre de las puertas. Para verificar conexiones con la tarjeta de cerrojos e iniciar la
comunicacin para la recepcin de eventos, se debe llamar a la funcin Check.
static void TestCerrojosPP()
{
ClassCerrojosPP cerrojosPP = new ClassCerrojosPP();
cerrojosPP.cerrojosPPEvent += NuevoEventoCerrojos;
if (cerrojosPP.Check() == false)
{
Console.WriteLine("Error en la verificacion");
}
}
static void NuevoEventoCerrojos(object sender, ClassCerrojosPPEventArgs e)
{
Console.WriteLine("Estado Puerta 1: " + e.SW1);
Console.WriteLine("Estado Puerta 2: " + e.SW2);
}
Estos mtodos liberan o cierran el seguro electrnico que compone el sistema de cierre de las
puertas. En el caso de las funciones de apertura, el mecanismo se libera por un espacio de 10
segundos para evitar el sobrecalentamiento de los solenoides.
cerrojosPP.OpenDoor1();
Console.WriteLine("Puerta 1 Abierta");
cerrojosPP.OpenDoor2();
Console.WriteLine("Puerta 2 Abierta");
cerrojosPP.CloseDoor1();
Console.WriteLine("Puerta 1 Cerrada");
cerrojosPP.CloseDoor2();
Console.WriteLine("Puerta 2 Cerrada");
CONTROL DE LUCES
El encendido y apagado de las luces de la tarjeta de cerrojos se realiza por medio del mtodo
ActivarRGB. Esta funcin permite seleccionar el color a travs de un cdigo de colores RGB y
ofrece 3 modos de operacin: Encendido, apagado y titilante. Dependiendo del lugar en donde
tenemos conectada la luz en nuestra tarjeta, se fijarn los argumentos de luz y puerto
correspondientes.
Console.WriteLine("Encendiendo luz blanca - Luz 1 Puerto 1");
cerrojosPP.ActivarRGB(255, 255, 255, TipoLuzCerrojos.TITILANDO, 0x01, 0x01);
3.3. ClassDispensador
DESCRIPCIN
Permite el envo de comandos y la recepcin de eventos del dispensador de tarjetas.
DISPOSITIVOS SOPORTADOS
Dispensador de tarjetas
REQUISITOS DE SOFTWARE
La comunicacin con el dispensador se debe realizar a travs de un convertidor de
puerto USB RS232. Se debe asegurar que el controlador de este dispositivo se
encuentre instalado en el sistema, y que sea reconocido como un puerto COM en el
administrador de dispositivos.
USO DE LA CLASE
Para obtener control del dispensador se debe crear una instancia de la clase ClassDispensador.
Al igual que la clase de cerrojos, los procedimientos se realizan de forma asincrnica, por lo cual
el control de notificaciones debe ser efectuado a travs del evento IDispositivoEvent. Al igual
que las dems clases, el mtodo Check debe ser llamado previamente con el objetivo de
comprobar conexiones e iniciar la comunicacin para la recepcin de eventos.
static bool TestCheckDispensador()
{
Console.WriteLine("Inicio del programa TestDispensador");
dispensador = new ClassDispensador();
dispensador.EventDispenser += NuevoEventoDispensador;
if (dispensador.Check() == false)
{
Console.WriteLine("Error al verificar el dispensador");
return false;
}
return true;
}
static void NuevoEventoDispensador (object sender, ClassEventDispensador ev)
{
EventosDispensador nuevoEvento = ev.eventoDescription;
Console.WriteLine("Llega nuevo evento del dispensador: " + nuevoEvento.ToString());
}
OPERACIONES BSICAS
A continuacin se exponen los mtodos con los cuales se efectan las operaciones bsicas que
pueden ser invocadas dentro de la clase ClassDispensador:
3.4. ClassHuellero
DESCRIPCIN
Genera la interfaz de comunicacin con el huellero y realiza la captura de la huella.
DISPOSITIVOS SOPORTADOS
SDK proporcionado por Digital Persona para el huellero UareU 4500. Se puede
comprobar que el SDK ha sido instalado de forma correcta a travs de la deteccin del
huellero en el administrador de dispositivos y observando que la un espectro azul
encienda al momento de conectarlo.
USO DE LA CLASE
Para poder realizar la extraccin de huellas se deben utilizar los mtodos estticos contenidos
dentro de la clase ClassHuellero. A diferencia de las otras clases mencionadas anteriormente,
los mtodos que componen ClassHuellero son ejecutados de forma sincrnica, por lo cual no es
necesario realizar la suscripcin a un evento como en los casos anteriores.
Para realizar la extraccin de la imagen de la huella se utiliza el mtodo CapturarHuella, el cual
recibe como argumento un entero que corresponde al timeout del proceso. En caso de que el
dispositivo no est conectado, el usuario no haya posicionado el dedo dentro del timeout
especificado o haya ocurrido algn error con la captura, la funcin retornar falso. En caso
contrario, retornar un Bitmap que contendr la imagen de la huella.
static void ProgramTestHuellero()
{
Console.WriteLine("Iniciando captura de huella");
Console.WriteLine("Ubique su dedo en el huellero");
int timeoutMs = 10 * 1000;
Bitmap imagenHuella;
if (ClassHuellero.CapturarHuella(timeoutMs, out imagenHuella) == false)
{
Console.WriteLine("Error Capturando Huella");
}
else
{
Console.WriteLine("Imagen Capturada");
Console.WriteLine("Ancho: " + imagenHuella.Width);
Console.WriteLine("Alto: " + imagenHuella.Height);
}
}
3.5. ClassScanner
DESCRIPCIN
Realiza la interfaz de control del scanner y genera el procedimiento de captura de imagen de
documentos.
DISPOSITIVOS SOPORTADOS
USO DE LA CLASE
Para realizar el control y la captura de imagen de documentos, se debe crear una instancia de la
clase ClassScanner. Aunque los mtodos que componen ClassScanner son ejecutados de forma
sincrnica, esta permite conocer el instante en que se inserta una tarjeta dentro del dispositivo
a travs del evento scanner1000Event.
El proceso de escaneo de documentos inicia por medio del llamado al mtodo Scan. En este
momento, el sistema espera un periodo de alrededor de 10 segundos a que el usuario inserte la
cdula por la ranura, y realiza un escaneo por ambas caras. En caso de que el periodo haya
expirado o que haya ocurrido algn problema con el proceso, el mtodo retornar falso. En
caso contrario, el sistema retornar dos objetos tipo Bitmap que contendrn las imgenes
frontal y trasera del documento.
static void ProgramTestScanner1000()
{
Console.WriteLine("Iniciando el proceso de escaneo");
Console.WriteLine("Inserte la cdula por la ranura");
ClassScanner1000 scanner1000 = new ClassScanner1000();
Bitmap imageFront;
Bitmap imageBack;
if (scanner1000.Scan(out imageFront, out imageBack) == false)
{
Console.WriteLine("Hubo un error en la recepcin");
}
else
{
Console.WriteLine("Imagenes obtenidas");
}
}
static void NuevoEventoScanner (object sender, Scanner1000EventArgs e)
{
Scanner1000EventType evento = e.eventType;
Console.WriteLine("Nuevo evento scanner: " + evento.ToString());
}
3.6. ILectora
DESCRIPCIN
Proporciona una interfaz de control para la lectura y escritura de tarjetas inteligentes.
DISPOSITIVOS SOPORTADOS
Lectora SL025M
Lectora ACR1222L
Lectora Tipo 5
USO DE LA INTERFAZ
ILectora proporciona una interfaz genrica para el control de las lectoras descritas en la seccin
anterior, y permite llamar las funciones de lectura y escritura para tarjetas Mifare. Existen 3
clases dentro de la librera que pueden ser instanciadas dependiendo del tipo de lectora que se
desee utilizar:
Para crear una instancia de cada una de las clases anteriores, se puede crear un objeto con el
tipo de clase que se quiere implementar, o se puede utilizar la interfaz ILectora para brindar un
control transparente entre los 3 dispositivos soportados.
Antes de realizar cualquier operacin con la lectora, se debe verificar su conexin al sistema por
medio de la funcin Check, la cual retornar falso en caso de que haya ocurrido algn problema
con el procedimiento, o verdadero en caso contrario.
Para poder leer y escribir datos sobre un sector y bloque de la tarjeta, se debe cargar la llave de
acceso a la clase por medio de la funcin CargarLlave. La llave corresponde a un array de bytes
de 6 posiciones que permite acceder a cada uno de los bloques de memoria.
Para leer los datos sobre un bloque de memoria se debe invocar al mtodo LeerDatos, el cual
recibe como argumentos el sector y el bloque de memoria que se quiere leer, y retorna un
array de bytes con los datos obtenidos. Por otro lado, el proceso de escritura de datos se realiza
por medio del mtodo EscribirDatos, el cual adems de solicitar el sector y el bloque, recibe el
array de bytes con la informacin que se quiere escribir.
lectora.CargarLlave(new byte[] { 255, 255, 255, 255, 255, 255 });
byte[] data = new byte[] { 87, 46, 182, 89, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
if (lectora.EscribirDatos(0, 1, data) == false)
{
Console.WriteLine("Error escribiendo datos");
return false;
}
byte[] dataReaded;
if (lectora.LeerDatos(0, 1, out dataReaded) == false)
{
Console.WriteLine("Error leyendo datos");
return false;
}
3.7.
ClassImpresoraKiosko
DESCRIPCIN
Interfaz de control para realizar las impresiones de las facturas y conocer el estado de la
impresora.
DISPOSITIVOS SOPORTADOS
Driver del cable de comunicacin USB-Serial que se utiliza para poder establecer
conexin con la impresora.
USO DE LA CLASE
Para poder realizar el control de la impresora es necesario crear una instancia de la clase
ClassImpresoraKiosko dentro del proyecto. A diferencia de las dems clases, la verificacin de
conexin se realiza por medio del mtodo SeekPortDispenser, el cual realiza un barrido por
todos los puertos seriales verificando si existe respuesta del dispositivo.
Para realizar la impresin de una factura en el sistema, se debe invocar al mtodo print, el cual
recibe como argumento una cadena de caracteres con el texto que se quiere mostrar. Cabe
resaltar que para realizar esta funcin, la impresora debe contar con papel dentro de su
compartimiento.
Antes de comenzar el proceso de impresin, se debe verificar que la impresora se encuentre en
un estado adecuado para realizar la operacin. Para esto se debe utilizar el mtodo status, el
cual enva un comando por el puerto serial y obtiene una respuesta. En caso de fallo, se genera
un error y se debe mostrar un mensaje de advertencia para revisar la conexin.