Cómo 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.

Introducción a la firma electrónica

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 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 su web oficial. 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 6

En primer lugar descargaremos la dll AEATFACT.dll de AjpdSoft Firma telemática, una vez descargado lo registraremos en el sistema, previamente lo copiaremos a la carpeta donde queramos dejarlo definitivamente y lo registraremos. Para registrarlo podemos usar AjpdSoft Registro de OCX/DLL:

AjpdSoft Registro de OCX-DLL

Seleccionamos el fichero AEATFACT.dll:

Y pulsamos en «Registrar»:

Para registrarlo manualmente, el comando es:

regsvr32 RutaFichero\AEATFACT.dll

Programa en Delphi 6 para firmar ficheros

Una vez registrado podremos utilizarlo desde Delphi, para ello abrirnos 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 programa en Delphi 6 para firmar ficheros

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

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

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

El programa resultante tendrá este aspecto:

El programa en Delphi 6 para firmar ficheros

Probando AjpdSoft Firma telemática

Para probar AjpdSoft Firma telemática, 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:

Probando AjpdSoft Firma telemática

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

Probando AjpdSoft Firma telemática

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):

Probando AjpdSoft Firma telemática