Crear QR de AFIP en Ruby
Con pocas líneas de código
Ivan Muñoz
nov 05, 2024
Ruby
Luego de obtener el CAE vamos a generar el QR de AFIP para nuestro comprobante.
Preparamos el QR
Para generar el QR vamos a utilizar rqrcode
gem install rqrcode
Y generamos el codigo QR
require "rqrcode"
require "json"
require "base64"
# Datos para el QR
qr_code_data = {
"ver": 1, # Versión del formato de los datos (1 por defecto)
"fecha": "2017-10-25", # Fecha de emisión del comprobante
"cuit": 12345678912, # Cuit del Emisor del comprobante
"ptoVta": 1, # Punto de venta utilizado para emitir el comprobante
"tipoCmp": 6, # Tipo de comprobante
"nroCmp": 32, # Tipo de comprobante
"importe": 150, # Importe Total del comprobante (en la moneda en la que fue emitido)
"moneda": "ARS", # Moneda del comprobante
"ctz": 1, # Cotización en pesos argentinos de la moneda utilizada
"tipoDocRec": 80, # Código del Tipo de documento del receptor
"nroDocRec": 12345678912, # Número de documento del receptor
"tipoCodAut": "E", # “A” para comprobante autorizado por CAEA, “E” para comprobante autorizado por CAE
"codAut": 12345678912345 # CAE o CAEA, segun corresponda
}
# Preparamos el texto para el qr en base a https://www.afip.gob.ar/fe/qr/documentos/QRespecificaciones.pdf
qr_code_text = "https://www.afip.gob.ar/fe/qr/?p=#{Base64.urlsafe_encode64(JSON.dump(qr_code_data))}"
# Generamos el QR
qrcode = RQRCode::QRCode.new(qr_code_text)
# Lo transformamos a PNG
png = qrcode.as_png(
bit_depth: 1,
border_modules: 4,
color_mode: ChunkyPNG::COLOR_GRAYSCALE,
color: "black",
file: nil,
fill: "white",
module_px_size: 6,
resize_exactly_to: false,
resize_gte_to: false,
size: 200
)
puts "data:image/png;base64,#{Base64.encode64(png.to_s)}" # Podemos obtenerlo como URL para usar en <img src="..."> tag
IO.binwrite("./qr-afip.png", png.to_s) # o podemos guardarlo como un archivo
Ya tenemos el QR listo para nuestro comprobante. Ahora podemos crear el PDF