Crear QR de AFIP en PHP
Con pocas líneas de código
Ivan Muñoz
oct 31, 2024
PHP
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 endroid/qr-code
composer require endroid/qr-code
Y generamos el codigo QR
require('./vendor/autoload.php');
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\Label\Label;
use Endroid\QrCode\Logo\Logo;
use Endroid\QrCode\RoundBlockSizeMode;
use Endroid\QrCode\Writer\PngWriter;
use Endroid\QrCode\Writer\ValidationException;
// Datos para el QR (Respetar si es string o numero)
$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_encode(json_encode($QR_code_data));
// Create QR code
$qrCode = new QrCode(
data: $QR_code_text,
encoding: new Encoding('UTF-8'),
errorCorrectionLevel: ErrorCorrectionLevel::Low,
size: 300,
margin: 10,
roundBlockSizeMode: RoundBlockSizeMode::Margin,
foregroundColor: new Color(0, 0, 0),
backgroundColor: new Color(255, 255, 255)
);
$result = (new PngWriter())->write($qrCode, $logo, $label);
echo $result->getDataUri(); // Podemos obtenerlo como URL para uswr en <img src="..."> tag
$result->saveToFile(__DIR__.'/qr_code.png'); // o podemos guardarlo como un archivo
Ya tenemos el QR listo para nuestro comprobante. Ahora podemos crear el PDF