56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
import requests
|
|
import logging
|
|
from typing import Optional, Dict, Any, Tuple
|
|
|
|
|
|
def validar_nif(
|
|
nif: str,
|
|
nombre: str,
|
|
*,
|
|
timeout: int = 10,
|
|
api_key: Optional[str] = None,
|
|
bearer_token: Optional[str] = None,
|
|
) -> Tuple[bool, Optional[Dict[str, Any]], Optional[str]]:
|
|
"""
|
|
Llama al endpoint de Verifacti para validar un NIF.
|
|
|
|
Retorna:
|
|
(ok, data, error)
|
|
- ok: True si la llamada fue exitosa y resultado == 'IDENTIFICADO'
|
|
- data: dict con la respuesta JSON completa
|
|
- error: mensaje de error si algo falló
|
|
"""
|
|
url = "https://api.verifacti.com/nifs/validar"
|
|
headers = {"Content-Type": "application/json",
|
|
"Accept": "application/json"}
|
|
|
|
if api_key:
|
|
headers["X-API-KEY"] = api_key
|
|
if bearer_token:
|
|
headers["Authorization"] = f"Bearer {bearer_token}"
|
|
|
|
payload = {
|
|
"nif": nif,
|
|
"nombre": nombre,
|
|
}
|
|
|
|
try:
|
|
resp = requests.post(
|
|
url, json=payload, headers=headers, timeout=timeout)
|
|
if resp.status_code != 200:
|
|
return False, None, f"HTTP {resp.status_code}: {resp.text}"
|
|
|
|
data = resp.json()
|
|
resultado = data.get("resultado")
|
|
|
|
# La lógica de validación: 'IDENTIFICADO' = válido
|
|
ok = resultado == "IDENTIFICADO"
|
|
return ok, data, None
|
|
|
|
except requests.RequestException as e:
|
|
logging.error("Error de conexión con la API Verifacti: %s", e)
|
|
return False, None, str(e)
|
|
except ValueError as e:
|
|
logging.error("Respuesta no es JSON válido: %s", e)
|
|
return False, None, "Respuesta no es JSON válido"
|