Integración · E-commerce

Factura electrónica para WooCommerce y Shopify en Costa Rica

La idea es simple: conectás tu tienda en línea a la API de Plaxp y cada venta pagada emite su comprobante electrónico solo. Tu cliente recibe el PDF y el XML por correo, y vos no tocás nada. Funciona con WooCommerce, Shopify o cualquier plataforma que pueda hacer una llamada HTTP cuando se paga una orden.

¿Cómo se factura desde una tienda en línea?

Por integración vía API, no por un botón mágico. El patrón es siempre el mismo: tu tienda escucha el evento de orden pagada y, cuando ocurre, dispara un POST a la API de Plaxp con los datos de la venta. Nosotros generamos el XML v4.4, lo firmamos con XAdES, lo enviamos a Hacienda y le mandamos al cliente el PDF y los XML por correo.

  • Se paga una orden en tu tienda (WooCommerce, Shopify, u otra)
  • La tienda dispara un POST a la API con receptor, líneas y medios de pago
  • Plaxp arma el XML 4.4, lo firma y lo envía a Hacienda
  • El cliente recibe su comprobante (PDF + XML) por correo
  • Vos consultás el estado por la clave cuando lo necesités

Plugin de WooCommerce o integración por API

Tenés un módulo para WooCommerce que conecta tu tienda con Plaxp y emite el comprobante de cada orden pagada sin que toques nada. Y si preferís control total —o usás otra plataforma— podés integrar directo por la API (tu tienda llama a la API cuando se paga la orden, con los webhooks o eventos nativos de tu e-commerce). .

¿Cómo se ve la integración?

Es una llamada que corrés al recibir el webhook de orden pagada de tu tienda. Mapeás los ítems de la orden a las líneas del comprobante y listo:

webhook-orden-pagada.js
// Handler del webhook "order paid" de tu tienda (WooCommerce/Shopify/…)
export async function onOrderPaid(order) {
  await fetch('https://api.plaxp.com/api/procesar', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-Key': process.env.PLAXP_API_KEY,
    },
    body: JSON.stringify({
      tipo_documento: order.customer?.taxId ? '01' : '04', // 01=FE (con datos) · 04=Tiquete
      codigo_sucursal: '001',
      codigo_caja: '001',
      consecutivo: order.number,
      condicion_venta: '01',
      medios_pago: [{ tipo: '04', monto: order.total }],    // 04 = tarjeta
      receptor: order.customer && {
        tipo_identificacion: '01',
        identificacion: order.customer.taxId,
        nombre: order.customer.name,
        correo: order.customer.email,
      },
      lineas: order.items.map((it) => ({
        codigo_cabys: it.cabys,        // el CABYS lo mapeás por producto
        detalle: it.name,
        cantidad: it.qty,
        precio_unitario: it.price,
        codigo_tarifa: '08',           // 08 = IVA 13%
        tarifa: 13,
      })),
    }),
  });
}

Consumidor final vs cliente identificado

Si el comprador te da su cédula, emitís factura electrónica (01); si no, un tiquete electrónico (04) al consumidor final. El mismo endpoint hace las dos: cambiás tipo_documento.

¿Y el CABYS de cada producto?

Cada línea necesita su código CABYS de 13 dígitos. Lo natural es guardarlo como un atributo del producto en tu tienda y mapearlo al armar la línea (como en el ejemplo). Así cada venta sale con el código correcto y evitás el rechazo -400 por CABYS inexistente —uno de los más comunes, documentado en .

¿Por dónde empiezo?

Por la API. Ahí tenés los tipos de comprobante, la autenticación (API Key u OAuth), los ejemplos en varios lenguajes y cómo consultar el estado: la . Y para probar sin emitir en real, la .

¿Querés facturar desde tu tienda en línea?

Te damos credenciales de sandbox y te acompañamos en la integración. Escribinos y arrancamos hoy.

Solicitar acceso a la API

Te acompañamos en la puesta en marcha · soporte rápido de gente real · fácil de usar para todo tu equipo. Somos gente ayudando gente.