Desarrollo para Verifactu en Delphi

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.

screenshot
Verifacti

Verifacti

18 mar 2025

Cómo hacer una petición a una API Rest desde Delphi

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": "Empresa de prueba SL",' +
      '"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)

Ejemplo de integración con WinHttpRequest

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": "Empresa de prueba SL",' +
      '"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;

Cómo pegar el QR a la factura en Delphi

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;

Cómo generar un QR en Delphi

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;
imagen footer

“No dejes para mañana lo que puedes hacer hoy.”

Benjamin Franklin

Contacta con nosotros

Los contenidos proporcionados por Bilbabit SL en cualquiera de sus secciones (Blog, guías, landing pages, sección preguntas frecuentes, emails comerciales o de atención al cliente) son exclusivamente informativos y no tienen validez legal. BILBABIT no es una empresa de consultoría fiscal, sino una desarrolladora de software fiscal, por lo que la información que ofrece es de carácter orientativo. En cualquier caso, cualquier actividad relacionada con la facturación y la fiscalidad debe ser consultada siempre y sin excepción con un asesor fiscal que entienda las implicaciones específicas de cada normativa para cada empresa o profesional en particular.