Download the PHP package iberfacil/es-aeat-vnif without Composer

On this page you can find all versions of the php package iberfacil/es-aeat-vnif. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package es-aeat-vnif

es-aeat-vnif

CI Packagist PHP

Comprueba desde PHP que un NIF existe en el censo de la Agencia Tributaria y que corresponde al nombre que te han dado, usando tu certificado electrónico. Sin framework, con línea de comandos y con adaptador opcional para Laravel.

English version

Creado por Marco Gavilán, de IBERFÁCIL.


Para qué sirve (si no eres técnico)

Cuando una gestoría, un despacho, una empresa o un departamento de cumplimiento recibe los datos de un cliente, un proveedor o un tercero, casi siempre le llega un NIF y un nombre escritos a mano, copiados de un correo o dictados por teléfono. Antes de facturar, contratar, dar de alta a ese cliente, presentar un escrito o incluirlo en una declaración informativa conviene saber dos cosas:

La AEAT ofrece un servicio para eso: el «Servicio de verificación de NIF de terceros» (VNifV2). Este paquete lo usa por ti. Le das el NIF y el nombre, y te devuelve una de estas respuestas:

La AEAT responde Qué significa en la práctica
IDENTIFICADO El NIF existe y el nombre coincide. Si el nombre que enviaste era aproximado (sin tildes, una letra de menos, faltaba un apellido), la AEAT lo identifica igualmente y te devuelve el nombre tal como figura en el censo.
NO IDENTIFICADO-SIMILAR El NIF existe pero el nombre solo se parece. La AEAT te devuelve el nombre censal para que lo revises.
NO IDENTIFICADO El NIF no consta o el nombre no se corresponde.
IDENTIFICADO-BAJA / IDENTIFICADO-REVOCADO El NIF existe y coincide, pero está dado de baja o revocado.
NO PROCESADO La AEAT no ha podido procesar esa consulta ahora mismo. Se reintenta más tarde.

Ejemplos de uso reales:

Qué necesitas: un certificado electrónico (de sello de entidad, de representante de persona jurídica o personal) en formato .p12 o .pfx, con su contraseña. Es el mismo que usas para entrar en la sede electrónica. El paquete no guarda la contraseña ni el certificado en ningún sitio.

¿Qué certificado me sirve?

Cualquiera de los tres que emite la FNMT u otra autoridad reconocida:

Certificado Quién lo suele tener
De persona física Autónomos y particulares. Es el que tienes instalado para hacer la renta o entrar en la sede.
De representante de persona jurídica Administradores de una sociedad que actúan en su nombre.
De sello de entidad Empresas que automatizan procesos sin una persona detrás.

Si eres autónomo, no necesitas nada especial: exporta tu certificado personal desde el navegador (o desde la FNMT) a un fichero .p12 o .pfx con contraseña y ya está. El comando doctor te dice qué tipo ha detectado.

Ten en cuenta que las consultas quedan hechas con tu identidad: úsalo solo para tus propios clientes, proveedores y trámites.

Qué NO hace: no acredita que la persona que te da los datos sea quien dice ser. Solo te confirma que ese NIF y ese nombre existen juntos en el censo. La identificación de la persona es otra cosa (documento, vídeo-identificación, firma electrónica…).


Para desarrolladores

Requisitos

Instalación

Puesta en marcha en cinco minutos

  1. Sube tu certificado al servidor, fuera del repositorio y fuera de cualquier carpeta pública. Por ejemplo /etc/aeat/certificado.p12 con permisos 0600.

  2. Pon la contraseña en el entorno, nunca en el código ni en el repositorio:

    Si no defines AEAT_VNIF_CERT_PASSWORD, el ejecutable la pedirá por teclado sin eco.

  3. Ejecuta el diagnóstico. Comprueba extensiones, lee el certificado, mira la caducidad y abre una conexión TLS con el endpoint. No consulta ningún NIF.

  4. Haz tu primera consulta.

(Los NIF y nombres de esta documentación son inventados.)

Uso manual con el ejecutable

Formato del CSV, una línea por contribuyente:

Se admite una cabecera que empiece por NIF, líneas vacías y comentarios con #.

Códigos de salida: 0 consulta realizada (sea cual sea el resultado de la AEAT), 1 error de uso o de configuración, 2 fallo transitorio (red, timeout, NO PROCESADO), 3 fallo definitivo.

Opciones: --endpoint=, --timeout=, --retries=, --batch-size=, --json, --no-probe (en doctor). También se leen de AEAT_VNIF_ENDPOINT, AEAT_VNIF_TIMEOUT, AEAT_VNIF_RETRIES y AEAT_VNIF_BATCH_SIZE.

Uso en código

Las opciones se pasan con VnifOptions:

Excepciones, todas bajo Iberfacil\AeatVnif\Exceptions\AeatVnifException:

Excepción Cuándo Qué hacer
TransientFailure Red, timeout, HTTP 408/5xx, o NO PROCESADO en check() Reintentar más tarde
DefinitiveFailure HTTP 4xx, SOAP Fault, XML inválido, respuesta que no cuadra con lo enviado Revisar; reintentar no ayuda
ConfigurationException Endpoint, lote, timeout o reintentos fuera de rango Corregir la configuración
CertificateException (hija de la anterior) Fichero no encontrado, contraseña incorrecta, caducado, clave que no corresponde Corregir el certificado
InvalidTaxpayer NIF vacío o mal formado, nombre vacío tras normalizar Corregir la entrada

Ninguna excepción incluye la contraseña, el contenido del certificado, el XML ni el texto que devuelva la AEAT.

Cómo interpretar cada resultado

CheckResult expone result (enum IdentificationResult), aeatResult (el literal), sentName, censusName, nameWasCorrected(), censusNameHasAccents(), raw y failure.

Uso en Laravel

El proveedor se autodescubre. Publica la configuración si quieres tocarla:

.env:

O inyecta Iberfacil\AeatVnif\VnifClient donde lo necesites. Comandos:

Eventos (Iberfacil\AeatVnif\Laravel\Events\*): VnifRequestStarting, VnifRequestCompleted y VnifRequestFailed, uno por petición HTTP, con el hash del XML, los NIF enviados y el recuento de resultados. Desactívalos con AEAT_VNIF_EVENTS=false.

Para sustituir el transporte, el normalizador o la caché, haz bind de Contracts\Transport, Contracts\NameNormalizer o Contracts\ResultCache en tu proveedor antes de que se resuelva el cliente.

Personalización

Antes y después de cada consulta (auditoría a tu manera):

O implementa Contracts\CheckObserver en una clase. VnifRequest expone los NIF y nombres enviados por si tu auditoría los necesita; decide tú qué guardas.

Caché (interfaz Contracts\ResultCache): Cache\InMemoryResultCache para una ejecución, Cache\Psr16ResultCache sobre cualquier PSR-16, o la tuya. Nunca se guarda un NO PROCESADO.

Normalizador de nombres (interfaz Contracts\NameNormalizer): el de serie pasa a mayúsculas, quita tildes y diéresis (conserva la Ñ), convierte guiones en espacios, elimina puntuación y compacta espacios. Si necesitas otras reglas, inyecta el tuyo.

Transporte (interfaz Contracts\Transport): el de serie es Transport\CurlTransport (mTLS, solo HTTPS, sin redirecciones, timeout de conexión y total, proxy y bundle CA opcionales). Implementa la interfaz para usar tu cliente PSR-18 o Guzzle. Para tests, Transport\FakeTransport encola respuestas y registra lo enviado.

Certificado (interfaz Contracts\Certificate): Certificate\Pkcs12Certificate y Certificate\PemCertificate, o CertificateLoader::fromFile() que decide por ti. El certificado se convierte en memoria a PEM temporales en un directorio 0700 con ficheros 0600, la clave se reexporta cifrada con una frase aleatoria, y todo se borra en finally (y en el destructor, por si acaso).

Límites y buenas prácticas

Cómo actualizar

El paquete sigue versionado semántico: las versiones 1.x no rompen la API pública; los cambios están en CHANGELOG.md. Tras actualizar, vuelve a ejecutar aeat-vnif doctor.

Desarrollo

Las pruebas no tocan la red: usan FakeTransport, respuestas de ejemplo con NIF y nombres inventados, y un certificado autofirmado que se genera en memoria durante los tests. Ver AGENTS.md.

Licencia

MIT. Copyright (c) 2026 Marco Gavilán — IBERFÁCIL. Ver LICENSE.


All versions of es-aeat-vnif with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
ext-curl Version *
ext-dom Version *
ext-libxml Version *
ext-mbstring Version *
ext-openssl Version *
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package iberfacil/es-aeat-vnif contains the following files

Loading the files please wait ...