API Referencia
undefined

POS Integrado

Protocolo de Comunicación Caja - POS

La comunicación se realiza a través de un puerto serial RS232, a velocidades que van entre los 1200bps hasta 115200bps 8N1 es decir 8 bits de datos, Ningún bit de paridad y 1 bit de parada.

Diagrama de Comunicación Caja - POS

Termino Descripción
<STX> Indica el inicio de un mensaje (texto)
Hex: 0x02
DATOS Corresponde al commando a enviar al POS o la respuesta de este
<ETX> Indica el fin de un mensaje (texto)
Hex: 0x03
LRC Es un byte que se concatena al final del mensaje <ETX> y se calcula realizando la operación XOR byte a byte de <DATOS> + <ETX>
<ACK> Representa la recepción correcta del mensaje enviado
Hex: 0x06
<NAK> Representa la incorrecta recepción del mensaje enviado, o que el LRC del mensaje recibido no corresponde con el enviado.
Hex: 0x15
Timeout1 Es el tiempo de espera de la caja para recibir <ACK>/<NAK> por parte del POS Integrado antes de reintentar el envío del mensaje.
Timeout2 Es el tiempo de espera de el POS para recibir <ACK>/<NAK> por parte de la Caja antes de reintentar el envío del mensaje de respuesta.

Ejemplo de calculo LRC

Dado el siguiente comando: <STX>0200|123|<ETX>

Que en notación hexadecimal seria: 0x02 0x30 0x32 0x30 0x30 0x7C 0x31 0x32 0x33 0x7C 0x03

Para calcular el LRC debemos omitir el inicio de texto <STX> o 0x02.

La operación entonces seria:

(((((((((0x30 XOR 0x32) XOR 0x30) XOR 0x30) XOR 0x7C) XOR 0x31) XOR 0x32) XOR 0x33) XOR 0x7C) XOR 0x03)

El resultado entonces seria 0x31 en hexadecimal o 1 en ASCII, por lo tanto, el mensaje completo para enviar al POS Integrado es:

<STX>                   DATOS                           <ETX>   LRC
 0x02    0x30 0x32 0x30 0x30 0x7C 0x31 0x32 0x33 0x7C    0x03    0x31

Primeros pasos

Para usar el SDK es necesario incluir las siguientes referencias.

using Transbank.POS;
using Transbank.POS.Utils;
using Transbank.POS.Responses:
#include "transbank.h"
#include "transbank_serial_utils.h"

Listar puertos disponibles

Si los respectivos drivers están instalados, entonces puedes usar la función ListPorts() del paquete Transbank.POS.Utilspara identificar los puertos que se encuentren disponibles y seleccionar el que corresponda con el puerto donde conectaste el POS Integrado.

using Transbank.POS.Utils;
//...
List<string> ports = Serial.ListPorts();
#include "transbank_serial_utils.h"
//...
char *ports = list_ports();

Abrir un puerto Serial

Para abrir un puerto serial y comunicarte con el POS Integrado, necesitarás el nombre del puerto (El cual puedes identificar usando la función mencionada en el apartado anterior). También necesitarás el baudrate al cual esta configurado el puerto serial del POS Integrado (Por defecto es 115200), y puedes obtener los distintos valores desde la clase TbkBaudrates del paquete Transbank.POS.Utils.

Si el puerto no puede ser abierto, se lanzará una exception TransbankException.

using Transbank.POS;
using Transbank.POS.Utils;
//...
string portName = "COM3";
POS.Instance.OpenPort(portName, TbkBaudrate.TBK_115200);
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
char *portName = "COM4";
int retval = open_port(portName, 115200);
if ( retval == TBK_OK ){
    //...
}

Cerrar un puerto Serial

Al finalizar el uso del POS, o si se desea desconectar de la Caja se debe liberar el puerto serial abierto anteriormente.

using Transbank.POS;
//...
bool closed = POS.Instance.ClosePort();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
retval = close_port();
if(retval == SP_OK){
    //...
}

Mensajes

Mensaje de Venta

Este comando es enviado por la caja para solicitar la ejecución de una venta. Los siguientes parámetros deben ser enviados desde la caja:

  • Monto: Monto en pesos informados al POS. Este parámetro es remitido a Transbank para realizar la autorización.
  • Número Ticket/Boleta: Este número es impreso por el POS en el voucher que se genera luego de la venta.
  • Enviar Mensaje: Este parámetro indica al POS si debe enviar mensajes intermedios a la caja mientras se realiza el proceso de venta.
  • Los mensajes intermedios que envía el POS y que deben ser mostrados por la Caja, deben corresponder según los siguientes códigos:
    • 78: Lectura de Tarjeta.
    • 79: Confirmación de Monto.
    • 80: Selección de Cuotas.
    • 81: Ingreso de Pinpass.
    • 82: Envío de transacción a Transbank.
using Transbank.POS;
using Transbank.POS.Responses;
//...
SaleResponse response = POS.Instance.Sale(ammount, ticket);
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
char* response = sale(ammount, ticket, false);

El resultado de la venta se entrega en la forma de un objeto SaleResponse o un char* en el caso de la librería C. Si ocurre algún error al ejecutar la acción en el POS se lanzará una excepción del tipo TransbankSaleException.

"Function": 210
"Response": "Aprobado"
"Commerce Code": 550062700310
"Terminal Id": "ABC1234C"
"Ticket": "AB123"
"Autorization Code": "XZ123456"
"Ammount": 15000
"Shares Number": 3
"Shares Amount": 5000
"Last 4 Digits": 6677
"Operation Number": 60
"Card Type": CR
"Accounting Date":
"Account Number":
"Card Brand": AX
"Real Date": 28/10/2019 22:35:12
"Employee Id":
"Tip": 1500

Diagrama de Secuencia Venta

  1. La caja envía el requerimiento y espera como respuesta <ACK>/<NAK>, en caso de que llegue un <NAK>, debe reintentar el envío del requerimiento 2 veces. Si recibe un <ACK> debe esperar la respuesta de la transacción.
  2. El POS solicita los datos al usuario, y envía el requerimiento al Autorizador, en caso de ser aprobada, se guarda en Batch y se envía respuesta a la caja. En caso de ser rechazada se envía respuesta a la caja indicando el error. (Ver Tabla de Respuestas)
  3. La caja al recibir la respuesta envía un <ACK> si el mensaje está correcto, o un <NAK> para el caso en que el LRC no corresponde.
  4. El POS al recibir el <ACK> vuelve al inicio a esperar un nuevo comando, para el caso que recibe un <NAK> vuelve a enviar la respuesta 2 veces más.

Solicitud de Venta

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 valor ASCII: 0200
valor hexadecimal: 0x30 0x32 0x30 0x30
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto 9 Valor Numérico que debe ser convertido a hexadecimal.
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Ticket 6 Valor ASCII, Número de boleta o ticket, que debe ser convertido a hexadecimal
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Status 1 Indica al POS si debe enviar mensajes intermedios o de estado de la transacción
1: Envía Mensajes
0: No envía mensajes
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Respuesta de Venta

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0510
valor hexadecimal: 0x30 0x35 0x31 0x30
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Ticket 6 Valor ASCII, Número de boleta o ticket
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Codigo de Autorizacion 6 Valor ASCII
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto 9 Valor Numérico
Largo máximo: 9
Largo mínimo: 1
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Número Cuotas 2 Valor Numérico
Largo máximo: 2
Largo mínimo: 1
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto Cuota 9 Valor Numérico (Opcional)
Largo máximo: 9
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Últimos 4 Digitos 4 Valor Numérico (Opcional)
Largo máximo: 4
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Número Operación 6 Valor Numérico, Correlativo de Transacción del POS (Opcional)
Largo máximo: 6
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Tipo de Tarjeta 2 Valor ASCII
CR: Crédito
DB: Débito
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha Contable 6 Valor ASCII. Se utiliza solo con ventas Débito (Opcional)
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de Cuenta 19 Valor ASCII. Se utiliza solo con ventas Débito (Opcional)
Largo máximo: 19
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Abreviación Tarjeta 2 Valor ASCII (Opcional)
Ver Tabla de abreviación de Tarjetas
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha de Transacción 2 Valor ASCII (Opcional)
Formato: DDMMAAAA
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Hora de Transacción 6 Valor ASCII (Opcional)
Formato: HHMMSS
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Empleado 4 Valor Numérico (Opcional)
Largo máximo: 4
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Propina 9 Valor Numérico
Largo máximo: 9
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Mensaje de Última Venta

Este comando es enviado por la caja para solicitar la re-impresión de la última venta.

using Transbank.POS;
using Transbank.POS.Responses;
//...
LastSaleResponse response = POS.Instance.LastSale();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
char* response = last_sale();

El resultado de la transacción última venta devuelve los mismos datos que una venta normal y se entrega en forma de un objeto LastSaleResponse o un char* en el caso de la librería C. Si ocurre algún error al ejecutar la acción en el POS se lanzará una excepción del tipo TransbankLastSaleException.

"Function": 260
"Response": "Aprobado"
"Commerce Code": 550062700310
"Terminal Id": "ABC1234C"
"Ticket": "AB123"
"Autorization Code": "XZ123456"
"Ammount": 15000
"Shares Number": 3
"Shares Amount": 5000
"Last 4 Digits": 6677
"Operation Number": 60
"Card Type": CR
"Accounting Date":
"Account Number":
"Card Brand": AX
"Real Date": 28/10/2019 22:35:12
"Employee Id":
"Tip": 1500

Diagrama de Secuencia Última Venta

  1. La caja envía el requerimiento y espera como respuesta <ACK>/<NAK>, en caso de que llegue un <NAK>, debe reintentar el envío del requerimiento 2 veces. Si recibe un <ACK> debe esperar la respuesta de la transacción.
  2. Una vez recibida la respuesta, la caja calcula el <LRC> del mensaje y lo compara con el recibido, en el caso de coincidir la caja envía un <ACK> al POS dando por finalizado el comando; en caso contrario envía <NAK> y vuelve a esperar la respuesta del POS.

Solicitud de Última Venta

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0250
Valor hexadecimal: 0x30 0x32 0x35 0x30
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo (byte) XOR del mensaje

Mensaje en ASCII: <STX>0250|<ETX>x

Respuesta de Última Venta

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0260
Valor hexadecimal: 0x30 0x32 0x36 0x30
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Ticket 6 Valor ASCII, Número de boleta o ticket
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código de Autorización 6 Valor ASCII
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Monto 9 Valor Numérico
Largo máximo: 9
Largo mínimo: 1
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Número Cuotas 2 Valor Numérico
Largo máximo: 2
Largo mínimo: 1
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Monto Cuota 9 Valor Numérico (Opcional)
Largo máximo: 9
Largo mínimo: 0
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Últimos 4 Digitos 4 Valor Numérico (Opcional)
Largo máximo: 4
Largo mínimo: 0
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Número Operación 6 Valor Numérico, Correlativo de Transacción del POS (Opcional)
Largo máximo: 6
Largo mínimo: 0
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Tipo de Tarjeta 2 Valor ASCII
CR: Crédito
DB: Débito
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Fecha Contable 6 Valor ASCII. Se utiliza solo con ventas Débito (Opcional)
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Número de Cuenta 19 Valor ASCII. Se utiliza solo con ventas Débito (Opcional)
Largo máximo: 19
Largo mínimo: 0
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Abreviación Tarjeta 2 Valor ASCII (Opcional)
Ver Tabla de abreviación de Tarjetas
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Fecha de Transacción 2 Valor ASCII (Opcional)
Formato: DDMMAAAA
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Hora de Transacción 6 Valor ASCII (Opcional)
Formato: HHMMSS
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Empleado 4 Valor Numérico (Opcional)
Largo máximo: 4
Largo mínimo: 0
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Propina 9 Valor Numérico
Largo máximo: 9
Largo mínimo: 0
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo (byte) XOR del mensaje


Mensaje de Anulación

Esta transacción siempre será responsabilidad de la caja y es quien decide cuando realizar una anulación.

El comando de anulación soporta los siguientes parámetros que pueden ser enviados desde la caja.

using Transbank.POS;
using Transbank.POS.Responses;
//...
RefundResp response = POS.Instance.Refund(21);
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
RefundResponse response = refund(21);

Como respuesta el POS enviará un código de aprobación, acompañado de un código de autorización. En caso de rechazo el código de error está definido en la tabla de respuestas. Ver tabla de respuestas

"FunctionCode": 1210
"ResponseCode": 0
"CommerceCode": 597029414300
"TerminalId": "ABCD1234"
"AuthorizationCode": "ABCD1234"
"OperationID": 123456
"ResponseMessage": "Aprobado"
"Success": true

Diagrama de Secuencia Anulación

  1. La caja envía el requerimiento y espera como respuesta <ACK>/<NAK>, en caso de que llegue un <NAK>, debe reintentar el envío del requerimiento 2 veces más. Si recibe un <ACK> debe esperar la respuesta de la transacción.
  2. El POS envía el requerimiento al autorizador, en caso de ser aprobada se guarda en batch y se envía la respuesta a la caja. En el caso de ser rechazada se envía la respuesta a la caja indicando el error.
  3. La caja al recibir la respuesta envía un <ACK> si el mensaje está correcto, o un <NAK> para el caso en que el <LRC> no corresponda.
  4. El POS al recibir el <ACK> vuelve al inicio a la espera de un nuevo comando, para el caso que reciba un <NAK> o no reciba ninguna validación dentro de los próximos 10 segundos; vuelve a enviar la respuesta. Esto lo repetirá 2 veces más.

Solicitud de Anulación

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 1200
Valor hexadecimal: 0x31 0x32 0x30 0x30
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Número de Operación 6 Valor Numérico, Correlativo de Transacción del POS
Largo máximo: 6
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo (byte) XOR del mensaje

Mensaje en ASCII: <STX>1200|10|<ETX><LRC>

Mensaje en Hexadecimal: {0x02, 0x31, 0x32, 0x30, 0x30, 0x7c, 0x31, 0x30, 0x7c, 0x03, 0x01}

Respuesta de Anulación

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 Valor ASCII: 1210
Valor hexadecimal: 0x31 0x32 0x31 0x30
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código de Respuesta 2 Valor Numérico
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código de Autorización 6 Valor Alfanumérico
Largo máximo: 6
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Número de Operación 6 Valor Numérico, Correlativo de Transacción del POS
Largo máximo: 6
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo (byte) XOR del mensaje

Mensaje de Cierre

Este comando es gatillado por la caja y no recibe parámetros. El POS ejecuta la transacción de cierre contra el Autorizador (no se contempla Batch Upload). Como respuesta el POS Integrado enviará un aprobado o rechazado. (Puedes ver la tabla de respuestas en este link)

using Transbank.POS;
using Transbank.POS.Responses;
//...
CloseResponse response = POS.Instance.Close();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
BaseResponse response = register_close();
}

El resultado del cierre de caja se entrega en la forma de un objeto CloseResponseo una estructura BaseResponse en el caso de la librería C. Si ocurre algún error al ejecutar la acción en el POS se lanzará una excepción del tipo TransbankCloseException.

"FunctionCode": 510
"ResponseMessage": "Aprobado"
"Success": true
"CommerceCode": 550062700310
"TerminalId": "ABC1234C"

Diagrama de Secuencia Cierre

  1. La caja envía el requerimiento y espera como respuesta <ACK>/<NAK>, en caso de que llegue un <NAK>, debe reintentar el envío del requerimiento 2 veces. Si recibe un <ACK> debe esperar la respuesta de la transacción.
  2. El POS envía requerimiento al Autorizador, en caso de ser aprobada, se borra Batch y se envía respuesta a la caja. En caso de ser rechazada se envía respuesta a la caja indicando el error.
  3. La caja al recibir la respuesta envía un <ACK> si el mensaje está correcto, o un <NAK> para el caso en que el LRC no corresponde.
  4. El POS al recibir el <ACK> vuelve al inicio a esperar un nuevo comando, para el caso que recibe un <NAK> vuelve a enviar la respuesta 2 veces más.

Solicitud de Cierre

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 valor ASCII: 0500
valor hexadecimal: 0x30 0x35 0x30 0x30
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Mensaje en ASCII: <STX>0500||<ETX>6

Mensaje en Hexadecimal: {0x02, 0x30, 0x35, 0x30, 0x30, 0x7c, 0x7c, 0x03, 0x06}

Respuesta de Cierre

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0510
valor hexadecimal: 0x30 0x35 0x31 0x30
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Mensaje de Totales

Esta operación le permitirá a la caja obtener desde el POS un resumen con el monto total y la cantidad de transacciones que se han realizado hasta el minuto y que aún permanecen en la memoria del POS.

Además la caja podrá determinar si existen transacciones que no fueron informadas desde el POS, haciendo una comparación de los totales entre la caja y el POS. La impresión del Voucher con el resumen será realizada por el POS.

using Transbank.POS;
using Transbank.POS.Responses;
//...
TotalsResponse response = POS.Instance.Totals();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
TotalsCResponse response = get_totals();
}

El resultado de la transacción entrega en la forma de un objeto TotalsResponse o una estructura TotalsCResponse en el caso de la librería C. Si ocurre algún error al ejecutar la acción en el POS se lanzará una excepción del tipo TransbankTotalsException.

"Function": 710
"Response": "Aprobado"
"TX Count": 3     // Cantidad de transacciones
"TX Total": 15000 // Suma total de los montos de cada transaccion

Diagrama de Solicitud de Totales

Solicitud de Totales

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0700
Valor hexadecimal: 0x30 0x37 0x30 0x30
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo (byte) del XOR del mensaje

Mensaje en ASCII: <STX>0700||<ETX><EOT>

Mensaje en Hexadecimal: {0x02, 0x30, 0x37, 0x30, 0x30, 0x7c, 0x7c, 0x03, 0x04}

Respuesta de Totales

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0710
Valor hexadecimal: 0x30 0x37 0x31 0x30
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Cantidad de transacciones 3 Valor Numérico
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Totales 9 Valor Numérico
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo (byte) del XOR del mensaje

Mensaje en ASCII: <STX>0710|00|1|2000<ETX>J

Mensaje en Hexadecimal: {0x02, 0x30, 0x37, 0x31, 0x30, 0x7c, 0x30, 0x30, 0x7c, 0x31, 0x7c, 0x32, 0x30, 0x30, 0x30, 0x03, 0x04}

Mensaje Detalle de Ventas

Esta operación solicita al POS todas las transacciones que se han realizado y permanecen en la memoria del POS. El parámetro que recibe esta función es de tipo booleano e indica si se realiza la impresión del detalle en el POS. En el caso de que no se solicite la impresión, el POS envía todas las transacciones a la caja, una por una.

using Transbank.POS;
using Transbank.POS.Responses;
//...
bool printOnPOS = false;
List<DetailResponse> Details(printOnPOS)
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
bool print_on_pos = false;
char *response = sales_detail(print_on_pos);
}

El resultado de la transacción entrega una lista de objetos DetailResponse o un char * en el caso de la librería C. Si ocurre algún error al ejecutar la acción en el POS se lanzará una excepción del tipo TransbankSalesDetailException.

[
  {
    "Function": 261,
    "Response": "Aprobado",
    "Commerce Code": 550062700310,
    "Terminal Id": "ABC1234C",
    "Ticket": "AB123",
    "Autorization Code": "XZ123456",
    "Ammount": 15000,
    "Shares Number": 3,
    "Shares Amount": 5000,
    "Last 4 Digits": 6677,
    "Operation Number": 60,
    "Card Type": CR,
    "Accounting Date": ,
    "Account Number": ,
    "Card Brand": AX,
    "Real Date": "28/10/2019 22:35:12",
    "Employee Id": ,
    "Tip": 1500,
  },
  {
    "Function": 261,
    "Response": "Aprobado",
    "Commerce Code": 550062700310,
    "Terminal Id": "ABC1234C",
    "Ticket": "AB123",
    "Autorization Code": "XZ123456",
    "Ammount": 15000,
    "Shares Number": 3,
    "Shares Amount": 5000,
    "Last 4 Digits": 6677,
    "Operation Number": 60,
    "Card Type": CR,
    "Accounting Date": ,
    "Account Number": ,
    "Card Brand": AX,
    "Real Date": "28/10/2019 22:35:12",
    "Employee Id": ,
    "Tip": 1500
  }
]

Diagrama de Detalle de Ventas

Solicitud de Detalle de Ventas

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0260
Valor hexadecimal: 0x30 0x32 0x36 0x30
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Imprimir en Caja 1 Valor Numérico:
Imprimir en POS:: 0
Enviar a Caja:1
Separador 1 Valor ASCII: |
Valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo (byte) del XOR del mensaje

Mensaje en ASCII: <STX>0260|1|<ETX><LRC>

Mensaje en Hexadecimal: {0x02, 0x30, 0x32, 0x36, 0x30, 0x7c, 0x7c, 0x03, 0x07}

Respuesta de Detalle de Ventas

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0261
valor hexadecimal: 0x30 0x35 0x31 0x30
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Ticket 6 Valor ASCII, Número de boleta o ticket
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Codigo de Autorizacion 6 Valor ASCII
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto 9 Valor Numérico
Largo máximo: 9
Largo mínimo: 1
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Número Cuotas 2 Valor Numérico
Largo máximo: 2
Largo mínimo: 1
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto Cuota 9 Valor Numérico (Opcional)
Largo máximo: 9
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Últimos 4 Digitos 4 Valor Numérico (Opcional)
Largo máximo: 4
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Número Operación 6 Valor Numérico, Correlativo de Transacción del POS (Opcional)
Largo máximo: 6
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Tipo de Tarjeta 2 Valor ASCII
CR: Crédito
DB: Débito
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha Contable 6 Valor ASCII. Se utiliza solo con ventas Débito (Opcional)
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de Cuenta 19 Valor ASCII. Se utiliza solo con ventas Débito (Opcional)
Largo máximo: 19
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Abreviación Tarjeta 2 Valor ASCII (Opcional)
Ver Tabla de abreviación de Tarjetas
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha de Transacción 2 Valor ASCII (Opcional)
Formato: DDMMAAAA
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Hora de Transacción 6 Valor ASCII (Opcional)
Formato: HHMMSS
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Empleado 4 Valor Numérico (Opcional)
Largo máximo: 4
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
Propina 9 Valor Numérico
Largo máximo: 9
Largo mínimo: 0
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Mensaje de Carga de Llaves

Esta transacción permite al POS Integrado del comercio requerir cargar nuevas Working Keys desde Transbank. Como respuesta el POS Integrado enviará un aprobado o rechazado. (Puedes ver la tabla de respuestas en este link)

using Transbank.POS;
using Transbank.POS.Responses;
//...
LoadKeysResponse response = POS.Instance.LoadKeys();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
BaseResponse response = load_keys();
}

El resultado de la carga de llaves se entrega en la forma de un objeto LoadKeysResponseo una estructura BaseResponse en el caso de la librería C. Si ocurre algún error al momento de ejecutar la acción en el POS, se lanzará una excepción del tipo TransbankLoadKeysException.

"FunctionCode": 510
"ResponseMessage": "Aprobado"
"Success": true
"CommerceCode": 550062700310
"TerminalId": "ABC1234C"

Diagrama de Secuencia Carga de Llaves

  1. La caja envía el requerimiento y espera como respuesta <ACK>/<NAK>, en caso de que la respuesta sea negativa, se debe reintentar el envío del requerimiento 2 veces. Si recibe un <ACK> se debe esperar la respuesta de la transacción.
  2. El POS envía el requerimiento al Autorizador, en caso de ser aprobado, se guarda la nueva llave y se envía la respuesta a la caja. En caso de ser rechazada se indica el error a la Caja.
  3. Al recibir la respuesta por parte del POS, se debe enviar un <ACK> si el LRC del mensaje es correcto, en caso contrario se debe enviar un <NAK>.
  4. Si el POS recibe un <ACK> vuelve al inicio y espera un nuevo comando, si recibe un <NAK> reintentara el envío de la respuesta 2 veces.

Solicitud de Carga de Llaves

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 valor ASCII: 0800
valor hexadecimal: 0x30 0x38 0x30 0x30
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Mensaje en ASCII: <STX>0800<ETX><VT>

Mensaje en Hexadecimal: {0x02, 0x30, 0x38, 0x30, 0x30, 0x03, 0x0B}

Respuesta de Carga de Llaves

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 Valor Alfanumérico: 0810
valor hexadecimal: 0x30 0x38 0x31 0x30
Separador 1 valor Alfanumérico: |
valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador 1 valor Alfanumérico: |
valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador 1 valor Alfanumérico: |
valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador 1 valor Alfanumérico (Opcional): |
valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Mensaje de Poll

Esta mensaje es enviado por la caja para saber si el POS está conectado. En el SDK el resultado de esta operación es un Booleano o un 0 representado en la constante TBK_OK en el caso de la librería en C. Si ocurre algún error al momento de ejecutar la acción en el POS, se lanzará una excepción del tipo TransbankException.

using Transbank.POS;
//...
bool connected = POS.Instance.Poll();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
int retval = poll();
if (retval == TBK_OK){
    //...
}

Diagrama de Secuencia Poll

  1. La caja envía el requerimiento y espera como respuesta <ACK>, en caso de recibir <ACK>, esto indica que el POS se encuentra operativo y listo para recibir comandos. si no se recibe respuesta o es <NAK> se debe reintentar el envío del comando 2 veces.

Solicitud Poll

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 valor Alfanumérico: 0100
valor hexadecimal: 0x30 0x31 0x30 0x30
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Mensaje en ASCII: <STX>0100<ETX><STX>

Mensaje en Hexadecimal: {0x02, 0x30, 0x31, 0x30, 0x30, 0x03, 0x02}

Respuesta Poll

DATO LARGO COMENTARIO
<ACK> 1 Indica correcta recepción del comando
valor hexadecimal: 0x06

Mensaje de Cambio a POS Normal

Este comando le permitirá a la caja realizar el cambio de modalidad a través de un comando. El POS debe estar en modo integrado y al recibir el comando quedara en modo normal. El resultado de esta operación es un Booleano en el caso del SDK o un 0 representado en la constante TBK_OK en el caso de la librería en C. Si ocurre algún error al momento de ejecutar la acción en el POS, se lanzará una excepción del tipo TransbankException.

using Transbank.POS;
//...
bool connected = POS.Instance.SetNormalMode();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
int retval = set_normal_mode();
if (retval == TBK_OK){
    //...
}

Diagrama de Secuencia Cambio a POS Normal

  1. La caja envía el requerimiento y espera como respuesta <ACK>, en caso de recibir <ACK>, esto indica que el POS cambio se realizó correctamente, si no se recibe respuesta o es <NAK> se debe reintentar el envío del comando 2 veces.

Solicitud Cambio a POS Normal

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 valor ASCII: 0300
valor hexadecimal: 0x30 0x33 0x30 0x30
Separador 1 valor ASCII: |
valor hexadecimal: 0x7c
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Mensaje en ASCII: <STX>0300<ETX><NUL>

Mensaje en Hexadecimal: {0x02, 0x30, 0x33, 0x30, 0x30, 0x03, 0x00}

Respuesta Cambio a POS Normal

DATO LARGO COMENTARIO
<ACK> 1 Indica correcta recepción del comando
valor hexadecimal: 0x06

Operación y Configuración del POS

Cambio Modalidad POS Integrado

  1. Primero debes ingresar al menú Comercio en el POS seleccionando la opción correspondiente en la pantalla del POS.

  2. Luego debes seleccionar la opción Func. Comercio e ingresar la Clave Supervisora confirmando con la tecla Enter (verde). Ingresar al menu Comercio

  3. A continuación selecciona la opción POS Integrado desde la pantalla 2-2

  4. Ingresa nuevamente la Clave Supervisora confirmando con la tecla Enter Pantalla POS Integrado

  5. Finalmente, debes seleccionar la opción Conectar Caja Pantalla POS Integrado

Cambio Modalidad POS Normal

Si el POS se encuentra en modo Integrado, podrás ver una imagen de Transbank en la pantalla. Para volver al modo Normal de forma manual:

  1. Presionar la tecla Asterisco (*) e ingresar la clave supervisora.
  2. Seleccionar la opción Desconectar Caja.
  3. Luego de este el equipo volverá a modo Normal, y veras el menu de venta nuevamente.

Tabla de respuestas

Respuesta Código
Aprobado 00
Rechazado 01
Host no Responde 02
Conexión Fallo 03
Transacción ya Fue Anulada 04
No existe Transacción para Anular 05
Tarjeta no Soportada 06
Transacción Cancelada desde el POS 07
No puede Anular Transacción Débito 08
Error Lectura Tarjeta 09
Monto menor al mínimo permitido 10
No existe venta 11
Transacción No Soportada 12
Debe ejecutar cierre 13
No hay Tono 14
Archivo BITMAP.DAT no encontrado. Favor cargue 15
Error Formato Respuesta del HOST 16
Error en los 4 últimos dígitos. 17
Menú invalido 18
ERROR_TARJ_DIST 19
Tarjeta Invalida 20
Anulación. No Permitida 21
TIMEOUT 22
Impresora Sin Papel 24
Fecha Invalida 25
Debe Cargar Llaves 26
Debe Actualizar 27
Error en Número de Cuotas 60
Error en Armado de Solicitud 61
Problema con el Pinpad interno 62
Error al Procesar la Respuesta del Host 65
Superó Número Máximo de Ventas, Debe Ejecutar Cierre 67
Error Genérico, Falla al Ingresar Montos 68
Error de formato Campo de Boleta MAX 6 70
Error de Largo Campo de Impresión 71
Error de Monto Venta, Debe ser Mayor que 0 72
Terminal ID no configurado 73
Debe Ejecutar CIERRE 74
Comercio no tiene Tarjetas Configuradas 75
Supero Número Máximo de Ventas, Debe Ejecutar CIERRE 76
Debe Ejecutar Cierre 77
Esperando Leer Tarjeta 78
Solicitando Confirmar Monto 79
Solicitando Ingreso de Clave 81
Enviando transacción al Host 82
Error Cantidad Cuotas 88
Declinada 93
Error al Procesar Respuesta 94
Error al Imprimir TASA 95

Tabla de Abreviación de Tarjetas

Tarjeta Abreviación
VISA VI
MASTERCARD MC
CABAL CA
CREDENCIAL CR
AMEX AX
CERRADA CE
DINNERS DC
PRESTO TP
MAGNA MG
MAS (CENCOSUD) TM
RIPLEY RP
EXTRA EX
CMR TC
REDCOMPRA DB