Checkout and Payment Flow — Central Membership & SSO Hub
1. Tujuan Dokumen
Dokumen ini menjelaskan alur lengkap dari registrasi member hingga lisensi aktif, mencakup proses aktivasi gratis dan proses checkout berbayar.
2. Aktor
- Member
- System
- Payment Gateway (Midtrans / Xendit)
3. Alur Registrasi Member Baru
- Member membuka halaman registrasi Membership Hub.
- Member mengisi:
- nama lengkap,
- email,
- kata sandi,
- konfirmasi kata sandi.
- System memvalidasi:
- format email,
- keunikan email (lowercase, ditrim),
- kekuatan kata sandi.
- System membuat akun dengan status
unverified. - System mengirim email verifikasi.
- Member membuka email dan mengklik tautan verifikasi.
- System mengubah status akun menjadi
active. - Member diarahkan ke dashboard.
4. Alur Memilih dan Mengaktifkan Produk
4.1 Melihat Katalog Produk
- Member membuka halaman katalog produk.
- System menampilkan daftar produk SaaS yang tersedia.
- Member memilih produk (misalnya: NOTO).
- System menampilkan daftar paket produk tersebut.
4.2 Aktivasi Paket Gratis
- Member memilih paket Free.
- System memvalidasi:
- akun member aktif,
- belum memiliki lisensi aktif untuk produk yang sama.
- System membuat lisensi baru dengan:
- status:
active_free, - tier:
free, - expired_at:
null(tidak berakhir).
- status:
- System menghasilkan License-ID dengan format:
Contoh:[PREFIX_PRODUK]-[XXXX]-[XXXX]-[XXXX]NTO-A1B2-C3D4-E5F6 - System menampilkan License-ID di dashboard.
- System mengirim email konfirmasi berisi License-ID.
- Member dapat langsung mengakses produk melalui SSO.
4.3 Checkout Paket Berbayar
- Member memilih paket berbayar (misal: Pro Bulanan).
- System menampilkan ringkasan order:
- nama produk,
- nama paket,
- harga,
- durasi,
- dan pilihan payment gateway (Midtrans / Xendit).
- Member memilih payment gateway.
- System membuat order dengan status
pending_payment. - System menghubungi payment gateway untuk membuat sesi pembayaran.
- Member diarahkan ke halaman pembayaran payment gateway.
- Member menyelesaikan pembayaran.
5. Alur Setelah Pembayaran
5.1 Pembayaran Berhasil
- Payment gateway mengirim webhook ke System.
- System memverifikasi webhook (signature dan amount).
- System mengubah status order menjadi
paid. - System membuat atau memperbarui lisensi:
- status:
active, - tier: sesuai paket yang dibeli,
- started_at: waktu pembayaran,
- expired_at: started_at + durasi paket.
- status:
- System menghasilkan License-ID jika belum ada.
- System mencatat transaksi pembayaran.
- System mengirim email berisi:
- konfirmasi pembayaran,
- invoice,
- License-ID,
- dan tautan untuk masuk ke produk.
- Lisensi tampil di dashboard member.
5.2 Pembayaran Gagal atau Kedaluwarsa
- Payment gateway mengirim webhook kegagalan atau tidak ada respons dalam batas waktu.
- System mengubah status order menjadi
failedatauexpired. - Lisensi tidak diaktifkan.
- System mengirim notifikasi kepada member.
- Member dapat mencoba checkout ulang.
6. Alur Perpanjangan Langganan
6.1 Perpanjangan Sebelum Expired
- Member membuka detail lisensi di dashboard.
- Member memilih Perpanjang.
- Alur mengikuti proses Checkout Paket Berbayar (Bagian 4.3).
- Setelah pembayaran berhasil,
expired_atdiperbarui:
(atau dari tanggal bayar jika sudah melewati batas).expired_at_baru = expired_at_lama + durasi_paket
6.2 Perpanjangan Selama Grace Period
- Lisensi berstatus
grace_period. - Member mendapatkan notifikasi mendesak di dashboard dan email.
- Member dapat memperpanjang mengikuti alur checkout.
- Setelah pembayaran berhasil, lisensi diaktifkan kembali.
7. Alur Grace Period dan Suspend
Lisensi aktif
│
▼ (expired_at tercapai)
Grace Period dimulai
│── Notifikasi email H+0
│── Notifikasi email H+3
│── Notifikasi email H+6
│
▼ (Grace Period habis, tidak ada perpanjangan)
Lisensi ditangguhkan (Suspended)
│── Email notifikasi suspend
│── Akses ke produk diblokir
│── Data tetap aman
│
▼ (jika member membayar setelah suspend)
Lisensi diaktifkan kembali
Panjang Grace Period ditentukan oleh konfigurasi sistem (default: 7 hari).
8. Aturan Duplikasi Lisensi
- Satu member hanya boleh memiliki satu lisensi aktif per produk pada satu waktu.
- Jika member sudah memiliki lisensi aktif untuk suatu produk, pembelian baru akan memperpanjang lisensi yang ada.
- Member tidak dapat memiliki dua lisensi aktif dengan produk yang sama secara bersamaan.
9. Idempotency Pembayaran
- Setiap order memiliki
order_idunik. - Webhook dari payment gateway yang sama tidak boleh memicu aktivasi lisensi lebih dari satu kali.
- System memeriksa status order sebelum memproses webhook.
10. Acceptance Criteria
- Member dapat mengaktifkan paket gratis tanpa pembayaran.
- License-ID digenerate dan ditampilkan setelah aktivasi.
- Email konfirmasi terkirim setelah aktivasi.
- Pembayaran berhasil mengaktifkan lisensi secara otomatis.
- Webhook payment gateway gagal tidak mengaktifkan lisensi.
- Grace Period berjalan sesuai konfigurasi.
- Lisensi ditangguhkan setelah Grace Period berakhir.
- Perpanjangan memperbarui masa aktif dengan benar.
- Tidak ada duplikasi lisensi aktif untuk produk yang sama.