Shopify

Integra InvoCash con Shopify

Genera facturas VeriFactu automáticamente en cada pedido pagado en tu tienda Shopify. Integración vía webhooks.

Shopify

Facturación española en tu tienda Shopify

Shopify no genera facturas con los requisitos de VeriFactu exigidos en España. InvoCash soluciona este problema: registra un webhook en tu tienda Shopify para el evento orders/paid y tu backend recibirá los datos del pedido para crear automáticamente la factura homologada.

La integración es independiente de cualquier app de la Shopify App Store: tú controlas el proceso de facturación con la API de InvoCash y tu propio backend.

Webhookorders/paid dispara la facturación automática
Cualquier stackNode.js, PHP, Python — el que uses en tu backend
100%cumplimiento VeriFactu y Ley Antifraude
Cómo funciona

Integración en 3 pasos automáticos

1. Shopify notifica el pago

Al completarse el pago, Shopify envía el evento orders/paid a tu endpoint webhook con todos los datos del pedido en JSON.

2. Tu backend procesa el webhook

Tu backend recibe el payload de Shopify, verifica la firma HMAC-SHA256 y llama a la API de InvoCash con los datos de facturación.

3. Factura VeriFactu generada

InvoCash genera la factura homologada, la valida con la AEAT y la envía por email al cliente con el PDF adjunto.

Código

Código de integración

1

Registra el webhook en Shopify

Desde el Admin de Shopify o via API, registra un webhook para el evento orders/paid apuntando a tu endpoint.

// Registrar webhook via Shopify Admin API
await fetch(`https://${SHOP}/admin/api/2024-01/webhooks.json`, {
  method:  'POST',
  headers: {
    'Content-Type':           'application/json',
    'X-Shopify-Access-Token': ACCESS_TOKEN,
  },
  body: JSON.stringify({
    webhook: {
      topic:   'orders/paid',
      address: 'https://tu-backend.com/webhooks/shopify/orders-paid',
      format:  'json',
    }
  }),
});
2

Recibe el webhook y crea la factura

// Express endpoint para recibir el webhook de Shopify
app.post('/webhooks/shopify/orders-paid', async (req, res) => {
  const order    = req.body;
  const taxBase  = parseFloat(order.subtotal_price);
  const taxAmt   = parseFloat(order.total_tax);
  const taxPctge = taxBase > 0 ? Math.round(taxAmt / taxBase * 100) : 21;

  await fetch('https://{su-tenant}.invo.cash/api/invoices', {
    method:  'POST',
    headers: { 'Content-Type': 'application/json', 'X-API-Key': API_KEY },
    body: JSON.stringify({
      verifactu_issuer_territory: 'MAINLAND',
      simplified:                 false,
      lines: order.line_items.map(item => ({
        description:             item.name,
        quantity:                item.quantity,
        unit_price:              parseFloat(item.price),
        tax_base:                parseFloat(item.price) * item.quantity,
        tax_pctge:               taxPctge,
        tax_amount:              parseFloat(item.price) * item.quantity * taxPctge / 100,
        tax_withholding_pctge:   0,
        tax_withholding_amount:  0,
        tax_type:                'IVA',
        clave_regimen:           '01',
        qualification_operation: 'S1',
        exempt_operation:        null,
        total:                   parseFloat(item.price) * item.quantity,
      })),
      total: parseFloat(order.total_price),
    }),
  });
  res.status(200).send('OK');
});

VeriFactu incluido automáticamente: todas las facturas creadas mediante la API de InvoCash se procesan con el sistema VeriFactu de la AEAT. Cumplimiento de la Ley Antifraude y el RD 1007/2023 sin ningún desarrollo adicional por tu parte.

Caso de uso

Tienda Shopify internacional con facturación española automática

Una marca de cosmética con tienda Shopify que vende a clientes españoles necesitaba cumplir con VeriFactu sin migrar de plataforma. Un webhook hacia un backend Node.js conectado a InvoCash genera automáticamente la factura española para cada pedido pagado, mientras Shopify sigue gestionando el resto del proceso de venta sin cambios.

Contacto

¿Necesitas ayuda con la integración?

Nuestro equipo técnico te acompaña en todo el proceso. Sin compromiso.