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": "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)
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;
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;
“No dejes para mañana lo que puedes hacer hoy.”
Benjamin Franklin
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.