Impresión de comprobantes
ℹ️
Este proceso es opcional
La impresión del comprobante marca el cierre de una transacción y en esta sección se detallan los diferentes métodos que ofrece el SDK para imprimir un comprobante.
Requisitos
- Datos de la transacción
Paso a paso
- Obtener la impresora con
ReceiptPrinterFactory.create(context), que retorna la interfazReceiptPrinter. - Validar el estado de la impresora antes de usarla.
- Instanciar objeto
TextFormatpara el texto que se quiere imprimir. - Agregar las líneas a la cola de impresión con el método
addLine. - Iniciar la impresión y obtener el resultado con
ReceiptPrinterFactory.printAndAwaitResult(printer) { result -> ... }dentro de unThread(a partir de la v7.6.0, este método invocastartPrintinternamente, ya no es necesario llamarlo por separado).
⚠️
A partir de la v7.6.0, la impresora ya no se instancia con DevicePrintImpl. Ver el detalle de la migración en las notas de release de la v7.6.0.
Métodos disponibles
| Método | Descripción |
|---|---|
| getStatus |
|
| addDoubleColumnText | Agrega 2 columnas en el ticket. |
| addLine | Agrega una línea en el ticket. |
| addLinebreak | Agrega saltos de línea. |
| addTripleColumnText | Agrega 3 columnas en el ticket. |
| addBlackLine | Agrega una línea de separación en el ticket. Reemplaza a addImage, que queda deprecado. |
| startPrint | Inicia el proceso de impresión. A partir de la v7.6.0, es invocado internamente por ReceiptPrinterFactory.printAndAwaitResult. |
Estos métodos posibilitan la creación de un formato de ticket personalizado, agregando los datos que se consideren necesarios. Sin embargo, a continuación se detallan los campos que son obligatorios por país:
Argentina
- Fecha y hora de la transacción
- Datos del comercio
- Nombre
- Dirección
- Identificación
- Monto de la transacción
- Últimos 4 dígitos de la tarjeta
México
- Fecha y hora de la transacción
- Nombre del adquirente
- Datos del comercio
- Nombre
- Dirección
- Teléfono
- Número de afiliación con la adquirencia
- Identificador de la transacción
- Marca y tipo de tarjeta
- Número de serie de la terminal
- Código de autorización
- Monto de la transacción
Ejemplo de implementación
import com.menta.android.core.terminal.ReceiptPrinterFactory
import com.menta.android.emv.contract.printer.Align
import com.menta.android.emv.contract.printer.TextFormat
import com.menta.android.emv.contract.printer.INSTALLMENT_LABEL
import com.menta.android.emv.contract.printer.TOTAL_LABEL
val devicePrintImpl = ReceiptPrinterFactory.create(applicationContext)
val status = devicePrintImpl.getStatus()
Log.i(TAG, "status impresora: $status")
if (status == 0) {
val thread = Thread {
devicePrintImpl.addLine(
TextFormat(align = Align.CENTER, bold = true, font = 1),
"Nombre del comercio"
)
devicePrintImpl.addLine(
TextFormat(align = Align.CENTER, bold = false),
"Dirección del comercio"
)
devicePrintImpl.addLine(
TextFormat(align = Align.CENTER, bold = false),
"DNI del comercio"
)
devicePrintImpl.addLine(
TextFormat(align = Align.CENTER, bold = false),
"CUIT del comercio"
)
devicePrintImpl.addLinebreak(1)
devicePrintImpl.addLine(
TextFormat(align = Align.CENTER, bold = true),
"Pago con Tarjeta de Crédito"
)
devicePrintImpl.addLinebreak(1)
devicePrintImpl.addDoubleColumnText(
TextFormat(),
"Número de Operación",
"#123456"
)
devicePrintImpl.addDoubleColumnText(
TextFormat(),
"Tarj: ***1234",
"Visa"
)
devicePrintImpl.addDoubleColumnText(
TextFormat(),
"CONTACTLESS",
""
)
devicePrintImpl.addLinebreak(1)
try {
devicePrintImpl.addBlackLine(2)
} catch (e: RemoteException) {
e.printStackTrace()
}
devicePrintImpl.addDoubleColumnText(
TextFormat(bold = true, font = 1),
TOTAL_LABEL.uppercase(Locale.getDefault()),
"10,00"
)
devicePrintImpl.addDoubleColumnText(
TextFormat(), INSTALLMENT_LABEL, "01"
)
devicePrintImpl.addDoubleColumnText(
TextFormat(),
CURRENCY_LABEL,
Currency.ARS.name
)
devicePrintImpl.addLinebreak(1)
try {
ReceiptPrinterFactory.printAndAwaitResult(devicePrintImpl) { result ->
if (result == 0) {
Log.i(TAG, "Impresión exitosa")
} else {
Log.i(TAG, "Error de impresión: $result")
}
}
} catch (e: Exception) {
e.printStackTrace()
}
}
thread.start()
}