API Referencia
undefined

POS Autoservicio

Protocolo de Comunicación

La comunicación a través de una puerta serial RS232 tiene velocidades que van desde los 1200 Bps hasta 115200 Bps (8N1). La velocidad inicial del POS es de 19200 Bps 8N1. La comunicación a través del puerto USB, esta con velocidad de 115200 Bps (8N1). Si cambia el tipo de comunicación de serial a USB, quedará seteada automáticamente a la velocidad anteriormente descrita.

Diagrama de Comunicación

Flujo de comunicación

Termino Descripción
ACK Lo envía el POS o la caja como aviso de recepción OK.
Hex: 0x06
NAK Lo envía el POS o la caja cuando el LRC calculado no corresponde al enviado.
Hex: 0x15
Timeout1 Es el tiempo de espera del ACK o NAK para reintentar el envío del requerimiento por la caja y la respuesta desde el POS.
LRC Es un byte que se concatena luego del <FIN COMANDO> y que se calcula realizando un XOR byte a byte del mensaje, el cual consta de: <DATA> + <FIN COMANDO>.
Timeout2 Es el tiempo de espera de la respuesta por la caja luego de recibir el ACK del requerimiento.
STX Indica el INICIO del mensaje
Hex: 0x02
ETX Indica el FIN del mensaje
Hex: 0x03

Ejemplo de calculo LRC

Calcular el LRC del siguiente comando: 0200|123|, que en notación hexadecimal seria: 0x30 0x32 0x30 0x30 0x7C 0x31 0x32 0x33 0x7C

Se ejecuta la siguiente operación:

((((((((30 XOR 32) XOR 30) XOR 30) XOR 7C) XOR 31) XOR 32) XOR 33) XOR 7C)

Esto da como resultado 32.

Primeros pasos

Listar puertos disponibles


import cl.transbank.pos.POSAutoservicio;
//...
POSAutoservicio pos = new POSAutoservicio();
List<String> ports = pos.listPorts();


using Transbank.POSAutoservicio;
//...
List<string> ports = POSIntegrado.Instance.ListPorts();


pos.listPorts().then( (ports) => {
    console.log(ports);
}).catch( (err) => {
    console.log('Ocurrió un error inesperado', err);
});

Puedes utilizar la función específica de cada uno de los SDK, para identificar los puertos y seleccionar el que se haya conectado al POS.

Abrir un puerto serial


import cl.transbank.pos.POSAutoservicio;
//...
POSAutoservicio pos = new POSAutoservicio();
String port = "COM4";
int baudRate = 19200;
pos.openPort(port, baudRate);


using Transbank.POSAutoservicio;
//...
string portName = "COM3";
POSAutoservicio.Instance.OpenPort(portName);


let portName = "/dev/tty.usbserial-1410"; // Ejemplo en MAC
let portName = "COM4"; // Ejemplo en caso de Windows
pos.connect(portName).then( (response) => {
    console.log('Conectado correctamente');
}).catch( (err) => {
    console.log('Ocurrió un error inesperado', err);
});

Para abrir un puerto serial y comunicarte con el POS Autoservicio, necesitarás el nombre del puerto. También necesitarás el baudrate al cual está configurado el puerto serial del POS Autoservicio (por defecto es 19200).

Si el puerto no puede ser abierto, se lanzará una excepción TransbankException en .NET y Java.

Cerrar un puerto serial


import cl.transbank.pos.POSAutoservicio;
//...
POSAutoservicio pos = new POSAutoservicio();
pos.closePort();


using Transbank.POSAutoservicio;
//...
POSAutoservicio.Instance.ClosePort();


pos.disconnect().then( (response) => {
    console.log('Puerto desconectado correctamente');
}).catch( (err) => {
    console.log('Ocurrió un error inesperado', err);
});

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

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: Número de la operación de venta.
  • Campo impresión: Indica si el POS debe devolver un voucher formateado.
  • Enviar Mensaje: Indica al POS si debe enviar a la caja de mensajes de estatus de la transacción mientras se realiza la venta.

import cl.transbank.pos.POSAutoservicio;
import cl.transbank.pos.responses.autoservicio.*;
//...
POSAutoservicio pos = new POSAutoservicio();
SaleResponse response = pos.sale(amount, ticket, true);


using Transbank.POSAutoservicio;
using Transbank.Responses.CommonResponses;
using Transbank.Responses.AutoservicioResponse;
//...
Task<SaleResponse> response = POSAutoservicio.Instance.Sale(amount, ticket, true);


pos.sale(1500, '12423').then( (response) => {
	console.log('Sale finalizado. Respuesta', response);
}).catch( (err) => {
	console.log('Ocurrió un error inesperado', err);
});


{
	"Function": 210,
	"ResponseCode": 0,
	"ResponseMessage": "Aprobado",
	"Commerce Code": 550062700310,
	"Terminal Id": "ABC1234C",
	"Ticket": "ABC123",
	"Authorization Code": "XZ123456",
	"Amount": 15000,
	"Last 4 Digits": 6677,
	"Operation Number": 60,
	"Card Type": "CR",
	"Accounting Date": "28/10/2019 22:35:12",
	"Account Number": "30000000000",
	"Card Brand": "AX",
	"Real Date": "28/10/2019 22:35:12",
	"Printing Field:": List<string>,
	"Shares Type": 3,
	"Shares Number": 3,
	"Shares Amount": 5000,
	"Shares Type Gloss": " "
}

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.
  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 de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto 9 Valor Numérico que debe ser convertido a hexadecimal.
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de ticket / boleta 20 Valor ASCII, Número de boleta o ticket, que debe ser convertido a hexadecimal
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Campo impresión 1 Indica si entrega voucher formateado 1 = Sí, 0 = No
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Enviar mensajes 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 cálculo 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: 0210
valor hexadecimal: 0x30 0x32 0x31 0x30
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de ticket / boleta 20 Valor Alfanumérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Código de Autorización 6 Valor Alfanumérico (opcional)
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto 9 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Últimos 4 dígitos tarjeta 4 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de operación 6 Correl
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Tipo de Tarjeta 2 CR: Crédito
DB: Débito
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha Contable 6 Valor ASCII. Se utiliza si es tarjeta de Débito
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de Cuenta 19 Valor ASCII. Se utiliza si es tarjeta de Débito
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Abreviación Tarjeta 2 Ejemplo:
VI = VISA
MC = Mastercard
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha transacción 8 Formato: DDMMAAAA
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Hora transacción 6 Formato: HHMMSS
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Campo impresión Variable (opcional) Campo depende si la caja requiere voucher formateado
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Tipo cuota 2 (opcional) Campo correspondiente al tipo de cuota. Depende si el comercio cuenta con el producto cuotas contratado.
Valores:
01 = cuota normal
03 = cuota contado
04 = n cuotas
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Número cuota 2 (opcional) Campo correspondiente al número de cuota. Depende si comercio cuenta con el producto cuotas contratado.
Valores;
02 = 2 cuotas
03 = 3 uotas
xx = xx cuotas
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Monto cuota 12 máximo (opcional) Campo correspondiente al monto de cuota. Depende si comercio cuenta con el producto cuotas contratado.
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Glosa tipo cuota 30 (máximo) Campo correspondiente a la glosa del tipo de cuota. Depende si comercio cuenta con el producto cuotas contratado.
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Ejemplo

Requerimiento:
<STX>0200|10000||1|0<ETX><LRC>

Respuesta:
<STX>0210|00|597033311777|V1700005||395561|000010000|1679| 000054|CR|||VI|2610 2018|145117| COMPROBANTE DE VENTA CON PIN PAGO EN CUOTAS TARJETA DE CREDITO Pruebas UX100 Desa Huerfanos 770 Piso 8 Santiago 597033311777-U18.1A1 FECHA HORA TERMINAL26/10/18 14:51:17 V1700005 NUMERO DE TARJETA B-VI************1679 TOTAL: $ 10.000NUMERO DE CUOTAS: 02TIPO DE CUOTAS: CUOTAS SIN INTERESVALOR CUOTA 1: $ 5.000VALOR CUOTA 2: $ 5.000NUMERO DE BOLETA: NUMERO DE OPERACION: 000054CODIGO DE AUTORIZACION: 395561 GRACIAS POR SU COMPRA ACEPTO PAGAR SEGÚN CONTRATO CON EMISOR |01|03|5000|CUOTAS SIN INTERES <ETX><LRC>

Mensaje de venta multicódigo

Este comando es enviado por la caja para solicitar la ejecución de una venta para los distintos códigos de comercio asociados en el POS. Solo los códigos de comercios virtuales o hijos pueden realizar ventas, el código de comercio del POS es distinto y no puede realizar ventas. 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: Número de la operación de venta.
  • Campo Impresión: Indica si el POS debe devolver un voucher formateado.
  • Enviar Mensaje: Indica al POS si debe enviar a la caja mensajes de estatus de la transacción mientras se realiza la venta.
  • Comercio prestador: Código de comercio que ejecutará la venta.

import cl.transbank.pos.POSAutoservicio;
import cl.transbank.pos.responses.autoservicio.*;

POSAutoservicio pos = new POSAutoservicio();
MultiCodeSaleResponse response = pos.multiCodeSale(amount, ticket, commerceCode, true, true);


using Transbank.POSAutoservicio;
using Transbank.Responses.CommonResponse;
using Transbank.Responses.AutoservicioResponse;

Task<MultiCodeSaleResponse> response = POSAutoservicio.Instance.MultiCodeSale(amount, ticket, commerceCode, true, true);


// No Disponible

Solicitud de Venta Multicódigo

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 valor ASCII: 0270
valor hexadecimal: 0x30 0x32 0x37 0x30
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto 9 Valor numérico que debe ser convertido a hexadecimal.
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de ticket / boleta 20 Valor ASCII, Número de boleta o ticket, que debe ser convertido a hexadecimal
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Campo impresión 1 Indica si entrega voucher formateado 1 = Sí, 0 = No
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Enviar mensajes 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
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Comercio prestador 12 Valor que indica el código de comercio del prestador
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03.
LRC 1 Resultado del calculo del LRC del mensaje.

Respuesta

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0271
valor hexadecimal: 0x30 0x32 0x37 0x31
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de ticket / boleta 20 Valor Alfanumérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Código de Autorización 6 Valor Alfanumérico (opcional)
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto 9 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Últimos 4 dígitos tarjeta 4 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de operación 6 Correl
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Tipo de Tarjeta 2 CR: Crédito
DB: Débito
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha Contable 6 Valor ASCII. Se utiliza si es tarjeta de débito
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de cuenta 19 Valor ASCII. Se utiliza si es tarjeta de débito
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Abreviación tarjeta 2 Ejemplo: VI=VISA, MC=Mastercard
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha transacción 8 Formato: DDMMAAAA
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Hora transacción 6 Formato: HHMMSS
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Comercio Prestador 12 Valor que indica el código de comercio del prestador
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Campo impresión Variable (opcional) Campo depende si la caja requiere voucher formateado
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Tipo cuota 2 (opcional) Campo correspondiente al tipo de cuota. Depende si el comercio cuenta con el producto cuotas contratado.
Valores:
01 = cuota normal
03 = cuota contado
04 = n cuotas
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Número cuota 2 (opcional) Campo correspondiente al número de cuota. Depende si comercio cuenta con el producto cuotas contratado.
Valores;
02 = 2 cuotas
03 = 3 uotas
xx = xx cuotas
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Monto cuota 12 máximo (opcional) Campo correspondiente al monto de cuota. Depende si comercio cuenta con el producto cuotas contratado.
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Glosa tipo cuota 30 (máximo) Campo correspondiente a la glosa del tipo de cuota. Depende si comercio cuenta con el producto cuotas contratado.
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
LRC 1 Resultado del calculo del LRC del mensaje

Ejemplo

Requerimiento:
<STX>0270|25000|123456|1|0|597001600402<ETX><LRC>

Respuesta:
<STX>0271|00|597001600402|653UX003|123456|831679| 000026001|2383|000039|CR||| AX|25112020|145014|597001600403| **************************************** AVISO DE PREMIO **************************************** PRUEBA TITULO LARGO 597001600403 25/11/2020 PEL3DTHMONTO FELICITACIONES USTED SE HA GANADO XYX H2H PEL 3 - PREMIO COMIENZA Y TERMINA CON - PEL 3 H2H XYX EQUIVALENTES A : 1500 CODIGO DEL PREMIO 831679- 00014340 ESTE VALOR SERA ABONADO EN SU ESTADO DE CUENTA SIGUIENTE O SUBSIGUIENTE COMPROBANTE DE VENTA PAGO EN CUOTAS TARJETA DE CREDITO PRUEBA TITULO LARGO Multicomercio Paraiso Springfield 597001600402-U20.1V1 597001600403 FECHA HORA TERMINAL25/11/20 14:50:14 653UX003 NUMERO DE TARJETA C-AX***********2383 AMEX A000000025010402TOTAL: $ 26.001NUMERO DE CUOTAS : 06TIPO DE CUOTAS : CUOTAS SIN INTERESMONTO CUOTA : $ 4.336TASA INTERES : 0,00%NUMERO DE BOLETA: 123456NUMERO DE OPERACION: 000039CODIGO DE AUTORIZACION: 831679 GRACIAS POR SU COMPRA ACEPTO PAGAR SEGÚN CONTRATO CON EMISOR TRANSACCION PREMIADA CODIGO DEL PREMIO :00014340 |04|06|4336|CUOTAS SIN INTERES <ETX><LRC>

Mensaje de Última Venta

Comando enviado por la caja solicitando al POS los datos de la última venta guardada en memoria, teniendo como dato relevante en la respuesta el número de ticket o boleta.

Este comando debe ser utilizado por la caja para el caso en que no recibe respuesta al comando de venta, y validará el campo ticket o boleta contra el número de ticket asignado al cobro de la transacción, en caso que los números comparados sean distintos, la caja debe reintentar el cobro ejecutando nuevamente de la transacción de venta, para el caso en que coinciden, significa que el cobro ya fue realizado.


import cl.transbank.pos.POSAutoservicio;
import cl.transbank.pos.responses.autoservicio.*;

POSAutoservicio pos = new POSAutoservicio();
LastSaleResponse lastSaleResponse = pos.lastSale();


using Transbank.POSAutoservicio;
using Transbank.Responses.AutoservicioResponse;

Task<LastSaleResponse> response = POSAutoservicio.Instance.LastSale();


POS.getLastSale().then( (response) => {
  console.log('getLastSale ejecutado. Respuesta: ', response);
}).catch( (err) => {
  console.log('Ocurrió un error inesperado', err);
});


{
    "Function": 260,
    "ResponseCode": 0,
    "ResponseMessage": "Aprobado",
    "Commerce Code": 550062700310,
    "Terminal Id": "ABC1234C",
    "Ticket": "AB123",
    "Authorization Code": "XZ123456",
    "Amount": 15000,
    "Last 4 Digits": 6677,
    "Operation Number": 60,
    "Card Type": "CR",
    "Accounting Date": "28/10/2019 22:35:12",
    "Account Number": "300000000",
    "Card Brand": "AX",
    "Real Date": "28/10/2019 22:35:12",
    "Printing Field": List<string>,
    "Shares Type": 3,
    "Shares Number": 3,
    "Shares Amount": 5000,
    "Shares Type Gloss": " "
}

Diagrama de Secuencia Última Venta

  1. La caja envía el requerimiento y espera como respuesta <ACK>. Si recibe un <ACK> la caja debe esperar la respuesta del POS, en caso de recibir un <NAK> debe reintentar enviando el comando 2 veces.
  2. Una vez recibida la respuesta, la caja calcula el <LRC> (especificado más adelante en el protocolo de comunicación) del mensaje y lo compara con el recibido, si coinciden la caja envía un <ACK> al POS dando por finalizado el comando, en caso contrario envía un <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 de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Campo impresión 1 Indica si entrega voucher formateado 1 = Sí, 0 = No
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03.
LRC 1 Resultado del calculo del LRC del mensaje.

Respuesta

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 de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de ticket / boleta 20 Valor Alfanumérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Código de Autorización 6 Valor Alfanumérico (opcional)
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Monto 9 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Últimos 4 dígitos tarjeta 4 Valor Numérico
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de operación 6 Correl
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Tipo de Tarjeta 2 CR: Crédito
DB: Débito
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha Contable 6 Valor ASCII. Se utiliza si es tarjeta de débito
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Número de cuenta 19 Valor ASCII. Se utiliza si es tarjeta de débito
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Abreviación tarjeta 2 Ejemplo: VI=VISA, MC=Mastercard
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Fecha transacción 8 Formato: DDMMAAAA
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Hora transacción 6 Formato: HHMMSS
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Campo impresión Variable (opcional) Campo depende si la caja requiere voucher formateado
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Tipo cuota 2 (opcional) Campo correspondiente al tipo de cuota. Depende si el comercio cuenta con el producto cuotas contratado.
Valores:
01 = cuota normal
03 = cuota contado
04 = n cuotas
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Número cuota 2 (opcional) Campo correspondiente al número de cuota. Depende si comercio cuenta con el producto cuotas contratado.
Valores;
02 = 2 cuotas
03 = 3 uotas
xx = xx cuotas
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Monto cuota 12 máximo (opcional) Campo correspondiente al monto de cuota. Depende si comercio cuenta con el producto cuotas contratado.
Separador de campo 1 (opcional) valor ASCII: |
valor hexadecimal: 0x7c
Glosa tipo cuota 30 (máximo) Campo correspondiente a la glosa del tipo de cuota. Depende si comercio cuenta con el producto cuotas contratado.
<ETX> 1 Indica el fin de texto o comando
valor hexadecimal: 0x03
<LRC> 1 Resultado del calculo del LRC del mensaje

Ejemplo

Requerimiento:
<STX>0250|1<ETX><LRC>

Respuesta:
<STX>0260|00|597033311777|V1700005||389169|000005360|1679|000055| CR|||VI|2610 2018|145255| COMPROBANTE DE VENTA CON PIN TARJETA DE CREDITO Pruebas UX100 Desa Huerfanos 770 Piso 8 Santiago 597033311777-U18.1A1 *** DUPLICADO *** FECHA HORA TERMINAL26/10/18 14:52:55 V1700005 NUMERO DE TARJETA B-VI************1679 TOTAL: $ 5.360NUMERO DE BOLETA: NUMERO DE OPERACION: 000055CODIGO DE AUTORIZACION: 389169 GRACIAS POR SU COMPRA ACEPTO PAGAR SEGÚN CONTRATO CON EMISOR |00|00||<ETX><LRC>

Mensaje de Cierre

Esta es una transacción administrativa que se debe ejecutar diariamente o como mínimo una vez a la semana. Esta transacción es gatillada por la caja, y no recibe parámetros, el POS ejecuta la transacción de cierre contra la caja, enviando como parámetro el tipo de impresión (0=Parámetros de impresión, 1=voucher formateado). Como respuesta a la caja se enviará un aprobado o rechazado, y los datos de impresión del voucher para el caso en que fuera aprobado.


import cl.transbank.pos.POSAutoservicio;
import cl.transbank.pos.responses.autoservicio.*;

POSAutoservicio pos = new POSAutoservicio();
CloseResponse response = pos.close();


using Transbank.POSAutoservicio;
using Transbank.Responses.AutoservicioResponse;

Task<CloseResponse> response = POSAutoservicio.Instance.Close();


pos.closeDay().then( (response) => {
  console.log('closeDay ejecutado. Respuesta: ', response);
}).catch( (err) => {
  console.log('Ocurrió un error inesperado', err);
});


{
    "FunctionCode": 510,
    "ResponseCode": 0,
    "ResponseMessage": "Aprobado",
    "Success": true,
    "CommerceCode": 550062700310,
    "TerminalId": "ABC1234C",
    "Printing Field": List<string>
}

Diagrama de 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 ejecuta un reinicio del contador de transacciones en el autorizador y se envía respuesta a la caja. En caso de ser rechazada se envía respuesta a la caja indicando el estado del rechazo.
  3. La caja al recibir la respuesta envía un <ACK> al POS 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 de campo 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Campo impresión 1 Indica si entrega voucher formateado
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo del LRC del mensaje

Respuesta

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 de campo 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador de campo 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código de comercio 12 Valor Numérico
Separador de campo 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Terminal ID 8 Valor Alfanumérico
Separador de campo 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Campo Impresión Variable (opcional) Campo depende si la caja requiere voucher formateado
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo del LRC del mensaje

Ejemplo

Requerimiento:
<STX>0500|0<ETX><LRC>

Respuesta:
<STX>0510|00|597029414300|70000537<ETX><LRC>

Mensaje de Carga de Llaves

Esta transacción permite al Aplicativo de caja del comercio requerir y cargar nuevas llaves Working Key, desde Transbank. Su uso debe ser limitado como prueba de comunicación IP para validar conectividad hacia el exterior.


import cl.transbank.pos.POSAutoservicio;
import cl.transbank.pos.responses.common.*;

POSAutoservicio pos = new POSAutoservicio();
LoadKeysResponse response = pos.loadKeys();


using Transbank.POSAutoservicio;
using Transbank.Responses.CommonResponses;

Task<LoadKeysResponse> response = POSAutoservicio.Instance.LoadKeys();


pos.loadKeys().then( (response) => {
  console.log('loadKeys ejecutado. Respuesta: ', response);
}).catch( (err) => {
  console.log('Ocurrió un error inesperado', err);
});


{
  "FunctionCode": 810,
  "ResponseCode": 0,
  "ResponseMessage": "Aprobado",
  "Success": true,
  "Commerce Code": 550062700310,
  "Terminal Id": "ABC1234C"
}

Diagrama de Carga de Llaves

  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 guarda nueva llave y se envía respuesta a la caja. En caso de ser rechazada se envía respuesta a la caja indicando el estado de rechazo.
  3. La caja al recibir la respuesta envía un <ACK> al POS si el mensaje está correcto, o un <NAK> para el caso en que el <LRC> no corresponda.
  4. El POS al recibir el <ACK> desde la caja 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 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 cálculo del LRC del mensaje

Respuesta

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

Ejemplo

Requerimiento:
<STX>0800<ETX><LRC>

Respuesta:
<STX>0810|00|597029414300|70000537<ETX><LRC>

Mensaje de Poll

Este mensaje es enviado por la caja para saber si el POS está conectado.


import cl.transbank.pos.POSAutoservicio;

POSAutoservicio pos = new POSAutoservicio();
boolean pollResult = pos.poll();


using Transbank.POSAutoservicio;

Task<bool> connected = POSAutoservicio.Instance.Poll();


pos.poll().then( (res) => {
  console.log('Resultado ejecución: ', res);
}).catch( (err) => {
  console.log('Ocurrió un error inesperado', err);
});

True

Diagrama Poll

  1. La caja envía el requerimiento y espera como respuesta <ACK>. Si recibe un <ACK> indica que el POS está funcionando y listo para recibir un comando.
  2. En caso de no recibir el <ACK>, indica existe algún tipo de problema con la comunicación entre la caja y el POS, y debe reintentar enviando el comando de POLLING al menos 3 veces.

Solicitud de poll

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0100
Valor hexadecimal: 0x30 0x31 0x30 0x30
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo del LRC del mensaje

Respuesta

DATO LARGO COMENTARIO
<ACK> 1 Comando recibido OK
Valor hexadecimal: 0x06

Ejemplo

Requerimiento:
<STX>0100<ETX><LRC>

Respuesta:
<ACK>

Mensaje de Inicialización

Esta es una transacción administrativa que se utiliza para cargar los parámetros y aplicativo en el terminal de autoservicio de Transbank. Es usada por los técnicos al realizar la instalación de los equipos en el comercio. Previo a la ejecución de esta transacción, es necesario realizar una transacción de cierre. Debido a que la transacción de Inicialización tiene un tiempo superior a una venta normal y el tiempo en que el POS queda fuera de comunicación con la caja es variable, se dividió en 2 comandos:

  • Transacción de Inicialización: Indica la acción.
  • Respuesta de Inicialización: Utilizado para conocer el resultado de la acción.

Posterior a la ejecución del comando de Inicialización, el módulo de auto atención del comercio, enviará un comando “Polling” para saber si el POS está activo o no. Una vez que se encuentre activo (enviando como respuesta un <ACK>) el módulo de auto atención enviará el comando: respuesta de Inicialización donde se responderá si la acción fue exitosa o no. En caso de que la inicialización no fuera exitosa el POS podrá seguir realizando ventas sin los parámetros actualizados.

  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 guarda nueva llave y se envía respuesta a la caja. En caso de ser rechazada se envía respuesta a la caja indicando el estado de rechazo.
  3. La caja al recibir la respuesta envía un <ACK> al POS si el mensaje está correcto, o un <NAK> para el caso en que el <LRC> no corresponda.
  4. El POS al recibir el <ACK> desde la caja vuelve al inicio a esperar un nuevo comando, para el caso que recibe un <NAK> vuelve a enviar la respuesta 2 veces más.

Transacción de inicialización

import cl.transbank.pos.POSAutoservicio;

POSAutoservicio pos = new POSAutoservicio();
boolean pollResult = pos.initialization();


Transacción de inicialización

using Transbank.POSAutoservicio;

Task<bool> initialized = POSAutoservicio.Instance.Initialization();


Transacción de inicialización

pos.initialization().then( (res) => {
  console.log('Resultado ejecución: ', res);
}).catch( (err) => {
  console.log('Ocurrió un error inesperado', err);
});

Solicitud de inicialización

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0070
Valor hexadecimal: 0x30 0x30 0x37 0x30
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo del LRC del mensaje

Respuesta

DATO LARGO COMENTARIO
<ACK> 1 Comando recibido OK
Valor hexadecimal: 0x06

Ejemplo

Requerimiento:
<STX>0070<ETX><LRC>

Respuesta:
<ACK>


Transacción de respuesta inicialización

import cl.transbank.pos.POSAutoservicio;
import cl.transbank.pos.responses.autoservicio.*;

POSAutoservicio pos = new POSAutoservicio();
InitializationResponse response = pos.initializationResponse();


Transacción de respuesta inicialización

using Transbank.POSAutoservicio;
using Transbank.Responses.AutoservicioResponse;

Task<InitializationResponse> response =
POSAutoservicio.Instance.InitializationResponse();


Transacción de respuesta inicialización

POS.initializationResponse().then( (res) => {
  console.log('Resultado ejecución: ', res);
}).catch( (err) => {
  console.log('Ocurrió un error inesperado', err);
});


{
  "FunctionCode": 1080,
  "ResponseCode": 0,
  "ResponseMessage": "Aprobado",
  "Success": true,
  "Real Date": "28/10/2019 22:35:12"
}

Solicitud de respuesta de inicialización

DATO LARGO Comentario
<STX> 1 Indica el inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 0080
Valor hexadecimal: 0x30 0x30 0x38 0x30
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo del LRC del mensaje

Respuesta

DATO LARGO COMENTARIO
<STX> 1 Indica inicio de texto o comando
Valor hexadecimal: 0x02
Comando 4 Valor ASCII: 1080
Valor hexadecimal: 0x31 0x30 0x38 0x30
Separador de campo 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Código Respuesta 2 Valor Numérico
Separador de campo 1 Valor ASCII: |
Valor hexadecimal: 0x7c
Fecha transacción 8 Formato: DDMMAAAA
Separador de campo 1 valor ASCII: |
valor hexadecimal: 0x7c
Hora transacción 6 Formato: HHMMSS
<ETX> 1 Indica el fin de texto o comando
Valor hexadecimal: 0x03
<LRC> 1 Resultado del cálculo del LRC del mensaje

Ejemplo

Requerimiento:
<STX>0080<ETX><LRC>

Respuesta:
<STX>1080|90|27022016|120628<ETX><LRC>

Vouchers

Los voucher serán generados por el POS para los casos en que la caja lo indique en el comando de venta, así como también para los duplicados, anulaciones y cierres. Cada línea contendrá 40 caracteres, los que se concatenan en un solo buffer que será enviado en campo de impresión en la respuesta a transacciones de venta y cierre. La caja al recibir este buffer debe considerar que cada 40 caracteres conforman una línea de impresión. Con relación al largo del Voucher, este dependerá del tipo de transacción a imprimir.

Ejemplos

Transacción Venta en Promoción Reporte de Cierre del Terminal
Diagrama de Comunicación Diagrama de Comunicación
Caracteres máximos permitidos
Ancho: 40
Largo: 29
Caracteres máximos permitidos
Ancho: 40
Largo: 18

Tabla de Respuestas

Respuesta Código
Aprobado 00
Rechazado 01
Autorizador 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 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
Error Encriptando PAN (BCYCLE) 14
Error Operando con Débito (BCYCLE) 15
Solicitando Conformar Monto 80
Solicitando Ingreso de Clave 81
Enviando transacción al Autorizador 82
Selección menú crédito/redcompra 83
Opere tarjeta 84
Selección de cuotas 85
Ingreso de cuotas 86
Confirmación de cuotas 87
Aceptar consulta cuotas 88
Opción mes de gracia 89
Inicialización Exitosa 90
Inicialización Fallida 91
Lector no Conectado 92
Consultando cuota al Autorizador 93

Toda transacción cuyo código de respuesta sea distinto de '0' será considerada como un rechazo. Por secreto bancario, el detalle de la causa del rechazo no será entregado al comercio.