チェックアウトと支払いフロー — 中央会員管理とSSOハブ
1. ドキュメントの目的
このドキュメントは、会員登録からライセンスが有効になるまでの全体的なフローを説明し、無料アクティベーションプロセスと有料チェックアウトプロセスを含みます。
2. アクター
- 会員
- システム
- 支払いゲートウェイ (Midtrans / Xendit)
3. 新規会員登録フロー
- 会員は会員管理ハブの登録ページを開きます。
- 会員は次の情報を入力します。
- 完全な名前
- メールアドレス
- パスワード
- パスワードの確認
- システムは次の検証を行います。
- メールアドレスのフォーマット
- メールアドレスのユニーク性 (小文字、トリム)
- パスワードの強度
- システムはアカウントを作成し、ステータスを
unverifiedに設定します。 - システムは確認メールを送信します。
- 会員は確認メールを開き、確認リンクをクリックします。
- システムはアカウントのステータスを
activeに変更します。 - 会員はダッシュボードにリダイレクトされます。
4. プロダクトの選択とアクティベーション
4.1 プロダクトカタログの表示
- 会員はプロダクトカタログのページを開きます。
- システムは利用可能なSaaSプロダクトの一覧を表示します。
- 会員はプロダクトを選択します (例: NOTO)。
- システムは選択したプロダクトのパッケージの一覧を表示します。
4.2 無料パッケージのアクティベーション
- 会員は Free パッケージを選択します。
- システムは次の検証を行います。
- 会員アカウントが有効であること
- 同じプロダクトに対して既にライセンスが有効であること
- システムは新しいライセンスを作成し、次の設定をします。
- ステータス:
active_free - タイヤー:
free - expired_at:
null(期限なし)
- ステータス:
- システムはライセンスIDを生成し、次のフォーマットで生成します。
例:[PREFIX_PRODUK]-[XXXX]-[XXXX]-[XXXX]NTO-A1B2-C3D4-E5F6 - システムはライセンスIDをダッシュボードに表示します。
- システムは確認メールを送信し、ライセンスIDを含みます。
- 会員はすぐにプロダクトにアクセスできます。
4.3 有料パッケージのチェックアウト
- 会員は有料パッケージ (例: Pro Bulanan) を選択します。
- システムは注文の概要を表示します。
- プロダクト名
- パッケージ名
- 価格
- 期間
- 支払いゲートウェイの選択 (Midtrans / Xendit)
- 会員は支払いゲートウェイを選択します。
- システムは order を作成し、ステータスを
pending_paymentに設定します。 - システムは支払いゲートウェイにセッションを作成します。
- 会員は支払いゲートウェイのページにリダイレクトされます。
- 会員は支払いを完了します。
5. 支払いの後
5.1 支払い成功
- 支払いゲートウェイはシステムにWebhookを送信します。
- システムはWebhookを検証します (署名と金額)。
- システムは注文のステータスを
paidに変更します。 - システムはライセンスを作成または更新します。
- ステータス:
active - タイヤー: 購入したパッケージに基づいて
- started_at: 支払いの日時
- expired_at: started_at + パッケージの期間
- ステータス:
- システムはライセンスIDを生成します (必要に応じて)。
- システムは支払いの記録を保存します。
- システムは確認メールを送信し、次の情報を含みます。
- 支払いの確認
- ใบ請求書
- ライセンスID
- プロダクトへのアクセス用リンク
- ライセンスはダッシュボードに表示されます。
5.2 支払い失敗または期限切れ
- 支払いゲートウェイはシステムにWebhookを送信します (失敗またはタイムアウト)。
- システムは注文のステータスを
failedまたはexpiredに変更します。 - ライセンスは有効になりません。
- システムは会員に通知を送信します。
- 会員は再度チェックアウトできます。
6. ライセンスの更新
6.1 更新前期
- 会員はダッシュボードでライセンスの詳細を開きます。
- 会員は Perpanjang を選択します。
- チェックアウトのプロセスに従います (セクション 4.3)。
- 支払いが成功すると、expired_at が更新されます。
(または支払日の日付から始まる)expired_at_baru = expired_at_lama + durasi_paket
6.2 更新中のGrace Period
- ライセンスは
grace_period状態です。 - 会員はダッシュボードとメールで緊急通知を受け取ります。
- 会員はチェックアウトのプロセスに従います。
- 支払いが成功すると、ライセンスが再度有効になります。
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 つのライセンスが有効にならないようにします。