Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki

Delphi: Cómo firmar digitalmente una factura - facturación telemática mediante Delphi
Internet y comunicaciones


Este manual explica paso a paso como crear una aplicación con Delphi para firmar digitalmente una factura (o fichero) utilizando la dll "AEATFACT.dll" que AEAT pone a disposición de los desarrolladores de software. También explica como comprobar la validez de un documento firmado digitalmente.

FIRMAR DIGITALMENTE UNA FACTURA - FACTURACIÓN TELEMÁTICA - UTILIZAR EL CERTIFICADO DIGITAL PARA FIRMAR DOCUMENTOS MEDIANTE DELPHI

Este artículo explica y muestra un ejemplo sobre cómo firmar digitalmente documentos telemáticos (facturas) utilizando Delphi como lenguaje de programación.

INTRODUCCIÓN

La AEAT (Agencia Tributaria) ha puesto a disposición de los desarrolladores de software una librería (dll) para incluirla en los lenguajes de programación y utilizar los métodos de que dispone. Permite firmar un documento digital (pdf, jpg, xml, ...) y permite verificar que la validez de la firma. Con estos dos métodos es suficiente para firmar y comprobar la validez de un documento firmado. Un documento firmado digitalmente (y validado correctamente) tendrá la misma validez legal que otro impreso y firmado manualmente. Para más información sobre temas legales se puede consultar Comercio electrónico, Ley de Servicios de la Sociedad de la Información y de Comercio Electrónico (LSSI) ó Facturación telemática.

Para la firma de los documentos teleméticos, el emisor (el que firma el documento) debe disponer de un certificado de usuario de una de las Autoridades de Certificación válidas para facturación telemática. Las Autoridades de Certificación para los certificados reconocidas por la AEAT se pueden consultar en: Especificaciones técnicas O.M. HAC/1181/2003, Entidades certificadores autorizadas ó Certificados válidos para la facturación telemática. El certificado suele ser el mismo que se utiliza para la presentación telemática de las declaraciones en la AEAT, ya que no existen certificados especiales para facturación telemática. Normalmente suele ser el Clase 2 CA de la FNMT.

DESCARGA E INSTALACIÓN DEL COMPONENTE DE LA AEAT EN DELPHI

En primer lugar descargaremos la dll de http://www.aeat.es/descarga/aeatfact.cab, también podemos descargar un fichero pdf con la explicación de los dos métodos ("VERIFICA" y "FIRMA"), los posibles códigos de error, el registro, uso del componente en arquitectura vía web, etc.

Una vez descargado el fichero aeatfact.cab lo descomprimiremos y obtendremos el fichero AEATFACT.dll. Para que sea accesible desde Delphi hemos de registrarlo, para ello podemos utilizar AjpdSoft Registro de OCX/DLL:

AjpdSoft Registro de OCX-DLL

Selecionamos el fichero AEATFACT.dll:

Y pulsamos en "Registrar":

Para registrarlo manualmente, el comando es:

regsvr32 RutaFicheroAEATFACT.dll

EL PROGRAMA EN DELPHI

Una vez registrado podremos utilizarlo desde Delphi, para ello abrirmos Delphi, menú "File" - "New" - "Application" y en el formulario de la aplicación añadimos un TEdit para el fichero a firmar, otro para el DNI y otro para el fichero de firma resultante. Añadiremos también un TButton para seleccionar el fichero a firmar, otro para la verificación de la firma y otro más para firmar el fichero:

El código para el botón "Seleccionar fichero" será:

procedure TformMenuPrincipal.bSeleccionarClick(Sender: TObject);
begin
dlFichero.Title := 'Seleccione fichero a firmar/verificar';
if dlFichero.Execute then
begin
txtFichero.Text := dlFichero.FileName;
if ExtractFileExt (txtFichero.Text) = '.fir' then
bVerificar.SetFocus
else
txtDNI.SetFocus;
end; end;

El código para el botón "Verificar" será:

procedure TformMenuPrincipal.bVerificarClick(Sender: TObject);
var
pAEAT : Variant;
error : string;
begin
if MessageDlg('La verificación digital de un fichero necesita conexión a ' + 'Internet, en concreto a la web de la AEAT: + ' 'https://www1.aeat.es/pymes1/facturaf.html' + chr(13) + chr(13) + '¿Desea continuar con el proceso de verificación?',
mtConfirmation, [mbyes, mbno], 0) = mryes then
begin
try
pAEAT := CreateOleObject('AEATFACT.AeatFactCtl');
if (not (VarIsNull(pAEAT))) then
begin
try
error := pAEAT.VERIFICA(txtFichero.Text, txtDestino.Text);
if copy (error, 1, 2) = '00' then
MessageDlg('La verificación del fichero es correcta.' +
chr(13) + chr(13) + 'Datos del firmante: ' + chr(13) + chr(13) +
copy (error, 3, length(error)), mtInformation, [mbok], 0)
else
begin
MessageDlg (copy(error, 3, length(error)), mtWarning, [mbOK], 0);
txtDNI.SetFocus;
end
finally
pAEAT := Unassigned;
end;
end;
except
MessageDlg ('No ha podido crearse el objeto AEAT, compruebe ' +
'que tiene registrado el fichero AEATFACT.dll',
mtInformation, [mbOK], 0);
end;
end;
end;

El código para el botón "Firmar" será:

procedure TformMenuPrincipal.bFirmarClick(Sender: TObject);
var
pAEAT : Variant;
error : string;
begin
if FileExists(txtFichero.Text) then
begin
try
pAEAT := CreateOleObject('AEATFACT.AeatFactCtl');
if (not (VarIsNull(pAEAT))) then
begin
try
error := pAEAT.FIRMA(txtFichero.Text, txtDNI.text, txtDestino.Text);
if copy (error, 1, 2) = '00' then
MessageDlg('El fichero se ha firmado correctamente.' +
chr(13) + chr(13) + 'Datos del certificado: ' + chr(13) + chr(13) + copy (error, 3, length(error)), mtInformation, [mbok], 0)
else
begin
MessageDlg (copy(error, 3, length(error)), mtWarning, [mbOK], 0);
txtDNI.SetFocus;
end
finally
pAEAT := Unassigned;
end;
end;
except
MessageDlg ('No ha podido crearse el objeto AEAT, compruebe ' +
'que tiene registrado el fichero AEATFACT.dll',
mtInformation, [mbOK], 0);
end;
end
else
MessageDlg('El fichero a firmar digitalmente no existe.',
mtWarning, [mbok], 0);
end;

El programa resultante tendrá este aspecto:

AjpdSoft Firma telemática

LA COMPROBACIÓN

Para probarlo seleccionaremos un fichero a firmar e introduciremos el DNI del certificado que tengamos instalado en el PC (o el certificado alojado en la tarjeta Smart Card Reader). Si utilizamos un Smart Card Reader (lector de tarjetas) nos pedirá la contraseña de la misma con una ventana como esta:

Tras introducir la contraseña de la tarjeta (si se utiliza un Smart Card Reader), si el proceso se ha realiado correctamente, nos aparecerá un mensaje como este:

Para validar un fichero firmado, lo seleccionaremos y pulsaremos en "Validar". Si la firma es correcta nos aparecerá un mensaje como este (recordamos que es preciso tener conexión a Internet para realizar la validación):

Nota: más información y preguntas frecuentes sobre la facturación telemática en: Preguntas y respuestas sobre facturación telemática


Anuncios


Enviado el Domingo, 25 septiembre a las 13:22:27 por ajpdsoft
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A