Guía por stack .NET 6+ HttpClient

Cómo enviar facturas electrónicas al SRI desde C# y .NET

Emite facturas electrónicas del SRI desde C# y .NET con HttpClient. Envías un objeto, recibes la autorización: sin construir ni firmar el XML a mano.

LO QUE VAS A HACER5 pasos

  1. Crea el proyecto
  2. Reemplaza Program.cs
  3. Ejecútalo
  4. Llévalo a una aplicación real
  5. Maneja errores y reintentos

Antes de empezar

.NET 6 o superior

Una API key de pruebas de Flashpi

Guárdala en una variable de entorno, nunca en el código ni en el repositorio.

Solicítala aquí

Tu certificado de firma .p12

Cargado en la cuenta de pruebas.

Cargar el certificado

Tus datos de emisor

RUC, establecimiento y punto de emisión configurados en tu cuenta.

Paso 1 · Crea el proyecto

bashterminal
dotnet new console -n Facturacion
cd Facturacion
export FLASHPI_API_KEY="tu_api_key_de_pruebas"

Paso 2 · Reemplaza Program.cs

csharpProgram.cs · .NET 6 o superior
// Program.cs  (.NET 6 o superior)
using System.Net.Http.Headers;
using System.Net.Http.Json;

var apiKey = Environment.GetEnvironmentVariable("FLASHPI_API_KEY")
    ?? throw new InvalidOperationException("Falta la variable FLASHPI_API_KEY");

using var http = new HttpClient
{
    BaseAddress = new Uri("https://api.flashpi.ec/v1/"),
    Timeout = TimeSpan.FromSeconds(30)
};
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);

var factura = new
{
    comprador = new
    {
        tipo_identificacion = "cedula",
        identificacion = "0102030405",
        razon_social = "Cliente de ejemplo",
        email = "[email protected]"
    },
    detalles = new[]
    {
        new { descripcion = "Servicio de ejemplo", cantidad = 1, precio_unitario = 25.00 }
    }
};

var respuesta = await http.PostAsJsonAsync("facturas", factura);
var cuerpo = await respuesta.Content.ReadAsStringAsync();

if (!respuesta.IsSuccessStatusCode)
{
    Console.Error.WriteLine($"Flashpi {(int)respuesta.StatusCode}: {cuerpo}");
    return 1;
}

Console.WriteLine(cuerpo);
return 0;

Paso 3 · Ejecútalo

bashterminal
dotnet run

Paso 4 · Llévalo a una aplicación real

En ASP.NET Core no crees un HttpClient por solicitud. Regístralo con IHttpClientFactory (builder.Services.AddHttpClient<FlashpiClient>(...)) y lee la API key desde la configuración o un gestor de secretos.

Paso 5 · Maneja errores y reintentos

Ante EN_PROCESAMIENTO consulta el estado en lugar de reenviar. Para reintentos ante fallos de red, usa una política de reintentos (por ejemplo con Polly) y un identificador único por venta, para no duplicar comprobantes.

Errores frecuentes

SíntomaCausa probableQué hacerReferencia
401 UnauthorizedAPI key ausente, inválida o de otro ambiente.Revisa el header Authorization y que uses la key del ambiente correcto.Ver detalle
422 Esquema XMLAlgún campo no cumple la estructura esperada.Lee el detalle del error y corrige el campo indicado.Ver detalle
SRI 43Clave de acceso ya registrada.No reenvíes: consulta el estado del comprobante por su clave de acceso.Ver detalle
SRI 70Clave de acceso en procesamiento.Espera unos segundos y consulta el estado. No reenvíes el comprobante.Ver detalle

Siguientes pasos

Empieza hoy

Obtén tu API key y prueba el ejemplo

Prueba la API en el ambiente de pruebas del SRI y pasa a producción cuando estés listo.