Pular para conteúdo

API do Dcart

Visão geral

A API de descontos oferece um sistema completo para gerenciar códigos de desconto e cartões-presente na sua loja Shopify. Esta API permite aplicar descontos por programação, calcular economias e integrar a funcionalidade de descontos à sua loja virtual.

Primeiros passos

Configuração básica

A API de descontos é inicializada automaticamente quando o seu app carrega. Você pode começar a usá-la imediatamente pelo 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');
});

Funcionalidades principais

Aplicando códigos de desconto

Use o método apply() para ativar códigos de desconto para os clientes.

Aplique um único código de desconto:

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

Aplique vários códigos de desconto:

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

Observação: os códigos de desconto são convertidos automaticamente para minúsculas e os espaços no início e no fim são removidos.

Removendo códigos de desconto

Remova códigos de desconto ativos usando o método remove().

Remova um código de desconto específico:

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

Remova todos os códigos de desconto ativos:

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

Gerenciando cartões-presente

Remova cartões-presente aplicados usando o identificador único de cada um.

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

Calculando descontos

Visualize os cálculos de desconto sem aplicá-los ao carrinho.

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

A API de descontos oferece um sistema completo de eventos para acompanhar as atividades de desconto e integrar com o seu código personalizado.

Assinando 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 disponíveis

dcartAPI.Events.Discount.Calculated

Disparado quando os cálculos de desconto são concluídos ou recalculados.

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

Casos de uso:

  • Atualizar exibições de totais personalizadas
  • Atualizar resumos do carrinho
  • Disparar eventos de analytics

dcartAPI.Events.Discount.Apply

Disparado quando o botão de aplicar é clicado, antes de o desconto ser processado.

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 carregamento
  • Validar códigos de desconto antes do envio
  • Acompanhar as interações do usuário

dcartAPI.Events.Discount.Applied

Disparado quando um código de desconto é aplicado com sucesso ao carrinho.

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:

  • Exibir mensagens de sucesso
  • Atualizar as exibições do carrinho
  • Acompanhar aplicações de desconto bem-sucedidas
  • Disparar fluxos de trabalho promocionais

dcartAPI.Events.Discount.Removed

Disparado quando um código de desconto é removido do carrinho.

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:

  • Atualizar as exibições do carrinho
  • Remover mensagens promocionais
  • Acompanhar remoções de desconto
  • Redefinir estados promocionais

Exemplo completo de integração 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 = '';
});
  });
})();

Tratamento de erros

Sempre implemente um tratamento de erros adequado para as operações de desconto:

// 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.');
    }
});

Boas práticas

Considerações de desempenho

  • Operações em lote : ao aplicar vários códigos, use uma única chamada apply() com um array
  • Limitação de eventos : aplique debounce em cálculos de desconto repetidos para evitar problemas de desempenho
  • Recuperação de erros : implemente lógica de nova tentativa para falhas de rede

Experiência do usuário

  • Estados de carregamento : sempre mostre indicadores de carregamento durante as operações de desconto
  • Feedback claro : forneça feedback imediato quando descontos forem aplicados ou removidos
  • Validação : valide os códigos de desconto no lado do cliente quando possível, para reduzir requisições ao servidor

Diretrizes de integração

  • Ordem dos eventos : assine os eventos depois que a API for inicializada
  • Gerenciamento de memória : cancele a assinatura dos eventos quando os componentes forem destruídos
  • Alternativas (fallback) : implemente alternativas para quando a API estiver indisponível

Casos de uso comuns

Aplicando descontos de URL automaticamente

// 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);
  });
}

Integração de contagem regressiva promocional

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

Integração de testes 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
  });
});

Referência da API

Métodos

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

Aplica um ou mais códigos de desconto ao carrinho.

Parâmetros:

  • codes: uma string com um único código de desconto ou um array de códigos de desconto

Retorna: Promise que é resolvida quando os códigos são aplicados

remove(code?: string): Promise

Remove um código de desconto específico ou todos os códigos, se nenhum for informado.

Parâmetros:

  • code (opcional): o código de desconto a remover. Se omitido, remove todos os códigos

Retorna: Promise que é resolvida quando o(s) código(s) são removidos

removeGiftCard(id: string): Promise

Remove um cartão-presente do carrinho.

Parâmetros:

  • id: o ID do cartão-presente a remover

Retorna: Promise que é resolvida quando o cartão-presente é removido

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

Calcula os valores de desconto sem aplicá-los.

Parâmetros:

  • codes: array de códigos de desconto a calcular
  • items: array de itens do carrinho para o cálculo

Retorna: Promise que é resolvida com os dados do cálculo de desconto

setCustomConfig(config: Record): void

Define opções de configuração personalizadas.

Parâmetros:

  • config: objeto de configuração com as configurações personalizadas

cloneAndInjectInfo(targetSelector: string): void

Clona as informações de desconto para um elemento de destino.

Parâmetros:

  • targetSelector: seletor CSS do elemento de destino

Eventos

Evento Descrição
Discount.Calculated Cálculos de desconto concluídos
Discount.Apply Botão de aplicar clicado
Discount.Applied Desconto aplicado com sucesso
Discount.Removed Desconto removido do carrinho

Solução de problemas

Problemas comuns

Descontos não são aplicados

  • Verifique se o código de desconto é válido e está ativo
  • Confira se o carrinho atende aos requisitos mínimos
  • Certifique-se de que a API foi inicializada corretamente

Eventos não disparam

  • Confirme que as assinaturas de eventos acontecem depois da inicialização da API
  • Verifique se há erros de JavaScript no console
  • Confirme se os nomes dos eventos estão escritos corretamente

Totais não são atualizados

  • Verifique se os seletores de total estão configurados corretamente
  • Confirme que a configuração personalizada não exclui elementos necessários
  • Certifique-se de que os elementos da página existem quando os totais são calculados

Precisa de ajuda? Escreva para support@syncu.be.