SimpleDetail
📖 2 menit baca

チェックアウトと支払いフロー — 中央会員管理とSSOハブ

1. ドキュメントの目的

このドキュメントは、会員登録からライセンスが有効になるまでの全体的なフローを説明し、無料アクティベーションプロセスと有料チェックアウトプロセスを含みます。

2. アクター

  • 会員
  • システム
  • 支払いゲートウェイ (Midtrans / Xendit)

3. 新規会員登録フロー

  1. 会員は会員管理ハブの登録ページを開きます。
  2. 会員は次の情報を入力します。
    • 完全な名前
    • メールアドレス
    • パスワード
    • パスワードの確認
  3. システムは次の検証を行います。
    • メールアドレスのフォーマット
    • メールアドレスのユニーク性 (小文字、トリム)
    • パスワードの強度
  4. システムはアカウントを作成し、ステータスを unverified に設定します。
  5. システムは確認メールを送信します。
  6. 会員は確認メールを開き、確認リンクをクリックします。
  7. システムはアカウントのステータスを active に変更します。
  8. 会員はダッシュボードにリダイレクトされます。

4. プロダクトの選択とアクティベーション

4.1 プロダクトカタログの表示

  1. 会員はプロダクトカタログのページを開きます。
  2. システムは利用可能なSaaSプロダクトの一覧を表示します。
  3. 会員はプロダクトを選択します (例: NOTO)。
  4. システムは選択したプロダクトのパッケージの一覧を表示します。

4.2 無料パッケージのアクティベーション

  1. 会員は Free パッケージを選択します。
  2. システムは次の検証を行います。
    • 会員アカウントが有効であること
    • 同じプロダクトに対して既にライセンスが有効であること
  3. システムは新しいライセンスを作成し、次の設定をします。
    • ステータス: active_free
    • タイヤー: free
    • expired_at: null (期限なし)
  4. システムはライセンスIDを生成し、次のフォーマットで生成します。
    [PREFIX_PRODUK]-[XXXX]-[XXXX]-[XXXX]
    
    例: NTO-A1B2-C3D4-E5F6
  5. システムはライセンスIDをダッシュボードに表示します。
  6. システムは確認メールを送信し、ライセンスIDを含みます。
  7. 会員はすぐにプロダクトにアクセスできます。

4.3 有料パッケージのチェックアウト

  1. 会員は有料パッケージ (例: Pro Bulanan) を選択します。
  2. システムは注文の概要を表示します。
    • プロダクト名
    • パッケージ名
    • 価格
    • 期間
    • 支払いゲートウェイの選択 (Midtrans / Xendit)
  3. 会員は支払いゲートウェイを選択します。
  4. システムは order を作成し、ステータスを pending_payment に設定します。
  5. システムは支払いゲートウェイにセッションを作成します。
  6. 会員は支払いゲートウェイのページにリダイレクトされます。
  7. 会員は支払いを完了します。

5. 支払いの後

5.1 支払い成功

  1. 支払いゲートウェイはシステムにWebhookを送信します。
  2. システムはWebhookを検証します (署名と金額)。
  3. システムは注文のステータスを paid に変更します。
  4. システムはライセンスを作成または更新します。
    • ステータス: active
    • タイヤー: 購入したパッケージに基づいて
    • started_at: 支払いの日時
    • expired_at: started_at + パッケージの期間
  5. システムはライセンスIDを生成します (必要に応じて)。
  6. システムは支払いの記録を保存します。
  7. システムは確認メールを送信し、次の情報を含みます。
    • 支払いの確認
    • ใบ請求書
    • ライセンスID
    • プロダクトへのアクセス用リンク
  8. ライセンスはダッシュボードに表示されます。

5.2 支払い失敗または期限切れ

  1. 支払いゲートウェイはシステムにWebhookを送信します (失敗またはタイムアウト)。
  2. システムは注文のステータスを failed または expired に変更します。
  3. ライセンスは有効になりません。
  4. システムは会員に通知を送信します。
  5. 会員は再度チェックアウトできます。

6. ライセンスの更新

6.1 更新前期

  1. 会員はダッシュボードでライセンスの詳細を開きます。
  2. 会員は Perpanjang を選択します。
  3. チェックアウトのプロセスに従います (セクション 4.3)。
  4. 支払いが成功すると、expired_at が更新されます。
    expired_at_baru = expired_at_lama + durasi_paket
    
    (または支払日の日付から始まる)

6.2 更新中のGrace Period

  1. ライセンスは grace_period 状態です。
  2. 会員はダッシュボードとメールで緊急通知を受け取ります。
  3. 会員はチェックアウトのプロセスに従います。
  4. 支払いが成功すると、ライセンスが再度有効になります。

7. Grace PeriodとSuspend

ライセンス有効
    │
    ▼ (expired_at が達成)
Grace Period が始まる
    │── メール通知 H+0
    │── メール通知 H+3
    │── メール通知 H+6
    │
    ▼ (Grace Period が終了、更新なし)
ライセンスがSuspendされる
    │── Suspend通知メール
    │── プロダクトへのアクセスがブロックされる
    │── データは安全
    │
    ▼ (会員が支払いをした場合)
ライセンスが再度有効になる

Grace Period の長さはシステムの設定 (デフォルト: 7 日) で決定されます。


8. ライセンスの複製

  • 会員は 1 つのプロダクトに対して 1 つのライセンス を有効にすることができます。
  • 会員がすでにライセンスを有効にしている場合、購入は既存のライセンスを更新します。
  • 会員は同じプロダクトに対して 2 つのライセンスを有効にすることはできません。

9. 支払いのIdempotency

  • 各注文には一意の order_id が割り当てられます。
  • 支払いゲートウェイから送信されるWebhookは、同じWebhookを複数回送信しないようにします。
  • システムは注文のステータスを確認する前にWebhookを処理します。

10. Acceptance Criteria

  • 会員は無料パッケージを有効にすることができます。
  • ライセンスIDが生成され、有効にした後表示されます。
  • 確認メールが送信されます。
  • 支払いが成功するとライセンスが自動的に有効になります。
  • 支払いゲートウェイから送信されたWebhookが失敗するとライセンスが有効になりません。
  • Grace Period が正常に動作します。
  • ライセンスが期限切れ後にSuspendされます。
  • 更新が正しく行われます。
  • 同じプロダクトに対して 2 つのライセンスが有効にならないようにします。