Saltar al contenido principal
Versión: 4.42

Cómo enviar datos fiscales a la AEAT con curl usando Redtrust

Descripción general

Esta guía explica cómo enviar información de IVA y registros de facturas a la Agencia Estatal de Administración Tributaria (AEAT) utilizando curl, tanto desde entornos Windows como Linux. Se centra en los dos principales mecanismos de reporte que se utilizan actualmente en España:

  • Suministro Inmediato de Información (SII): Para el reporte casi en tiempo real de los libros de registro de IVA.
  • Veri*Factu: Para la transmisión de registros de facturación verificables generados por los sistemas de facturación.

Los ejemplos asumen que dispones del certificado digital en Redtrust y que sabes qué sistema (SII, Veri*Factu o ambos) aplica a tu caso. Esta guía asume familiaridad con HTTPS, certificados y el uso básico de la línea de comandos.

Contexto

España está implantando mecanismos de suministro de información tributaria en tiempo real o casi en tiempo real para mejorar la trazabilidad de las operaciones económicas y reducir el fraude fiscal. Como parte de este esfuerzo, la AEAT proporciona servicios web que aceptan datos estructurados a través de conexiones HTTPS seguras.

En este contexto, son relevantes dos mecanismos complementarios:

  • SII exige que determinados contribuyentes envíen los registros del IVA derivados de las facturas emitidas y recibidas en plazos reducidos. Los datos representan información contable y fiscal, no el documento de factura en sí.
  • Veri*Factu regula cómo se generan y registran las facturas en los sistemas de facturación y permite (o exige, según la configuración) la transmisión de los registros de facturación a la AEAT en el momento de la emisión.

Desde un punto de vista técnico, ambos sistemas se basan en solicitudes HTTP autenticadas, utilizan TLS mutuo (autenticación de cliente con un certificado X.509), cargas útiles XML estructuradas (según el servicio) y endpoints específicos de la AEAT.

Dado que la AEAT expone estos servicios mediante protocolos web estándar, puedes interactuar con ellos utilizando una herramienta genérica como curl. Esta guía se centra en las solicitudes al SII; los ejemplos de Veri*Factu siguen el mismo patrón.

Antes de empezar

  • Agente de Redtrust para Windows
  • curl y Schannel

Paso 1: Comprobar los requisitos previos

Para que curl pueda utilizar el almacén de certificados de Windows, curl debe usar Schannel.

Ejecuta el comando para comprobar que está instalado:

curl -V

La respuesta debe incluir Schannel.

curl 8.9.1 (Windows) libcurl/8.9.1 Schannel zlib/1.3 WinIDN
Release-Date: 2024-07-31
Protocols: dict file ftp ftps http https imap imaps ipfs ipns mqtt pop3 pop3s smb smbs smtp smtps telnet tftp
Features: alt-svc AsynchDNS HSTS HTTPS-proxy IDN IPv6 Kerberos Largefile libz NTLM SPNEGO SSL SSPI threadsafe Unicode UnixSockets

Paso 2: Identificar el certificado

Puedes encontrar la huella digital (o thumbprint) en el apartado Certificados de la consola de administración.

info

También puedes listar los certificados desde la CLI de PowerShell. Para ello, necesitas tener instalado el agente de Windows y que el usuario haya iniciado sesión.

Get-ChildItem Cert:\CurrentUser\My

Paso 3 (solo Linux): Habilitar el acceso de curl al token PKCS#11

El instalador del agente registra el módulo PKCS#11 de Redtrust en p11-kit, así que no necesitas declarar la ruta de la biblioteca en openssl.cnf ni en ninguna otra aplicación. Solo tienes que instalar el componente con el que OpenSSL llega hasta p11-kit, que depende de la versión de curl que comprobaste en el paso 1.

  • Versiones de curl anteriores a 8.12: Instala el engine PKCS#11 de OpenSSL.
  • curl 8.12 o posterior: Instala el provider PKCS#11 de OpenSSL 3.

Ubuntu 22.04 y 24.04 distribuyen versiones de curl anteriores a 8.12, por lo que el engine es el método aplicable en esas distribuciones.

Para instalar el engine, ejecuta:

sudo apt install -y libengine-pkcs11-openssl

Para instalar el provider, ejecuta:

sudo apt install -y pkcs11-provider

En los dos casos el componente descubre el módulo de Redtrust a través de p11-kit por defecto, así que no hay nada más que configurar.

Los engines de OpenSSL están obsoletos desde OpenSSL 3 y el provider es su sustituto oficial. Aun así, curl no admite URI pkcs11: a través de providers hasta la versión 8.12, por lo que el engine sigue siendo necesario en las versiones anteriores.

Paso 4: Enviar la información del SII con curl

Una vez que hayas identificado el certificado (D8B6D009411BC734AC9F12858C46EC63C73D959D en este ejemplo), puedes utilizar el siguiente comando para enviar la información. Sustituye RUTA por la ruta al archivo XML que quieres enviar.

curl --connect-timeout 60 -m 60 -s -S -L --header "Content-Type: text/xml;charset=UTF-8" --cert "CurrentUser\My\D8B6D009411BC734AC9F12858C46EC63C73D959D" --data-binary "@RUTA\invoice.xml" "https://prewww1.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP"
nota

Ten en cuenta que este ejemplo utiliza la URL de preproducción de la AEAT. Para producción, mantén la misma ruta y cambia al host de producción (https://www1.agenciatributaria.gob.es). Para consultar la lista completa de endpoints de producción (y los WSDL correspondientes), consulta la página oficial de WSDL de servicios web de la AEAT.

Este comando utiliza el certificado para la autenticación y la operación correspondiente se registra como un evento en Redtrust.

Resumen

Has enviado datos fiscales a la AEAT con curl autenticando la conexión con un certificado que permanece en Redtrust. En Windows, curl obtiene el certificado del almacén del sistema mediante Schannel. En Linux lo obtiene del token PKCS#11 del agente a través de p11-kit, con el engine o el provider de OpenSSL según la versión de curl. En los dos casos la clave privada nunca sale de Redtrust y cada uso queda registrado como un evento.

Próximos pasos

¿Te ha resultado útil esta página?