コンテンツにスキップ

Dcart API

概要

Discount API は、Shopify ストアのディスカウントコードとギフトカードを管理する包括的な仕組みを提供します。この API を使うと、割引をプログラムから適用し、節約額を計算し、ストアフロントに割引機能を組み込めます。

はじめに

基本設定

Discount API は、アプリの読み込み時に自動的に初期化されます。グローバルの 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');
});

主な機能

ディスカウントコードの適用

apply() メソッドを使うと、顧客のディスカウントコードを有効にできます。

ディスカウントコードを1つ適用する:

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

複数のディスカウントコードを適用する:

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

注: ディスカウントコードは自動的に小文字に変換され、前後の空白が削除されます。

ディスカウントコードの削除

remove() メソッドを使うと、有効なディスカウントコードを削除できます。

特定のディスカウントコードを削除する:

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

有効なディスカウントコードをすべて削除する:

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

ギフトカードの管理

適用済みのギフトカードを、その一意の ID を使って削除します。

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

割引の計算

カートに適用せずに、割引の計算結果をプレビューします。

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

イベントシステム

Discount API は、割引のアクティビティを追跡し、独自のコードと連携するための包括的なイベントシステムを提供します。

イベントの購読

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

利用可能なイベント

dcartAPI.Events.Discount.Calculated

割引の計算が完了したとき、または再計算されたときに発生します。

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

用途:

  • 独自の合計金額の表示を更新する
  • カートの概要を更新する
  • 分析イベントを発生させる

dcartAPI.Events.Discount.Apply

適用ボタンがクリックされたときに、割引が処理される前に発生します。

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

用途:

  • 読み込み中の状態を表示する
  • 送信前にディスカウントコードを検証する
  • ユーザーの操作を追跡する

dcartAPI.Events.Discount.Applied

ディスカウントコードがカートに正常に適用されたときに発生します。

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

用途:

  • 成功メッセージを表示する
  • カートの表示を更新する
  • ディスカウントの適用が成功したことを追跡する
  • プロモーションのワークフローを開始する

dcartAPI.Events.Discount.Removed

ディスカウントコードがカートから削除されたときに発生します。

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

用途:

  • カートの表示を更新する
  • プロモーションのメッセージを削除する
  • ディスカウントの削除を追跡する
  • プロモーションの状態をリセットする

イベント連携の完全な例

(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 = '';
});
  });
})();

エラー処理

ディスカウントの操作では、必ず適切なエラー処理を実装してください。

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

ベストプラクティス

パフォーマンスの考慮事項

  • 一括処理 : 複数のコードを適用する場合は、配列を渡して apply() を1回だけ呼び出します
  • イベントのスロットリング : 割引の計算が連続して発生する場合は、デバウンスして性能の問題を防ぎます
  • エラーからの回復 : ネットワークの障害に備えて、再試行のロジックを実装します

ユーザー体験

  • 読み込み中の状態 : ディスカウントの操作中は、必ず読み込み中のインジケーターを表示します
  • わかりやすいフィードバック : ディスカウントを適用または削除したら、すぐにフィードバックを表示します
  • 検証 : 可能であれば、サーバーへのリクエストを減らすために、ディスカウントコードをクライアント側で検証します

連携のガイドライン

  • イベントの順序 : API の初期化後にイベントを購読します
  • メモリ管理 : コンポーネントが破棄されたときに、イベントの購読を解除します
  • フォールバック処理 : API が利用できない場合に備えて、フォールバックを実装します

よくある用途

URL のディスカウントを自動適用する

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

プロモーションのカウントダウンとの連携

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

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

API リファレンス

メソッド

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

1つ以上のディスカウントコードをカートに適用します。

パラメーター:

  • codes: 単一のディスカウントコードの文字列、またはディスカウントコードの配列

戻り値: コードが適用されたときに解決される Promise

remove(code?: string): Promise

特定のディスカウントコードを削除します。コードを指定しない場合は、すべてのコードを削除します。

パラメーター:

  • code(省略可): 削除するディスカウントコード。省略した場合は、すべてのコードを削除します

戻り値: コードが削除されたときに解決される Promise

removeGiftCard(id: string): Promise

カートからギフトカードを削除します。

パラメーター:

  • id: 削除するギフトカードの ID

戻り値: ギフトカードが削除されたときに解決される Promise

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

ディスカウントコードを適用せずに、割引額を計算します。

パラメーター:

  • codes: 計算するディスカウントコードの配列
  • items: 計算の対象となるカート商品の配列

戻り値: 割引の計算データとともに解決される Promise

setCustomConfig(config: Record): void

カスタム設定のオプションを設定します。

パラメーター:

  • config: カスタム設定を含む設定オブジェクト

cloneAndInjectInfo(targetSelector: string): void

割引の情報を対象の要素にクローンします。

パラメーター:

  • targetSelector: 対象の要素の CSS セレクター

イベント

イベント 説明
Discount.Calculated 割引の計算が完了
Discount.Apply 適用ボタンがクリックされた
Discount.Applied ディスカウントが正常に適用された
Discount.Removed カートからディスカウントが削除された

トラブルシューティング

よくある問題

ディスカウントが適用されない

  • 指定したディスカウントコードが有効で、アクティブであることを確認します
  • カートが最低要件を満たしているか確認します
  • API が正しく初期化されていることを確認します

イベントが発生しない

  • イベントの購読が API の初期化後に行われていることを確認します
  • コンソールに JavaScript のエラーがないか確認します
  • イベント名のスペルが正しいか確認します

合計金額が更新されない

  • 合計金額のセレクターが正しく設定されているか確認します
  • カスタム設定で、必要な要素が除外されていないか確認します
  • 合計金額を計算する時点で、ページの要素が存在することを確認します

お困りですか? support@syncu.be までご連絡ください。