Saltar a contenido

API de Dcart

Descripción general

La API de descuentos ofrece un sistema completo para gestionar códigos de descuento y tarjetas de regalo en tu tienda Shopify. Esta API te permite aplicar descuentos mediante programación, calcular ahorros e integrar la funcionalidad de descuentos en el código de tu tienda online.

Primeros pasos

Configuración básica

La API de descuentos se inicializa automáticamente al cargar la app. Puedes empezar a usarla de inmediato a través del objeto global dcartAPI.

// Wait for the API to be ready
window.addEventListener('DCART:appApi.initialized', function() {
  // API is now ready to use
  console.log('Discount API ready');
});

Funcionalidad principal

Aplicar códigos de descuento

Usa el método apply() para activar códigos de descuento para los clientes.

Aplica un único código de descuento:

dcartAPI.apply('SAVE20')
  .then(() => {
      console.log('Discount applied successfully');
  })
  .catch((error) => {
      console.error('Failed to apply discount:', error);
  });

Aplica varios códigos de descuento:

dcartAPI.apply(['SAVE20', 'FREESHIP'])
  .then(() => {
    console.log('All discounts applied successfully');
  });

Nota: Los códigos de descuento se convierten automáticamente a minúsculas y se les quitan los espacios sobrantes.

Eliminar códigos de descuento

Elimina los códigos de descuento activos con el método remove().

Elimina un código de descuento concreto:

dcartAPI.remove('SAVE20')
  .then(() => {
    console.log('Discount removed successfully');
  });

Elimina todos los códigos de descuento activos:

dcartAPI.remove()
  .then(() => {
    console.log('All discounts removed');
  });

Gestionar tarjetas de regalo

Elimina las tarjetas de regalo aplicadas usando su identificador único.

dcartAPI.removeGiftCard('giftcard_id_here')
  .then(() => {
    console.log('Gift card removed successfully');
  });

Calcular descuentos

Previsualiza los cálculos de descuento sin aplicarlos al carrito.

const discountCodes = ['SAVE20', 'FREESHIP'];
const cartItems = [
  { id: 123, quantity: 2, price: 2500 },
  { id: 456, quantity: 1, price: 1000 }
];

dcartAPI.calculate(discountCodes, cartItems)
  .then((discountData) => {
    console.log('Calculated savings:', discountData);
    // discountData contains totals, savings, and applied discounts
  });

Sistema de eventos

La API de descuentos ofrece un sistema de eventos completo para hacer seguimiento de la actividad de descuentos e integrarla con tu código personalizado.

Suscribirse a eventos

window.addEventListener('DCART:appApi.initialized', function() {
  // Subscribe to discount events
  dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Applied, function(data) {
    console.log('Discount was applied:', data);
  });
});

Eventos disponibles

dcartAPI.Events.Discount.Calculated

Se activa cuando los cálculos de descuento se completan o se recalculan.

dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Calculated, function(discountData) {
  console.log('Discount calculated:', discountData);
  // Update UI with new totals
  updateCartTotals(discountData);
});

Casos de uso:

  • Actualizar las pantallas de totales personalizadas
  • Refrescar los resúmenes del carrito
  • Disparar eventos de analíticas

dcartAPI.Events.Discount.Apply

Se activa cuando se hace clic en el botón de aplicar, antes de procesar el descuento.

dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Apply, function(data) {
  console.log('User clicked apply button');
  // Show loading indicator
  showLoadingSpinner();
});

Casos de uso:

  • Mostrar estados de carga
  • Validar los códigos de descuento antes de enviarlos
  • Hacer seguimiento de las interacciones del usuario

dcartAPI.Events.Discount.Applied

Se activa cuando un código de descuento se aplica correctamente al carrito.

dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Applied, function(data) {
  console.log('Discount successfully applied:', data);
  // Show success message
  showSuccessMessage('Discount applied!');
  // Track conversion
  gtag('event', 'discount_applied', { discount_code: data.code });
});

Casos de uso:

  • Mostrar mensajes de éxito
  • Actualizar las pantallas del carrito
  • Hacer seguimiento de las aplicaciones de descuento correctas
  • Disparar flujos de trabajo promocionales

dcartAPI.Events.Discount.Removed

Se activa cuando se elimina un código de descuento del carrito.

dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Removed, function(data) {
  console.log('Discount removed:', data);
  // Update UI to reflect removal
  removeDiscountFromDisplay(data.code);
});

Casos de uso:

  • Actualizar las pantallas del carrito
  • Eliminar mensajes promocionales
  • Hacer seguimiento de las eliminaciones de descuentos
  • Restablecer los estados promocionales

Ejemplo completo de integración de eventos

(function() {
  window.addEventListener('DCART:appApi.initialized', function() {
  // Track all discount interactions
  dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Apply, function() {
  // User started applying discount
  document.querySelector('.discount-form').classList.add('loading');
});

dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Applied, function(data) {
  // Discount successfully applied
  document.querySelector('.discount-form').classList.remove('loading');
  showNotification('Discount applied: ' + data.code, 'success');

  // Track in analytics
  if (typeof gtag !== 'undefined') {
    gtag('event', 'discount_applied', {
      discount_code: data.code,
      discount_amount: data.amount
    });
  }
});

dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Calculated, function(discountData) {
  // Update custom total displays
  const savings = discountData.originalTotal - discountData.total;
  if (savings > 0) {
    document.querySelector('.savings-display').textContent =
      'You saved $' + (savings / 100).toFixed(2);
  }
});

dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Removed, function(data) {
  // Handle discount removal
  showNotification('Discount removed: ' + data.code, 'info');
  document.querySelector('.savings-display').textContent = '';
});
  });
})();

Gestión de errores

Implementa siempre una gestión de errores adecuada para las operaciones de descuento:

// Handle specific error types
dcartAPI.apply('INVALID_CODE') .then(() => { console.log('Success'); })
  .catch((error) => {
    console.error('Error applying discount:', error);
    if (error.message.includes('expired')) {
       showErrorMessage('This discount code has expired');
    } else if (error.message.includes('invalid')) {
       showErrorMessage('Invalid discount code');
    } else {
       showErrorMessage('Unable to apply discount. Please try again.');
    }
});

Buenas prácticas

Consideraciones de rendimiento

  • Operaciones por lotes : Al aplicar varios códigos, usa una sola llamada a apply() con un array
  • Limitación de eventos : Aplica debounce a los cálculos de descuento rápidos para evitar problemas de rendimiento
  • Recuperación de errores : Implementa lógica de reintento para fallos de red

Experiencia de usuario

  • Estados de carga : Muestra siempre indicadores de carga durante las operaciones de descuento
  • Feedback claro : Ofrece retroalimentación inmediata cuando se aplican o eliminan descuentos
  • Validación : Valida los códigos de descuento en el cliente siempre que sea posible para reducir las solicitudes al servidor

Pautas de integración

  • Orden de eventos : Suscríbete a los eventos después de que la API esté inicializada
  • Gestión de memoria : Cancela la suscripción a los eventos cuando se destruyan los componentes
  • Gestión de alternativas : Implementa alternativas para cuando la API no esté disponible

Casos de uso habituales

Aplicar descuentos desde la URL automáticamente

// Check URL for discount parameters and auto-apply
const urlParams = new URLSearchParams(window.location.search);
const discountCode = urlParams.get('discount');

if (discountCode) {
  window.addEventListener('DCART:appApi.initialized', function() {
    dcartAPI.apply(discountCode);
  });
}

Integración de cuenta atrás promocional

dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Applied, function(data) {
  // Start countdown timer for time-sensitive discounts
  if (data.expiresAt) {
    startCountdownTimer(data.expiresAt);
  }
});

Integración de pruebas A/B

dcartAPI.eventBus.subscribe(dcartAPI.Events.Discount.Calculated, function(discountData) {
  // Track discount effectiveness for A/B testing
  analytics.track('discount_calculated', {
    test_variant: getTestVariant(),
    discount_amount: discountData.totalSavings,
    cart_total: discountData.total
  });
});

Referencia de la API

Métodos

apply(codes: string | string[]): Promise

Aplica uno o varios códigos de descuento al carrito.

Parámetros:

  • codes: Una cadena con un código de descuento o un array de códigos de descuento

Devuelve: Promise que se resuelve cuando los códigos se aplican

remove(code?: string): Promise

Elimina un código de descuento concreto o todos los códigos si no se indica ninguno.

Parámetros:

  • code (opcional): El código de descuento que se va a eliminar. Si se omite, elimina todos los códigos

Devuelve: Promise que se resuelve cuando se eliminan los códigos

removeGiftCard(id: string): Promise

Elimina una tarjeta de regalo del carrito.

Parámetros:

  • id: El ID de la tarjeta de regalo que se va a eliminar

Devuelve: Promise que se resuelve cuando la tarjeta de regalo se elimina

calculate(codes: string[], items: any[]): Promise

Calcula los importes de descuento sin aplicarlos.

Parámetros:

  • codes: Array de códigos de descuento que se van a calcular
  • items: Array de artículos del carrito sobre los que calcular

Devuelve: Promise que se resuelve con los datos del cálculo de descuentos

setCustomConfig(config: Record): void

Define opciones de configuración personalizadas.

Parámetros:

  • config: Objeto de configuración con ajustes personalizados

cloneAndInjectInfo(targetSelector: string): void

Copia la información de descuentos a un elemento de destino.

Parámetros:

  • targetSelector: Selector CSS del elemento de destino

Eventos

Evento Descripción
Discount.Calculated Cálculos de descuento completados
Discount.Apply Se hace clic en el botón de aplicar
Discount.Applied Descuento aplicado correctamente
Discount.Removed Descuento eliminado del carrito

Solución de problemas

Problemas habituales

Los descuentos no se aplican

  • Verifica que el código de descuento sea válido y esté activo
  • Comprueba que el carrito cumple los requisitos mínimos
  • Asegúrate de que la API esté inicializada correctamente

Los eventos no se disparan

  • Confirma que las suscripciones a eventos se realizan después de inicializar la API
  • Busca errores de JavaScript en la consola
  • Verifica que los nombres de los eventos estén bien escritos

Los totales no se actualizan

  • Comprueba que los selectores de totales estén bien configurados
  • Verifica que la configuración personalizada no excluya elementos necesarios
  • Asegúrate de que los elementos de la página existan cuando se calculen los totales

¿Necesitas ayuda? Escribe a support@syncu.be.