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, N
ingún bit de paridad y 1
bit de parada.
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.POSIntegrado;
using Transbank.Exceptions.CommonExceptions;
using Transbank.Exceptions.IntegradoExceptions;
using Transbank.Responses.CommonResponses;
using Transbank.Responses.IntegradoResponses;
#include "transbank.h"
#include "transbank_serial_utils.h"
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.exceptions.common.*;
import cl.transbank.pos.exceptions.integrado.*;
import cl.transbank.pos.responses.common.*;
import cl.transbank.pos.responses.integrado.*;
import POS from "transbank-pos-sdk-web";
Listar puertos disponibles
Si los respectivos drivers están instalados, entonces puedes usar la función ListPorts()
del paquete
Transbank.POS.Utils
en .NET, y el metodo listPorts()
de la clase POS en Java, para identificar los puertos que se encuentren disponibles y seleccionar el que
corresponda con el puerto donde conectaste el POS Integrado.
using Transbank.POSIntegrado;
//...
List<string> ports = POSIntegrado.Instance.ListPorts();
#include "transbank_serial_utils.h"
//...
char *ports = list_ports();
import cl.transbank.pos.POSIntegrado;
//...
POSIntegrado pos = new POSIntegrado();
List<String> ports = pos.listPorts();
import POS from "transbank-pos-sdk-web";
POS.getPorts().then((ports) => {
console.log('ports');
}).catch(() => {
alert("No se pudo obtener puertos. ¿Está corriendo el servicio Transbank POS?");
})
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
en .NET, y cl.transbank.pos.utils.TbkBaudRate
en Java.
Si el puerto no puede ser abierto, se lanzará una exception TransbankException
en .NET y Java.
using Transbank.POSIntegrado;
//...
string portName = "COM3";
POSIntegrado.Instance.OpenPort(portName, 115200);
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
char *portName = "COM4";
int retval = open_port(portName, 115200);
if ( retval == TBK_OK ){
//...
}
import cl.transbank.pos.POSIntegrado;
//...
POSIntegrado pos = new POSIntegrado();
String port = "COM4";
pos.openPort(port);
import POS from "transbank-pos-sdk-web";
POS.openPort("COM4").then((result) => {
if (result === true) {
alert("Conectado satisfactoriamente")
} else {
alert("No se pudo conectar conectado")
}
}).catch(error => console.log(error))
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.POSIntegrado;
//...
POSIntegrado.Instance.ClosePort();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
retval = close_port();
if(retval == SP_OK){
//...
}
import cl.transbank.pos.POSIntegrado;
//...
POSIntegrado pos = new POSIntegrado();
pos.closePort();
import POS from "transbank-pos-sdk-web";
POS.closePort();
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.POSIntegrado;
using Transbank.Responses.IntegradoResponse;
//...
Task<SaleResponse> response = POSIntegrado.Instance.Sale(amount, ticket);
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
char* response = sale(amount, ticket, false);
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.integrado.*;
//...
POSIntegrado pos = new POSIntegrado();
SaleResponse response = pos.sale(amount, ticket, true);
import POS from "transbank-pos-sdk-web";
POS.doSale(this.total, "ticket1").then((saleDetails) => {
console.log(saleDetails);
//Acá llega la respuesta de la venta. Si saleDetails.responseCode es 0, entonces la compra fue aprobada
if (saleDetails.responseCode===0) {
alert("Transacción aprobada", "", "success");
} else {
alert("Transacción rechazada o fallida")
}
});
El resultado de la venta se entrega en la forma de un objeto SaleResponse
en .NET y Java, 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
en .NET y en Java.
{
"Function": 210,
"Response": "Aprobado",
"Commerce Code": 550062700310,
"Terminal Id": "ABC1234C",
"Ticket": "AB123",
"Authorization Code": "XZ123456",
"Amount": 15000,
"Shares Number": 3,
"Shares Amount": 5000,
"Last 4 Digits": 6677,
"Operation Number": 60,
"Card Type": "CR",
"Accounting Date": "28/10/2019 22:35:12",
"Account Number": "30000000",
"Card Brand": "AX",
"Real Date": "28/10/2019 22:35:12",
"Employee Id": 1,
"Tip": 1500
}
- 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. - 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)
- La caja al recibir la respuesta envía un
<ACK>
si el mensaje está correcto, o un<NAK>
para el caso en que elLRC
no corresponde. - 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 |
Mensaje en ASCII: <STX>0200|{amount}|{ticket}|||{Convert.ToInt32(sendStatus)}|<ETX><LRC>
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 |
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 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 puede 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
: 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.Comercio prestador
: Es el código de comercio que ejecutara la 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.POSIntegrado;
using Transbank.Responses.IntegradoResponse;
//...
Task<MultiCodeSaleResponse> response = POSIntegrado.Instance.MultiCodeSale(amount, ticket, commerceCode, true);
// No Disponible
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.integrado.*;
//...
POSIntegrado pos = new POSIntegrado();
MultiCodeSaleResponse response = pos.multiCodeSale(amount, ticket, commerceCode, true);
import POS from "transbank-pos-sdk-web";
POS.doMulticodeSale(this.total, "ticket12", "597029414301", (data) => {
console.log('Mensaje intermedio', data)
}).then((saleResponse) => {
console.log(saleResponse)
//Acá llega la respuesta de la venta. Si saleResponse.responseCode es 0, entonces la comproa fue aprobada
if (saleResponse.responseCode === 0) {
// Mostramos mensaje de éxito y limpiamos el total de la venta si response code es 0
swal("Transacción aprobada", "", "success")
this.clearTotal()
} else {
// Mostramos mensaje de error si response code es distinto de 0
swal("Transacción fallida", "La transacción no ha sido aprobada. Puede reintentar pago", "error")
}
this.saleResponse = saleResponse
});
El resultado de la venta se entrega en la forma de un objeto MultiCodeSaleResponse
en .NET y en Java. Si ocurre algún error al ejecutar la acción en el POS se lanzará una excepción del tipo TransbankMultiCodeSaleException
.
{
"Function": 210,
"Response": "Aprobado",
"Commerce Code": 550062700310,
"Terminal Id": "ABC1234C",
"Ticket": "AB123",
"Authorization Code": "XZ123456",
"Amount": 15000,
"Shares Number": 3,
"Shares Amount": 5000,
"Last 4 Digits": 6677,
"Operation Number": 60,
"Card Type": "CR",
"Accounting Date": "28/10/2019 22:35:12",
"Account Number": "30000000",
"Card Brand": "AX",
"Real Date": "28/10/2019 22:35:12",
"Employee Id": 1,
"Tip": 1500,
"Change": 20000,
"CommerceProviderCode": 550062712310
}
- 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. - 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)
- La caja al recibir la respuesta envía un
<ACK>
si el mensaje está correcto, o un<NAK>
para el caso en que elLRC
no corresponde. - 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 Multicodigo
DATO | LARGO | Comentario |
---|---|---|
<STX> |
1 | Indica el inicio de texto o comando valor hexadecimal: 0x02 |
Comando |
4 | valor ASCII: 0270 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 |
Fille |
1 | Reservado para uso futuro. |
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 |
Separador |
1 | valor ASCII: | valor hexadecimal: 0x7c |
Comercio Prestador |
12 | Si la modalidad multicódigo esta activada, se debe enviar el código de comercio prestador. Si la transacción no es multicódigo este campo puede ir sin valor. ( 0 en el SDK). |
<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>0270|{amount}|{ticket}|| |{status}|{commerce code}|<ETX><LRC>
Respuesta de Venta Multicódigo
DATO | LARGO | COMENTARIO |
---|---|---|
<STX> |
1 | Indica inicio de texto o comando valor hexadecimal: 0x02 |
Comando |
4 | Valor ASCII: 0271 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 |
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 Dígitos |
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 |
Filler |
variable | Reservado para uso futuro. |
Separador |
1 | valor ASCII: | valor hexadecimal: 0x7c |
Vuelto |
5 (máximo) | Valor numérico que indica el monto del vuelto seleccionado en el POS. Si la transacción corresponde a una transacción sin vuelto o no tienen vuelto habilitado en el campo debe ir un 0. |
Separador |
1 | valor ASCII: | valor hexadecimal: 0x7c |
Comercio Prestador |
12 | Valor que indica el código de comercio del prestador. Si la transacción no es Multicódigo el campo va sin valor. |
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.POSIntegrado;
using Transbank.Responses.CommonResponses;
using Transbank.Responses.IntegradoResponse;
//...
Task<LastSaleResponse> response = POSIntegrado.Instance.LastSale();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
char* response = last_sale();
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.integrado.*;
//...
POSIntegrado pos = new POSIntegrado();
LastSaleResponse lastSaleResponse = pos.lastSale();
import POS from "transbank-pos-sdk-web";
POS.getLastSale().then((response) => {
console.log(response)
}).catch(() => {
alert('Error al obtener última venta');
})
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
en .NET y en Java, 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",
"Authorization Code": "XZ123456",
"Amount": 15000,
"Shares Number": 3,
"Shares Amount": 5000,
"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",
"Employee Id": 1,
"Tip": 1500
}
- 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. - 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
Mensaje en Hexadecimal: {0x02, 0x30, 0x32, 0x35, 0x30, 0x7c, 0x03, 0x78}
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 Dígitos |
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 Última Venta Multicódigo
Este comando es enviado por la caja para solicitar la re-impresión de la última venta. A diferencia de la petición de ultima venta normal, esta permite obtener el voucher completo en string desde el POS.
using Transbank.POSIntegrado;
using Transbank.Responses.IntegradoResponse;
//...
bool getVoucherInfo = true
Task<MultiCodeLastSaleResponse> response = POSIntegrado.Instance.MultiCodeLastSale(getVoucherInfo);
// No disponible
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.integrado.*;
//...
POSIntegrado pos = new POSIntegrado();
MultiCodeLastSaleResponse response = pos.multiCodeLastSale(true);
//bool indica si pos envía o no el voucher como parte de la respuesta
// No disponible
El resultado de la transacción última venta devuelve los mismos datos que una venta normal y se entrega en forma de un objeto MultiCodeLastSaleResponse
. Si ocurre algún error al ejecutar la acción en el POS se lanzará una excepción del tipo TransbankMultiCodeLastSaleException
.
{
"Function": 260,
"Response": "Aprobado",
"Commerce Code": 550062700310,
"Terminal Id": "ABC1234C",
"Ticket": "AB123",
"Authorization Code": "XZ123456",
"Amount": 15000,
"Shares Number": 3,
"Shares Amount": 5000,
"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",
"Employee Id": 1,
"Tip": 1500,
"Voucher": "VOUCHER COMPLETO DE VENTA",
"Change": 20000,
"CommerceProviderCode": 550062712310
}
- 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. - 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 Multicodigo
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 |
Voucher |
1 | Indica si se retorna el voucher formateado a la caja 0: No entrega voucher 1: Entrega voucher en el mensaje |
<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>0280|1<ETX>u
Mensaje en Hexadecimal: {0x02, 0x30, 0x32, 0x38, 0x30, 0x7c, 0x31, 0x03, 0x75}
Respuesta de Última Venta Multicódigo
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 |
Voucher |
variable | Se envía el voucher si el campo Voucher del comando se encuentra en 1 |
Separador |
1 | Valor ASCII: | Valor hexadecimal: 0x7c |
Vuelto |
5 (max) | Valor numérico que indica el monto del vuelto seleccionado en el POS. |
Separador |
1 | Valor ASCII: | Valor hexadecimal: 0x7c |
Comercio Prestador |
12 | Valor que indica el código de comercio del prestador. Si la transacción no es multicódigo no presenta valor. |
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.POSIntegrado;
using Transbank.Responses.CommonResponses;
//...
Task<RefundResponse> response = POSIntegrado.Instance.Refund(21);
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
RefundResponse response = refund(21);
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.common.*;
//...
POSIntegrado pos = new POSIntegrado();
RefundResponse response = pos.refund(21);
import POS from "transbank-pos-sdk-web";
POS.refund(21).then(response => console.log(response));
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
- 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. - 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.
- 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. - 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.POSIntegrado;
using Transbank.Responses.IntegradoResponse;
//...
Task<CloseResponse> response = POSIntegrado.Instance.Close();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
BaseResponse response = register_close();
}
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.integrado.*;
//...
POSIntegrado pos = new POSIntegrado();
CloseResponse response = pos.close()
import POS from "transbank-pos-sdk-web";
POS.closeDay()
El resultado del cierre de caja se entrega en la forma de un objeto CloseResponse
en .NET o Java, o 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"
}
- 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. - 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.
- La caja al recibir la respuesta envía un
<ACK>
si el mensaje está correcto, o un<NAK>
para el caso en que elLRC
no corresponde. - 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.POSIntegrado;
using Transbank.Responses.CommonResponses;
using Transbank.Responses.IntegradoResponse;
//...
Task<TotalsResponse> response = POSIntegrado.Instance.Totals();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
TotalsCResponse response = get_totals();
}
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.integrado.*;
//...
POSIntegrado pos = new POSIntegrado();
TotalsResponse response = pos.totals();
import POS from "transbank-pos-sdk-web";
POS.getTotals().then(response => console.log(response));
El resultado de la transacción entrega en la forma de un objeto TotalsResponse
en .NET o Java, 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
en .NET y en Java.
{
"Function": 710,
"Response": "Aprobado",
"TX Count": 3, // Cantidad de transacciones
"TX Total": 15000 // Suma total de los montos de cada transacción
}
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.POSIntegrado;
using Transbank.Responses.IntegradoResponse;
//...
bool printOnPOS = false;
Task<List<DetailResponse>> response = POSIntegrado.Instance.Details(printOnPOS);
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
bool print_on_pos = false;
char *response = sales_detail(print_on_pos);
}
import cl.transbank.pos.POS;
//...
List<DetailResponse> ldr = POS.getInstance().details(false);
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.integrado.*;
//...
POSIntegrado pos = new POSIntegrado();
boolean printOnPOS = false;
List<DetailResponse> response = pos.details(printOnPOS);
El resultado de la transacción entrega una lista de objetos DetailResponse
en .NET y Java, 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
en .NET y Java.
[
{
"Function": 261,
"Response": "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": "30000000",
"Card Brand": "AX",
"Real Date": "28/10/2019 22:35:12",
"Employee Id": ,
"Tip": 1500,
"Shares Amount": 5000,
"Shares Number": 3,
},
{
"Function": 261,
"Response": "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": "30000000",
"Card Brand": "AX",
"Real Date": "28/10/2019 22:35:12",
"Employee Id": ,
"Tip": 1500,
"Shares Amount": 5000,
"Shares Number": 3,
}
]
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 |
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 |
Últimos 4 Dígitos |
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 |
Monto Cuota |
9 | Valor Numérico (Opcional) Largo máximo: 9 Largo mínimo: 0 |
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 |
<ETX> |
1 | Indica el fin de texto o comando valor hexadecimal: 0x03 |
LRC |
1 | Resultado del calculo del LRC del mensaje |
Mensaje Detalle de Ventas Multicódigo
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.POSIntegrado;
using Transbank.Responses.IntegradoResponse;
//...
bool printOnPOS = false;
Task<List<MultiCodeDetailResponse>> response = POSIntegrado.Instance.MultiCodeDetails(printOnPOS);
// No disponible
}
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.integrado.*;
//...
POSIntegrado pos = new POSIntegrado();
boolean printOnPOS = false;
List<MultiCodeDetailResponse> response = pos.multiCodeDetails(printOnPOS);
// No disponible
El resultado de la transacción entrega una lista de objetos MultiCodeDetailResponse
. Si ocurre algún error al ejecutar la acción en el POS se lanzará una excepción del tipo TransbankMultiCodeDetailException
.
[
{
"Function": 261,
"Response": "Aprobado",
"Commerce Code": 550062700310,
"Terminal Id": "ABC1234C",
"Ticket": "AB123",
"Authorization Code": "XZ123456",
"Amount": 15000,
"Shares Number": 3,
"Shares Amount": 5000,
"Last 4 Digits": 6677,
"Operation Number": 60,
"Card Type": "CR",
"Accounting Date": "28/10/2019 22:35:12",
"Account Number": "30000000",
"Card Brand": "AX",
"Real Date": "28/10/2019 22:35:12",
"Employee Id": ,
"Tip": 1500,
"Change": 20000,
"CommerceProviderCode": 550062712310
},
{
"Function": 261,
"Response": "Aprobado",
"Commerce Code": 550062700310,
"Terminal Id": "ABC1234C",
"Ticket": "AB123",
"Authorization Code": "XZ123456",
"Amount": 15000,
"Shares Number": 3,
"Shares Amount": 5000,
"Last 4 Digits": 6677,
"Operation Number": 60,
"Card Type": "CR",
"Accounting Date": "28/10/2019 22:35:12",
"Account Number": "30000000",
"Card Brand": "AX",
"Real Date": "28/10/2019 22:35:12",
"Employee Id": ,
"Tip": 1500,
"Change": 20000,
"CommerceProviderCode": 550062712310
}
]
Solicitud de Detalle de Ventas Multicódigo
DATO | LARGO | COMENTARIO |
---|---|---|
<STX> |
1 | Indica inicio de texto o comando Valor hexadecimal: 0x02 |
Comando |
4 | Valor ASCII: 0290 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>0290|1|<ETX><LRC>
Mensaje en Hexadecimal: {0x02, 0x30, 0x32, 0x36, 0x30, 0x7c, 0x7c, 0x03, 0x07}
Respuesta de Detalle de Ventas Multicódigo
DATO | LARGO | COMENTARIO |
---|---|---|
<STX> |
1 | Indica inicio de texto o comando valor hexadecimal: 0x02 |
Comando |
4 | Valor ASCII: 0291 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 |
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 |
Ú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 |
Monto Cuota |
9 | Valor Numérico (Opcional) Largo máximo: 9 Largo mínimo: 0 |
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 |
Vuelto |
5 (max) | Valor numérico que indica el monto del vuelto seleccionado en el POS. |
Separador |
1 | valor ASCII: | valor hexadecimal: 0x7c |
Comercio Prestador |
12 | Valor que indica el código de comercio del prestador. Si la transacción no es multicódigo no indica valor |
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.POSIntegrado;
using Transbank.Responses.CommonResponses;
//...
Task<LoadKeysResponse> response = POSIntegrado.Instance.LoadKeys();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
BaseResponse response = load_keys();
}
import cl.transbank.pos.POSIntegrado;
import cl.transbank.pos.responses.common.*;
//...
POSIntegrado pos = new POSIntegrado();
LoadKeysResponse response = pos.loadKeys();
import POS from "transbank-pos-sdk-web";
let printOnPOS = false;
POS.loadKeys();
El resultado de la carga de llaves se entrega en la forma de un objeto LoadKeysResponse
en .NET y en Java, o 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": 810,
"ResponseMessage": "Aprobado",
"Success": true,
"CommerceCode": 550062700310,
"TerminalId": "ABC1234C"
}
- 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. - 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.
- Al recibir la respuesta por parte del POS, se debe enviar un
<ACK>
si elLRC
del mensaje es correcto, en caso contrario se debe enviar un<NAK>
. - Si el POS recibe un
<ACK>
vuelve al inicio y espera un nuevo comando, si recibe un<NAK>
reintentará 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.POSIntegrado;
//...
Task<bool> connected = POSIntegrado.Instance.Poll();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
int retval = poll();
if (retval == TBK_OK){
//...
}
import cl.transbank.pos.POSIntegrado;
//...
POSIntegrado pos = new POSIntegrado();
boolean pollResult = pos.poll();
import POS from "transbank-pos-sdk-web";
let printOnPOS = false;
POS.poll().then(result => console.log(result));
- 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.POSIntegrado;
//...
Task<bool> isInNormalMode = POSIntegrado.Instance.SetNormalMode();
#include "transbank.h"
#include "transbank_serial_utils.h"
//...
int retval = set_normal_mode();
if (retval == TBK_OK){
//...
}
import cl.transbank.pos.POSIntegrado;
//...
POSIntegrado pos = new POSIntegrado();
boolean isInNormalMode = pos.setNormalMode();
import POS from "transbank-pos-sdk-web";
let printOnPOS = false;
POS.setNormalMode().then(result => console.log(result));
- 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 |
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 |