Skip to content

CloudflareApi — API HTTP

UruFactura.CloudflareApi es una API HTTP construida sobre ASP.NET Core Minimal API que expone toda la funcionalidad del SDK como endpoints REST. Está diseñada para correr en Cloudflare Containers pero funciona en cualquier entorno Docker o Kestrel estándar.

  • Soporte single-tenant y multi-tenant (SaaS) desde la misma imagen.
  • Certificado digital vía archivo o variable Base64.
  • CAEs pre-cargados desde configuración (sobreviven reinicios).
  • Los 13 tipos de CFE de la DGI soportados.
  • Endpoint GET /health para readiness probes.

graph LR
    Client["Cliente HTTP"]
    CF["Cloudflare Worker"]
    API[".NET Container"]
    DGI["DGI SOAP WS"]

    Client -->|"HTTP + X-Tenant-Id"| CF
    CF -->|"route por tenant"| API
    API -->|"SOAP"| DGI

Cada tenant obtiene su propio contenedor con estado aislado. Los contenedores se duermen tras inactividad y se relanzan automáticamente.


MétodoRutaDescripción
POST/cfe/xmlGenera y firma XML (requiere Tipo en body)
POST/cfe/enviarFirma y envía CFE a DGI
POST/cfe/pdf/a4Genera PDF A4
POST/cfe/pdf/termicoGenera PDF térmico
POST/cfe/consultarConsulta estado en DGI
POST/reporte-diarioEnvía Reporte Diario
POST/cfe/eticket/*Atajos para e-Ticket
POST/cfe/efactura/*Atajos para e-Factura
GET/caeLista CAEs en memoria
POST/caeRegistra CAE en runtime
GET/healthHealth check

  1. Elegir un tenantId

    Usar solo letras, dígitos, - y _. No usar : ni __. Ejemplo: empresa-abc, mi_empresa_01.

  2. Definir variables de entorno

    Cada tenant se configura bajo la sección Tenants:{tenantId}:*:

    Terminal window
    Tenants__empresa-abc__RutEmisor=210000000001
    Tenants__empresa-abc__RazonSocialEmisor=EMPRESA ABC SA
    Tenants__empresa-abc__DomicilioFiscal=AV ITALIA 1234
    Tenants__empresa-abc__CertificadoBase64=<base64 del .p12>
    Tenants__empresa-abc__PasswordCertificado=clave123
    Tenants__empresa-abc__Ambiente=Produccion
    Tenants__empresa-abc__Caes=[{"NroSerie":"CAE001","Tipo":101,"RangoDesde":1,"RangoHasta":1000,"FechaVencimiento":"2026-12-31"}]
  3. Persistir la configuración

    La configuración de cada tenant se persiste según el entorno de despliegue:

    EntornoDónde se persiste
    Cloudflarewrangler secret put Tenants__empresa-abc__* (Cloudflare Secrets)
    Docker localVariables de entorno en docker run -e o docker-compose.yml
    KubernetesConfigMaps / Secrets montados como env vars
    TestApi localappsettings.json o dotnet user-secrets
  4. Enviar el header en cada request

    POST /cfe/enviar HTTP/1.1
    Content-Type: application/json
    X-Tenant-Id: empresa-abc
    { "Tipo": 101, "Numero": 1, ... }

DatoAlmacenamientoSobrevive reinicio
Configuración del tenantVariables de entorno / Secrets✅ Sí
CAEs (desde config Caes)Cargados en memoria al iniciar✅ Sí (se recargan)
CAEs (registrados vía POST /cae)Solo en memoria❌ No

La web de administración (admin/) permite gestionar tenants desde el navegador. Se despliega en Cloudflare Pages con Pages Functions como backend de autenticación.

  • Autenticación por email: token de 6 dígitos con TTL de 10 min → JWT de sesión (24h)
  • Registro de tenant: formulario con validación (tenantId, razón social, RUT, ambiente)
  • Dashboard: estado de la API, CAEs activos, advertencias
  • Emitir CFE: formulario para los 13 tipos
  • Gestión de CAEs: listar, registrar, ver advertencias
  • Configuración: datos del tenant y env vars necesarias
admin/ → Cloudflare Pages (SPA + Functions)
functions/auth/* → Pages Functions (auth backend, KV)
cloudflare/email-worker/ → Worker dedicado envío emails
cloudflare/worker.js → Worker router (API multi-tenant)
src/UruFactura.CloudflareApi → .NET Container (API)

Deploy automático via GitHub Actions (.github/workflows/deploy-admin.yml) o manual:

Terminal window
cd admin
npm run build
npx wrangler pages deploy dist --project-name urufactura-admin
Terminal window
# Terminal 1: UruFactura.TestApi (API local con Scalar UI)
cd src/UruFactura.TestApi && dotnet run
# Terminal 2: Admin + Pages Functions (KV local)
cd admin && npx wrangler pages dev --kv AUTH_CODES --kv AUTH_SESSIONS --kv TENANTS -- npm run dev

Worker dedicado (cloudflare/email-worker/) para envío de emails transaccionales (códigos de verificación). Soporta:

  • MailChannels (gratis para Workers, requiere SPF DNS record)
  • API custom (Resend, SendGrid) via EMAIL_API_URL + EMAIL_API_KEY

Las Pages Functions pueden usarlo via service binding (EMAIL_WORKER) o enviar directo por MailChannels.

Deploy automático via .github/workflows/deploy-email-worker.yml o manual:

Terminal window
cd cloudflare/email-worker
wrangler deploy

El proyecto UruFactura.TestApi referencia CloudflareApi y agrega Scalar UI para exploración interactiva:

Terminal window
cd src/UruFactura.TestApi
dotnet run
# Abrir http://localhost:5100 → Scalar UI

Comparte exactamente los mismos endpoints y lógica multi-tenant. Ideal para:

  • Probar integraciones antes de desplegar.
  • Validar payloads de CFE.
  • Depurar flujos de firma y envío a DGI (homologación).