Ayuda a desarrolladores para integrar Verifactu con Delphi: aprende a realizar peticiones REST, generar facturas con QR, firmar con certificado digital y crear XML de forma eficiente.

Para realizar peticiones HTTP en Delphi a una API como la de Verifacti se puede utilizar el siguiente código.
uses
System.SysUtils, System.Classes, System.Net.HttpClient, System.Net.URLClient;
procedure CreateInvoice;
var
HttpClient: TNetHTTPClient;
Response: IHTTPResponse;
JSONData: TStringStream;
URL: string;
begin
URL := 'https://api.verifacti.com/verifactu/create';
HttpClient := TNetHTTPClient.Create(nil);
try
HttpClient.CustomHeaders['Authorization'] := 'Bearer <API_KEY>';
HttpClient.ContentType := 'application/json';
JSONData := TStringStream.Create(
'{' +
'"serie": "A",' +
'"numero": "234634",' +
'"fecha_expedicion": "02-12-2024",' +
'"tipo_factura": "F1",' +
'"descripcion": "Descripcion de la operacion",' +
'"nif": "A15022510",' +
'"nombre": "Nombre cliente",' +
'"lineas": [{' +
'"base_imponible": "200",' +
'"tipo_impositivo": "21",' +
'"cuota_repercutida": "42"' +
'}],' +
'"importe_total": "242"' +
'}',
TEncoding.UTF8
);
try
Response := HttpClient.Post(URL, JSONData);
if Response.StatusCode = 200 then
WriteLn('Success: ' + Response.ContentAsString())
else
WriteLn('Error: ' + Response.StatusCode.ToString);
finally
JSONData.Free;
end;
finally
HttpClient.Free;
end;
end;Estas unidades forman parte de la RTL estándar de Delphi y están disponibles en las versiones de Delphi que soportan TNetHTTPClient (típicamente Delphi XE8 y posteriores)
Si prefieres utilizar WinHttpRequest en Delphi, se puede hacer de la siguiente forma:
uses
ComObj, SysUtils, ActiveX;
procedure CreateInvoiceWithWinHttp;
var
WinHttp: OleVariant;
URL, APIKey, JSONData, Response: string;
begin
CoInitialize(nil);
try
URL := 'https://api.verifacti.com/verifactu/create';
APIKey := '<API_KEY>';
JSONData := '{' +
'"serie": "A",' +
'"numero": "234634",' +
'"fecha_expedicion": "02-12-2024",' +
'"tipo_factura": "F1",' +
'"descripcion": "Descripcion de la operacion",' +
'"nif": "A15022510",' +
'"nombre": "Nombre cliente",' +
'"lineas": [{' +
'"base_imponible": "200",' +
'"tipo_impositivo": "21",' +
'"cuota_repercutida": "42"' +
'}],' +
'"importe_total": "242"' +
'}';
WinHttp := CreateOleObject('WinHttp.WinHttpRequest.5.1');
WinHttp.Open('POST', URL, False);
WinHttp.SetRequestHeader('Authorization', 'Bearer ' + APIKey);
WinHttp.SetRequestHeader('Content-Type', 'application/json');
WinHttp.Send(JSONData);
Response := WinHttp.ResponseText;
WriteLn('Response: ' + Response);
finally
CoUninitialize;
end;
end;Para incrustar un código QR en un PDF, se pueden usar librerías como:
Ejemplo con SynPDF:
uses
SynPDF;
procedure AgregarQRAlPDF;
var
Doc: TPdfDocumentGDI;
Page: TPdfPage;
QRBitmap: TBitmap;
begin
Doc := TPdfDocumentGDI.Create;
try
Page := Doc.AddPage;
QRBitmap := TBitmap.Create;
try
// Aquí se cargaría la imagen del QR en QRBitmap
Page.RenderDraw(QRBitmap, 100, 100, 200, 200);
finally
QRBitmap.Free;
end;
Doc.SaveToFile('FacturaConQR.pdf');
finally
Doc.Free;
end;
end;Se pueden usar las siguientes librerías para generar códigos QR en Delphi:
Ejemplo con DelphiZXingQRCode:
uses
DelphiZXingQRCode, Vcl.Graphics;
procedure GenerarQR;
var
QRCode: TDelphiZXingQRCode;
Bitmap: TBitmap;
begin
QRCode := TDelphiZXingQRCode.Create;
try
QRCode.Data := 'https://verifacti.com';
QRCode.Encoding := TQRCodeEncoding.qrAuto;
Bitmap := TBitmap.Create;
try
Bitmap.SetSize(QRCode.Rows, QRCode.Columns);
QRCode.DrawBitmap(Bitmap);
Bitmap.SaveToFile('QRFactura.bmp');
finally
Bitmap.Free;
end;
finally
QRCode.Free;
end;
end;Obligatoriedad Verifactu. Quién está obligado al cumplimiento de VeriFactu. Obligatoriedad para sisemas informáticos de facturación, personas jurídicas y autónomos.
Explicación sobre el Real Decreto 1007/2023, conocido como el reglamento VeriFactu. Resumen e implicaciones del reglamento VeriFactu.
Colección completa de ejemplos de facturas Verifactu: simplificada, normal, rectificativa, intracomunitaria, exportación, IGIC, IPSI, anulación y más. JSON listos para copiar.