ポイント→クーポン変換のアーキテクチャ

ポイント消費からクーポン発行までの技術的な仕組みを詳しく解説

クーポン発行ポイント消費変換フロー設計
読了時間: 9分

この記事について

「ポイントを使う」という行為を、「ポイントを消費してクーポンを発行し、そのクーポンで割引を受ける」という仕組みに置き換えました。その技術的なアーキテクチャを詳しく解説します。

変換処理の全体像

システム間の連携

変換処理に関わるシステム
フロントエンド(Next.js)

入力UI、結果表示、コピー機能

自社サーバー(API Routes)

処理制御、認証検証、トランザクション

外部API

Shopifyクーポン作成API、POSポイント操作API

処理ステップの詳細

変換リクエスト受付

顧客からの変換リクエストを受信し、認証を確認

ポイント残高確認

POS APIでリアルタイムの残高を取得し、変換可能か検証

クーポン生成

Shopify Admin APIで顧客専用のクーポンを作成

ポイント減算

POS APIで指定ポイント分を残高から減算

メタフィールド保存

発行したクーポン情報を顧客のメタフィールドに記録

結果返却

クーポンコードと詳細情報をフロントエンドに返却

各ステップの詳細

ステップ1-2: リクエスト受付と残高確認

残高確認の流れ
リクエスト受信

顧客ID: 12345、変換希望ポイント: 500pt、認証トークン: xxx

認証検証

トークン有効性確認 → OK / 顧客ID所有権確認 → OK

POS残高照会

API呼び出し: GET /customers/12345/points → 残高 1250pt

変換可能性チェック

残高(1250) >= 希望(500) → OK / 最小変換単位: 100pt → OK / 変換上限: 10000pt/日 → OK

ステップ3へ進む

全てのチェックを通過

ステップ3: Shopifyクーポン生成

割引タイプ
設定値固定金額
割引額
設定値-500円
使用回数
設定値1回のみ
顧客制限
設定値特定顧客のみ
有効期間
設定値1年間
最低購入額
設定値なし

Shopify Admin API呼び出し: エンドポイント priceRules + discountCodes

生成されるコード例: 70934-AB12CD-500

レスポンス: priceRuleId, discountCodeId, code

ステップ4: POSポイント減算

エンドポイント
POST /customers/12345/points/deduct
リクエスト amount
500
リクエスト reason
クーポン変換
リクエスト reference
COUPON-70934-AB12CD-500
レスポンス success
true
レスポンス previous_balance
1250
レスポンス deducted
500
レスポンス new_balance
750

重要: 変換を追跡できるよう参照情報(reference)を記録

ステップ5: メタフィールド保存

保存先: 顧客のShopifyメタフィールド(名前空間: loyalty、キー: coupons)

code
70934-AB12CD-500
amount
500
points_used
500
created_at
2024-01-15T10:30:00Z
expires_at
2025-01-15T23:59:59Z
status
active
shopify_price_rule_id
12345678

用途: マイページでの一覧表示、使用状況の追跡、取り消し時の参照

トランザクション設計

なぜ順序が重要か

理想の順序: 1. クーポン作成 → 2. ポイント減算 → 3. 記録保存

1番目
処理クーポン作成
理由取り消し可能。作成失敗ならポイントは減らさない
2番目
処理ポイント減算
理由クーポンができてから減算。減算失敗ならクーポンを削除
3番目
処理記録保存
理由全て成功してから記録。記録失敗しても実体は完了している

エラー時のロールバック

クーポン作成失敗
対応何もしない(まだ何も変更していない)
結果エラーメッセージを表示
ポイント減算失敗
対応作成したクーポンを削除
結果エラーメッセージを表示
メタフィールド保存失敗
対応ログに警告記録(ロールバックしない)
結果成功として扱い、管理者に通知

補足: メタフィールド保存は「nice to have」。実体(クーポンとポイント)が正しければ運用でカバー可能

API呼び出しの実装ポイント

リトライ戦略

Shopifyクーポン作成
リトライ3回まで
理由一時的なエラーの可能性
POSポイント減算
リトライリトライしない
理由二重減算を防ぐため
メタフィールド保存
リトライ3回まで
理由失敗しても実害が少ない

タイムアウト設定

Shopifyクーポン作成
タイムアウト10秒
理由Shopify APIは安定している
POSポイント減算
タイムアウト15秒
理由POSによっては遅い場合がある
メタフィールド保存
タイムアウト5秒
理由Shopify APIは安定している

パフォーマンスの考慮

処理時間の内訳

認証検証
所要時間約100ms
POS残高照会
所要時間約500ms
Shopifyクーポン作成
所要時間約800ms
POSポイント減算
所要時間約600ms
メタフィールド保存
所要時間約300ms
合計
所要時間約2.3秒

UX対応: 顧客には「処理中...」を表示し、ローディングアニメーションで体感を改善

この設計がもたらす効果

信頼性

  • 処理順序の最適化でエラー時の影響を最小化
  • ロールバック戦略で不整合を防止
  • 全ての処理をログに記録し追跡可能

保守性

  • 各ステップが独立しておりテストしやすい
  • エラー原因の特定が容易
  • 将来の機能追加(ポイント還元率変更など)に対応しやすい

関連記事