Enviar XML TicketBAI desde Stripe

Para enviar el XML TicketBAI desde Stripe, necesito un conector que lo genere, lo firme y lo presente ante la Hacienda Foral correspondiente. Cobrar en Stripe no basta: también debo emitir la factura con su identificador TicketBAI y su QR.

Lo organizo en 3 pasos:

  1. Reviso la factura y los datos fiscales. Uso invoice.finalized si facturo en Stripe o payment_intent.succeeded si solo gestiono el cobro, evitando duplicados.
  2. Genero, firmo y envío el XML. Compruebo los requisitos de Álava, Bizkaia o Gipuzkoa; en Bizkaia, también los de Batuz y el LROE. Reviso la respuesta fiscal: un HTTP 200 no confirma la aceptación.
  3. Entrego el PDF con QR y guardo los registros. Desactivo el envío automático de Stripe para evitar copias sin QR y conservo el XML firmado, la respuesta y la factura.

Antes de empezar, compruebo el certificado y pruebo el flujo. Si hay rechazos o devoluciones, sigo el procedimiento correspondiente: <u>no sobrescribo una factura emitida</u>.

De Stripe a TicketBAI: flujo de envío del XML

De Stripe a TicketBAI: flujo de envío del XML

Paso 1: comprueba la factura en Stripe

Finaliza la factura y revisa los datos fiscales

Revisa el borrador antes de finalizarlo. Mientras la factura esté en estado draft, comprueba las líneas, cantidades, descuentos e IVA. La serie y el número deben coincidir con los gestionados en Stripe: el registro TicketBAI debe conservar ambos datos.

Una vez validada, la factura pasa del panel de Stripe al flujo TicketBAI sin cambiar tu trabajo diario. El webhook debe usar esa factura validada como única entrada del flujo.

Facturar y cobrar son procesos distintos. Aunque el pago falle, la factura finalizada sigue siendo válida. Si solo usas Stripe para cobrar, genera la factura fiscal en el conector y desactiva el envío automático de Stripe. Así, el cliente recibirá el PDF de la factura con QR.

Procesa los eventos de Stripe sin duplicados

Da una función distinta a cada evento. Usa invoice.finalized para iniciar el proceso e invoice.paid solo para confirmar el cobro. En los pagos directos, payment_intent.succeeded activa la generación de la factura correspondiente.

Valida el webhook con Stripe-Signature y la clave secreta del endpoint. Guarda el Event ID y el Invoice ID para evitar que se procese de nuevo la misma factura. La cola del conector gestiona los eventos pendientes o que llegan fuera de orden. Con ambos identificadores registrados, el conector puede generar el XML una sola vez.

Paso 2: genera, firma y envía el XML

Una vez registrados la factura o el cobro, el conector genera, firma y envía el XML sin cambiar tu flujo en Stripe.

Mapea los datos de Stripe al XML TicketBAI

Con la factura validada, el conector convierte los datos de Stripe al XML TicketBAI y comprueba el archivo contra el esquema foral antes de firmarlo.

Origen del datoDestino en TicketBAIValidaciónSi falta
Número de factura y serie de StripeNumSerieFacturaNumeración correlativa y coincidente con la facturaDetener la generación; no inventar una numeración
Datos fiscales del negocio y del clienteCampos de identificación fiscalNIF y datos obligatorios correctosCompletar los datos
Desglose fiscal de StripeDesgloseIVACoherencia entre tipos, bases y cuotasRevisar Stripe Tax o la configuración fiscal
Total, moneda y fecha de expediciónImporteTotal y FechaExpedicionFacturaImportes que cuadren y formato del esquema foralResolver las diferencias antes de firmar
Huella y encadenamientoEnlace con el registro anteriorContinuidad del historialNo generar una nueva cadena

Si Stripe cobra en otra moneda, el conector debe convertirla al formato fiscal exigido.

Una vez validado el XML, el siguiente paso es firmarlo y presentarlo. Puedes ver cómo funciona este proceso en la demo del conector Stripe–VeriFactu.

Firma y envía el XML

Comprueba que el certificado esté vigente y que exista habilitación como colaborador social. Si el proveedor actúa como colaborador social, debe firmar y presentar el XML con su certificado, siguiendo la norma foral. Firmar no equivale a obtener la aceptación.

Envía el XML a la Hacienda Foral correspondiente. En Bizkaia, intégralo en Batuz mediante el LROE. Guarda el XML firmado, el identificador de factura, la fecha y hora de envío, la referencia de integridad y la respuesta completa.

Resuelve rechazos y fallos de envío

Si Hacienda rechaza el XML, localiza la fase en la que se ha producido el fallo:

EtapaResultado esperadoQué significa el falloAcción
GeneraciónXML completoFaltan datos fiscales o están mal mapeadosCorregir el origen del dato
ValidaciónEsquema y reglas correctosEl formato o el contenido no son compatiblesRevisar los campos y la documentación foral
FirmaXML firmadoEl certificado ha caducado o falta habilitaciónResolver el problema del certificado o de la representación
TransmisiónRespuesta del servicioHay un error de conexión o el destino es incorrectoVerificar el canal y gestionar el reintento
AceptaciónConfirmación de HaciendaHay un rechazo fiscal; un HTTP 200 no bastaLeer el código y seguir el procedimiento indicado

Si se produce un timeout, comprueba primero si la Hacienda Foral ha recibido el registro. Después, reintenta desde la cola con el mismo ID y registra tanto la respuesta como el estado de comunicación. Si el fallo está en otra fase, corrígelo antes de reintentar, también sin cambiar el ID.

Los reembolsos y las notas de crédito deben activar una factura rectificativa o el proceso de cancelación que corresponda. Nunca sobrescribas un registro emitido.

Paso 3: entrega la factura con QR y automatiza el flujo

Añade el identificador TicketBAI y el código QR

Una vez aceptado el XML, el conector añade el identificador TicketBAI y el código QR al PDF final de Stripe. Antes de enviarlo al cliente, comprueba que el QR lleva al entorno de verificación de la Hacienda correspondiente.

Desactiva el envío automático de correos de facturas de Stripe. Así evitas que el cliente reciba una copia sin QR o dos correos. Cuando el PDF final esté generado, el conector se encarga del envío y del registro en Stripe.

Configura el conector de Stripe de ITCONS

El Stripe Verifactu Connector de Stripe invoicing and tax compliance in Spain recoge los datos de facturas y cobros para generar el PDF final. No necesitas programar ni configurar la API manualmente. Puedes consultar el estado, los códigos y el PDF final desde Stripe.

Antes de activarlo, comprueba que el IVA y los impuestos estén bien desglosados en Stripe. Personaliza también la plantilla desde Branding: el conector usará ese diseño.

Guarda los registros y prueba antes de empezar

Guarda en Stripe la factura, el XML firmado, la respuesta y el PDF con QR. Antes de pasar a producción, comprueba en el entorno de pruebas la configuración del emisor y el manejo del certificado.

Conclusión: comprueba el registro TicketBAI completo

Comprueba el estado del envío en Stripe y la respuesta de la Hacienda foral para confirmar que el registro se ha recibido y aceptado. Un pago completado no significa que el trámite esté resuelto: si el envío sigue pendiente o ha sido rechazado, el ciclo TicketBAI en Stripe aún no está cerrado.

Cuando se acepte, guarda todas las evidencias del expediente: el XML válido, la firma, la respuesta del envío y el identificador TicketBAI del PDF con QR. Revisa que los datos de la factura emitida coincidan con el XML, sobre todo el desglose del IVA.

Repite esta comprobación en los movimientos rectificativos y de devolución para mantener la coherencia del registro y su sincronización con Hacienda.

FAQs

¿Cómo sé qué Hacienda Foral me corresponde?

Identifica el territorio histórico en el que tu empresa tiene su domicilio fiscal o donde desarrollas tu actividad económica. Las diputaciones de Álava, Bizkaia y Gipuzkoa gestionan TicketBAI de forma independiente.

Si tu empresa opera en el País Vasco, tu sistema de facturación debe ajustarse a la normativa de la Hacienda Foral que te corresponda e integrarse con ella para enviar correctamente los registros de facturación.

¿Cómo gestiono TicketBAI en las suscripciones de Stripe?

Un conector especializado automatiza TicketBAI en las suscripciones de Stripe sin que tengas que cambiar tu forma de trabajar ni el código. Detecta cada renovación en tiempo real y recoge los datos de la factura y del pago.

El conector firma digitalmente el registro, lo envía a la Hacienda correspondiente y entrega al cliente un PDF con el QR obligatorio. Puedes consultar el estado del envío y el código TicketBAI directamente en la factura o en el pago de Stripe.

¿Puedo emitir facturas si Hacienda no responde?

Sí, puedes emitir facturas aunque Hacienda no responda de inmediato. Si el registro no se valida o procesa correctamente por falta de respuesta o por errores, Stripe Verifactu Connector registra la incidencia y reintenta el envío automáticamente.

Si no recibes el CSV al emitir una factura, revisa el estado del envío para descartar fallos de conexión o errores en los datos. Comprueba también que tu certificado digital esté vigente.

Publicaciones de blog relacionadas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *