Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
10
Tipo: Especificaciones de interface Date :
30/12/2010
Observaciones
1. Histórico
Versión Fecha Descripción Autor
1.05 Xx/xx/xxxx - -
2. Índice
1. Histórico .................................................................................................... 2
2. Índice ........................................................................................................ 3
3. Arquitectura de la solución global ............................................................. 4
4. Utilización de la DLL ................................................................................. 4
4.1. Proyecto de C++ ................................................................................ 4
4.2. Proyecto de VB6 ................................................................................ 4
5. Definición de tipos de datos ...................................................................... 5
6. Definición de códigos de retorno .............................................................. 5
6.1. Códigos de retorno generales ........................................................... 5
6.2. Códigos de errores en la información enviada al POS ...................... 5
6.3. Códigos de errores en la información ingresada por el usuario ......... 6
6.4. Códigos de errores en el cierre de la transacción ............................. 6
7. Códigos de transacciones......................................................................... 6
8. Timeouts ................................................................................................... 6
9. Estructuras de datos ................................................................................. 7
9.1. comParams_t .................................................................................... 7
9.2. vpiPurchaseIn_t ................................................................................. 7
9.3. vpiVoidIn_t ......................................................................................... 7
9.4. vpiRefundIn_t .................................................................................... 8
9.5. vpiTrxOut_t ........................................................................................ 8
9.6. vpiBatchCloseOut_t ........................................................................... 8
9.7. vpiBatchCloseDataOut_t ................................................................... 9
9.8. vpiIssuerOut_t ................................................................................... 9
9.9. vpiPlanOut_t .................................................................................... 10
10. Definición de funciones ....................................................................... 10
10.1. vpiOpenPort ................................................................................. 10
10.2. vpiClosePort ................................................................................. 11
10.3. vpiTestConnection ....................................................................... 12
10.4. vpiPurchase ................................................................................. 13
10.5. vpiVoid ......................................................................................... 15
10.6. vpiRefund ..................................................................................... 17
10.7. vpiRefundVoid .............................................................................. 19
10.8. vpiBatchClose .............................................................................. 21
10.9. vpiGetLastTrxData ....................................................................... 22
10.10. vpiGetBatchCloseData ................................................................. 24
10.11. vpiPrintTicket ............................................................................... 26
10.12. vpiPrintBatchClose ....................................................................... 27
10.13. vpiGetIssuer ................................................................................. 28
10.14. vpiGetPlan ................................................................................... 30
10.15. vpiPurchaseExtraCash................................................................. 32
Caja
Sistema propio
VpiPc.dll
IngStore.dll POS
RS232
4. Utilización de la DLL
7. Códigos de transacciones
Son los códigos que identifican las transacciones básicas, es decir, Venta,
Anulación de venta, Devolución y Anulación de devolución.
Son utilizados solamente en la función vpiGetLastTrx.
8. Timeouts
La aplicación maneja un tiempo de espera de respuesta por parte del POS.
Para aquellos comandos que no requieren interacción con el usuario o con el
host de Visa, este está fijo en 3 segundos, según la constante:
VPI_TIMEOUT_STD.
Para el resto de los comandos, el timeout es configurable.
9. Estructuras de datos
9.1. comParams_t
Se utiliza para configurar en el puerto serie al abrirlo (ver vpiOpenPort)
}comParams_t;
9.2. vpiPurchaseIn_t
Se utiliza para enviar al POS los datos de la compra ingresados en la caja
(ver vpiPurchase)
}vpiPurchaseIn_t
9.3. vpiVoidIn_t
Se utiliza para enviar al POS los datos de la anulación (sea de venta o
devolución) ingresados en la caja (ver vpiVoid)
}vpiVoidIn_t;
9.4. vpiRefundIn_t
Se usa para enviar al POS los datos de la devolución ingresados en la caja
(ver vpiRefund)
}vpiRefundIn_t;
9.5. vpiTrxOut_t
Se utiliza para recuperar la información enviada por el POS en las
operaciones de venta, anulación y devolución.
}vpiTrxOut_t;
9.6. vpiBatchCloseOut_t
Se utiliza para recuperar la información enviada por el POS al realizar una
operación de cierre de lote (ver vpiBatchClose). Esta estructura no devuelve
los totales obtenidos en el cierre de lote (ver vpiBatchCloseDataOut_t),
solamente el resultado de la operación contra el host de Visa.
}vpiBatchCloseOut_t;
9.7. vpiBatchCloseDataOut_t
Se utiliza para recuperar la información enviada por el POS al realizar una
obtención de los totales del cierre de lote (ver vpiGetBatchCloseData)
}vpiBatchCloseDataOut_t;
9.8. vpiIssuerOut_t
Se usa para obtener un registro de tarjeta desde la tabla de tarjetas del POS.
}vpiIssuerOut_t;
9.9. vpiPlanOut_t
Se usa para obtener un registro de plan desde la tabla de planes del POS.
}vpiPlanOut_t;
Prototipo:
WORD __stdcall vpiOpenPort (comParams_t* params);
Parámetros:
params: Parámetros de configuracion del puerto serial.
Retorna:
VPI_OK
VPI_FAIL
Ejemplo (VB6):
comParams.com = “COM1”
comParams.baudRate = 9600
comParams.byteSize = 8
comParams.parity = Asc(“N”)
comParams.stopBits = 1
result = vpiOpenPort(comParams)
If (Result = VPI_OK) Then
MsgBox "Puerto abierto exitosamente!"
Else
MsgBox "Error abriendo el puerto!"
End If
10.2. vpiClosePort
Cierra el puerto serial de comunicaciones y lo deja libre para otras
aplicaciones. El puerto debe estar abierto para que la ejecución sea exitosa.
Luego de ejecutar este comando, no se puede ejecutar ningún otro comando.
Prototipo:
WORD __stdcall vpiClosePort(void);
Parámetros:
Ninguno.
Retorna:
VPI_OK
VPI_FAIL
Ejemplo (VB6):
result = vpiClosePort()
If (result = VPI_OK) Then
MsgBox "Puerto cerrado exitosamente!"
Else
MsgBox "Error cerrando el puerto!"
End If
10.3. vpiTestConnection
Envía un mensaje por el puerto y espera la respuesta al mismo en forma
sincrónica, para verificar que la conexión con el POS esté OK. La aplicación
queda esperando hasta tenga la respuesta o bien expire el timeout default. El
puerto debe estar abierto para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiTestConnection(void);
Parámetros:
Ninguno.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
Ejemplo (VB6):
result = vpiTestConnection
Select Case result
Case VPI_OK
MsgBox “Test exitoso!”
Case VPI_FAIL
MsgBox “No se pudo enviar el comando!”
Case VPI_TIME_EXP
MsgBox “No se recibió respuesta del POS!”
End Select
10.4. vpiPurchase
Envía la orden de realizar una venta y espera la respuesta de la misma en
forma sincrónica. La aplicación queda esperando hasta tenga la respuesta o
bien expire el timeout especificado. El puerto debe estar abierto para que la
ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiPurchase(vpiPurchaseIn_t* intput, vpiTrxOut_t* output,
LONG timeout);
Parámetros:
input: Estructura con los datos de entrada de la venta.
output: Estructura con los datos de respuesta de la venta. Se completa
dentro de la función
timeout: Tiempo de espera de respuesta en segundos.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_PLAN
VPI_TRX_CANCELED
VPI_DIF_CARD
VPI_INVALID_CARD
VPI_EXPIRED_CARD
VPI_ERR_COM
VPI_ERR_PRINT
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
Ejemplo (VB6):
10.5. vpiVoid
Envía la orden de realizar una anulación de venta y espera la respuesta de la
misma en forma sincrónica. La aplicación queda esperando hasta tenga la
respuesta o bien expire el timeout especificado. El puerto debe estar abierto
para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiVoid(vpiVoidIn_t* intput, vpiTrxOut_t* output, LONG
timeout);
Parámetros:
input Estructura con los datos de entrada de la anulación.
output Estructura con los datos de respuesta de la anulación. Se
completa dentro de la función.
timeout Tiempo de espera de respuesta en segundos.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_INVALID_TICKET
VPI_EMPTY_BATCH
VPI_TRX_CANCELED
VPI_DIF_CARD
VPI_INVALID_CARD
VPI_EXPIRED_CARD
VPI_INVALID_TRX
VPI_ERR_COM
VPI_ERR_PRINT
Ejemplo (VB6):
paramIn.originalTicket = “1000007”
paramIn.issuerCode = “1”
10.6. vpiRefund
Envía la orden de realizar una devolución y espera la respuesta de la misma
en forma sincrónica. La aplicación queda esperando hasta tenga la respuesta
o bien expire el timeout especificado. El puerto debe estar abierto para que la
ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiRefund (vpiRefundIn_t* input, vpiTrxOut_t* output, LONG
timeout);
Parámetros:
input Estructura con los datos de entrada de la devolución.
output Estructura con los datos de respuesta de la devolución. Se
completa dentro de la función.
timeout Tiempo de espera de respuesta en segundos.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_INVALID_PLAN
VPI_TRX_CANCELED
VPI_DIF_CARD
VPI_INVALID_CARD
VPI_EXPIRED_CARD
VPI_INVALID_TRX
VPI_ERR_COM
VPI_ERR_PRINT
Ejemplo (VB6):
10.7. vpiRefundVoid
Envía la orden de realizar una anulación de devolución y espera la respuesta
de la misma en forma sincrónica. La aplicación queda esperando hasta tenga
la respuesta o bien expire el timeout especificado. El puerto debe estar
abierto para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiRefundVoid(vpiVoidIn_t* intput, vpiTrxOut_t* output,
LONG timeout);
Parámetros:
input: Estructura con los datos de entrada de la anulación.
output: Estructura con los datos de respuesta de la anulación. Se
completa dentro de la función.
timeout: Tiempo de espera de respuesta en segundos.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_INVALID_TICKET
VPI_EMPTY_BATCH
VPI_TRX_CANCELED
VPI_DIF_CARD
VPI_INVALID_CARD
VPI_EXPIRED_CARD
VPI_INVALID_TRX
VPI_ERR_COM
VPI_ERR_PRINT
Ejemplo (VB6):
paramIn.originalTicket = “1000007”
paramIn.issuerCode = “1”
10.8. vpiBatchClose
Envía la orden de realizar un cierre de lote. La aplicación queda esperando
hasta tenga la respuesta o bien expire el timeout especificado. El puerto debe
estar abierto para que la ejecución sea exitosa. No devuelve los totales, que
se obtienen con la función vpiGetBatchCloseData.
Prototipo:
WORD __stdcall vpiBatchClose(vpiBatchCloseOut_t* output, LONG timeout);
Parámetros:
output: Estructura con el resultado de la operación contra el host. Se
completa dentro de la función.
timeout: Tiempo de espera de respuesta en segundos.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_TRX_CANCELED
VPI_ERR_COM
VPI_ERR_PRINT
VPI_EMPTY_BATCH
Ejemplo (VB6):
10.9. vpiGetLastTrxData
Envía la orden de obtener la información de la última transacción realizada y
espera la respuesta de la misma en forma sincrónica. La aplicación queda
esperando hasta tenga la respuesta o bien expire el timeout especificado. El
puerto debe estar abierto para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiGetLastTrxData(WORD* trxCode, vpiTrxOut_t* output);
Parámetros:
trxCode: Código del tipo de transacción: VPI_PURCHASE, VPI_VOID,
VPI_REFUND, VPI_REFUND_VOID
output: Estructura con los datos de respuesta de la última transacción
realizada. Se completa dentro de la función.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_INVALID_TICKET
VPI_INVALID_PLAN
VPI_EMPTY_BATCH
VPI_TRX_CANCELED
VPI_DIF_CARD
VPI_INVALID_CARD
VPI_EXPIRED_CARD
VPI_ERR_COM
VPI_ERR_PRINT
Ejemplo (VB6):
10.10. vpiGetBatchCloseData
Envía la orden de obtener un determinado registro, con los totales por tarjeta
del último cierre realizado y espera la respuesta de la misma en forma
sincrónica. Para obtener todos los registros se debe hacer un ciclo desde 0
hasta que el código de respuesta sea distinto de VPI_MORE_REC. La
aplicación queda esperando hasta tenga la respuesta o bien expire el timeout
especificado. El puerto debe estar abierto para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiGetBatchCloseData(WORD index,
vpiBatchCloseDataOut_t* output);
Parámetros:
index: Índice del registro que deseo recuperar
output: Estructura con la información del registro que quiero.
Retorna:
VPI_OK
VPI_MORE_REC
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_INVALID_INDEX
VPI_EMPTY_BATCH
VPI_INVALID_TRX
Ejemplo (VB6):
result= 0
recIndex= 0
While (result = VPI_MORE_REC)
result= vpiGetBatchCloseData(recIndex,paramOut(recIndex))
recIndex= recIndex+1
Wend
Select Case result
Case VPI_OK
MsgBox “Comunicación con POS completada en forma exitosa!”
MsgBox “Se obtuvieron” & Str(recIndex) & “ registros!”
ProcesarRespuesta(paramOut)
Case VPI_FAIL
MsgBox “No se pudo enviar el comando!”
Case VPI_TIME_EXP
MsgBox “No se recibió respuesta del POS!”
...
End Select
10.11. vpiPrintTicket
Envía la orden de re-imprimir el ticket de la última transacción. La aplicación
queda esperando hasta tenga la respuesta o bien expire el timeout default. El
puerto debe estar abierto para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiPrintTicket(void);
Parámetros:
Ninguno.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_EMPTY_BATCH
Ejemplo (VB6):
Result= vpiPrintTicket
Select Case result
Case VPI_OK
MsgBox “Comunicación con POS completada en forma exitosa!”
Case VPI_FAIL
MsgBox “No se pudo enviar el comando!”
Case VPI_TIME_EXP
MsgBox “No se recibió respuesta del POS!”
...
End Select
10.12. vpiPrintBatchClose
Envía la orden de re-imprimir el ticket del último cierre de lote. La aplicación
queda esperando hasta tenga la respuesta o bien expire el timeout default. El
puerto debe estar abierto para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiPrintBatchClose(void);
Parámetros:
Ninguno.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_EMPTY_BATCH
Ejemplo (VB6):
Result= vpiPrintBatchClose
Select Case result
Case VPI_OK
MsgBox “Comunicación con POS completada en forma exitosa!”
Case VPI_FAIL
MsgBox “No se pudo enviar el comando!”
Case VPI_TIME_EXP
MsgBox “No se recibió respuesta del POS!”
...
End Select
10.13. vpiGetIssuer
Envía el comando para obtener un registro de la tabla de tarjetas del POS y
espera la respuesta de la misma en forma sincrónica. Para obtener todos los
registros se debe hacer un ciclo desde 0 hasta que el código de respuesta
sea distinto de VPI_MORE_REC. La aplicación queda esperando hasta
tenga la respuesta o bien expire el timeout especificado. El puerto debe estar
abierto para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiGetIssuer(WORD index, vpiIssuerOut_t* output);
Parámetros:
index: Índice del registro a obtener.
output: Estructura con los datos de la tarjeta. Se completa dentro de la
función.
Retorna:
VPI_OK
VPI_MORE_REC
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_INVALID_INDEX
Ejemplo (VB6):
result= 0
recIndex= 0
While (result = VPI_MORE_REC)
result = vpiGetIssuer(recIndex, paramOut(recIndex))
recIndex= recIndex+1
Wend
Select Case result
Case VPI_OK
MsgBox “Comunicación con POS completada en forma exitosa!”
MsgBox “Se obtuvieron” & Str(recIndex) & “ registros!”
ProcesarRespuesta(paramOut)
Case VPI_FAIL
MsgBox “No se pudo enviar el comando!”
Case VPI_TIME_EXP
MsgBox “No se recibió respuesta del POS!”
...
End Select
10.14. vpiGetPlan
Envía el comando para obtener un registro de la tabla de planes del POS y
espera la respuesta de la misma en forma sincrónica. Para obtener todos los
registros se debe hacer un ciclo desde 0 hasta que el código de respuesta
sea distinto de VPI_MORE_REC. La aplicación queda esperando hasta tenga
la respuesta o bien expire el timeout especificado. El puerto debe estar
abierto para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiGetPlan(WORD index, vpiPlanOut_t* output);
Parámetros:
index: Índice del registro a obtener.
output: Estructura con los datos del plan. Se completa dentro de la
función.
Retorna:
VPI_OK
VPI_MORE_REC
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
VPI_INVALID_INDEX
Ejemplo (VB6):
result= 0
recIndex= 0
While (result = VPI_MORE_REC)
result = vpiGetIssuer(recIndex, paramOut(recIndex))
recIndex= recIndex+1
Wend
Select Case result
Case VPI_OK
MsgBox “Comunicación con POS completada en forma exitosa!”
MsgBox “Se obtuvieron” & Str(recIndex) & “ registros!”
ProcesarRespuesta(paramOut)
Case VPI_FAIL
MsgBox “No se pudo enviar el comando!”
Case VPI_TIME_EXP
MsgBox “No se recibió respuesta del POS!”
...
End Select
10.15. vpiPurchaseExtraCash
Envía la orden de realizar una venta con Extra Cash y espera la respuesta
de la misma en forma sincrónica. La aplicación queda esperando hasta tenga
la respuesta o bien expire el timeout especificado. El puerto debe estar
abierto para que la ejecución sea exitosa.
Prototipo:
WORD __stdcall vpiPurchaseExtraCash(vpiPurchaseIn_t* intput, vpiTrxOut_t*
output, LONG timeout);
Parámetros:
input: Estructura con los datos de entrada de la venta.
output: Estructura con los datos de respuesta de la venta. Se completa
dentro de la función
timeout: Tiempo de espera de respuesta en segundos.
Retorna:
VPI_OK
VPI_FAIL
VPI_TIMEOUT_EXP
VPI_INVALID_PLAN
VPI_TRX_CANCELED
VPI_DIF_CARD
VPI_INVALID_CARD
VPI_EXPIRED_CARD
VPI_ERR_COM
VPI_ERR_PRINT
VPI_INVALID_IN_CMD
VPI_INVALID_IN_PARAM
VPI_INVALID_OUT_CMD
VPI_GENERAL_FAIL
Ejemplo (VB6):