Exception Flow — Central Membership & SSO Hub
1. Tujuan Dokumen
Dokumen ini menjelaskan semua kondisi pengecualian (exception) yang dapat terjadi dalam sistem, cara sistem merespons, dan tindakan yang harus diambil oleh pengguna atau sistem.
2. Kategori Exception
- Registrasi & Verifikasi Akun
- Login & Autentikasi
- Aktivasi Lisensi
- Checkout & Pembayaran
- Webhook Payment Gateway
- SSO & Token
- Grace Period & Suspend
- Sistem & Infrastruktur
3. Exception: Registrasi & Verifikasi Akun
EX-REG-01: Email Sudah Terdaftar
| Atribut | Detail |
|---|---|
| Kondisi | Member mencoba mendaftar dengan email yang sudah ada di sistem |
| Sistem | Menolak registrasi |
| Respons HTTP | 422 Unprocessable Entity |
| Pesan ke User | "Email ini sudah terdaftar. Silakan login atau gunakan email lain." |
| Tindakan User | Login menggunakan email yang sama, atau gunakan fitur lupa kata sandi |
| Catatan | Pesan tidak boleh mengkonfirmasi apakah email terdaftar untuk alasan privasi; namun untuk UX membership, boleh informatif |
EX-REG-02: Format Email Tidak Valid
| Atribut | Detail |
|---|---|
| Kondisi | Email yang dimasukkan tidak sesuai format |
| Sistem | Menolak di level validasi (frontend dan backend) |
| Respons HTTP | 422 Unprocessable Entity |
| Pesan ke User | "Format email tidak valid." |
| Tindakan User | Perbaiki format email |
EX-REG-03: Kata Sandi Tidak Memenuhi Syarat
| Atribut | Detail |
|---|---|
| Kondisi | Kata sandi terlalu pendek, tidak mengandung angka/huruf kapital, dsb |
| Sistem | Menolak di level validasi |
| Respons HTTP | 422 Unprocessable Entity |
| Pesan ke User | "Kata sandi minimal 8 karakter dan harus mengandung huruf dan angka." |
| Tindakan User | Buat kata sandi yang memenuhi syarat |
EX-REG-04: Tautan Verifikasi Email Kedaluwarsa
| Atribut | Detail |
|---|---|
| Kondisi | Member mengklik tautan verifikasi setelah melewati batas waktu (misal: 24 jam) |
| Sistem | Menolak verifikasi, tautan tidak valid lagi |
| Respons HTTP | 410 Gone |
| Pesan ke User | "Tautan verifikasi sudah kedaluwarsa. Klik tombol di bawah untuk kirim ulang." |
| Tindakan User | Minta kirim ulang email verifikasi |
| Tindakan Sistem | Kirim email verifikasi baru dengan tautan baru |
EX-REG-05: Tautan Verifikasi Sudah Digunakan
| Atribut | Detail |
|---|---|
| Kondisi | Member mengklik tautan verifikasi yang sudah pernah digunakan |
| Sistem | Cek apakah akun sudah aktif |
| Pesan ke User | "Akun Anda sudah terverifikasi. Silakan login." |
| Tindakan User | Login |
4. Exception: Login & Autentikasi
EX-LOGIN-01: Kredensial Salah
| Atribut | Detail |
|---|---|
| Kondisi | Email atau kata sandi yang dimasukkan salah |
| Sistem | Menolak login |
| Respons HTTP | 401 Unauthorized |
| Pesan ke User | "Email atau kata sandi salah." |
| Tindakan User | Coba lagi atau gunakan fitur lupa kata sandi |
| Catatan | Tidak boleh membedakan apakah email tidak ada atau password salah (security) |
EX-LOGIN-02: Akun Belum Diverifikasi
| Atribut | Detail |
|---|---|
| Kondisi | Member login dengan akun yang belum verifikasi email |
| Sistem | Menolak login, tawarkan kirim ulang email |
| Respons HTTP | 403 Forbidden |
| Pesan ke User | "Akun belum diverifikasi. Cek email Anda atau klik tombol untuk kirim ulang." |
| Tindakan User | Cek email dan klik tautan verifikasi |
EX-LOGIN-03: Akun Ditangguhkan
| Atribut | Detail |
|---|---|
| Kondisi | Akun member dinonaktifkan oleh Super Admin |
| Sistem | Menolak login |
| Respons HTTP | 403 Forbidden |
| Pesan ke User | "Akun Anda ditangguhkan. Hubungi dukungan untuk informasi lebih lanjut." |
| Tindakan User | Hubungi support |
EX-LOGIN-04: Terlalu Banyak Percobaan Login Gagal
| Atribut | Detail |
|---|---|
| Kondisi | Member melakukan lebih dari batas percobaan login gagal (misal: 5x dalam 10 menit) |
| Sistem | Mengunci sementara endpoint login untuk IP / akun tersebut |
| Respons HTTP | 429 Too Many Requests |
| Pesan ke User | "Terlalu banyak percobaan gagal. Coba lagi dalam 10 menit." |
| Tindakan User | Tunggu dan coba lagi |
5. Exception: Aktivasi Lisensi
EX-LIC-01: Akun Belum Terverifikasi Saat Aktivasi
| Atribut | Detail |
|---|---|
| Kondisi | Member mencoba mengaktifkan paket namun akun belum diverifikasi |
| Sistem | Menolak aktivasi |
| Respons HTTP | 403 Forbidden |
| Pesan ke User | "Verifikasi email Anda terlebih dahulu sebelum mengaktifkan produk." |
| Tindakan User | Verifikasi email |
EX-LIC-02: Sudah Memiliki Lisensi Aktif untuk Produk yang Sama
| Atribut | Detail |
|---|---|
| Kondisi | Member mencoba mengaktifkan paket gratis, tapi sudah punya lisensi aktif untuk produk tersebut |
| Sistem | Menolak duplikasi, arahkan ke detail lisensi yang sudah ada |
| Respons HTTP | 409 Conflict |
| Pesan ke User | "Anda sudah memiliki lisensi aktif untuk produk ini." |
| Tindakan User | Lihat lisensi aktif di dashboard atau pilih untuk upgrade |
EX-LIC-03: Produk Tidak Tersedia
| Atribut | Detail |
|---|---|
| Kondisi | Member mencoba mengaktifkan produk yang sudah dihapus/dinonaktifkan |
| Sistem | Menolak aktivasi |
| Respons HTTP | 404 Not Found |
| Pesan ke User | "Produk tidak tersedia saat ini." |
| Tindakan User | Pilih produk lain |
6. Exception: Checkout & Pembayaran
EX-PAY-01: Order Kedaluwarsa Sebelum Pembayaran
| Atribut | Detail |
|---|---|
| Kondisi | Member tidak menyelesaikan pembayaran dalam batas waktu order |
| Sistem | Order ditandai expired, lisensi tidak diaktifkan |
| Pesan ke User | "Sesi pembayaran Anda telah kedaluwarsa. Silakan mulai ulang proses pembelian." |
| Tindakan User | Kembali ke katalog dan buat order baru |
EX-PAY-02: Pembayaran Ditolak oleh Payment Gateway
| Atribut | Detail |
|---|---|
| Kondisi | Pembayaran ditolak (saldo tidak cukup, kartu ditolak, dsb) |
| Sistem | Order ditandai failed, lisensi tidak diaktifkan |
| Pesan ke User | "Pembayaran tidak berhasil. Coba metode lain atau hubungi bank Anda." |
| Tindakan User | Coba ulang dengan metode pembayaran berbeda |
EX-PAY-03: Jumlah Pembayaran Tidak Sesuai
| Atribut | Detail |
|---|---|
| Kondisi | Webhook diterima tetapi jumlah yang dibayar tidak sesuai dengan harga order |
| Sistem | Tolak aktivasi, catat di audit log, notifikasi Super Admin |
| Tindakan Sistem | Tidak mengaktifkan lisensi, simpan bukti ke log |
| Tindakan Super Admin | Verifikasi manual dan ambil tindakan sesuai kebijakan |
EX-PAY-04: Double Checkout (Order Duplikat)
| Atribut | Detail |
|---|---|
| Kondisi | Member membuat order lebih dari satu kali untuk produk yang sama dalam waktu berdekatan |
| Sistem | Hanya memproses satu order; order duplikat ditandai sebagai duplicate |
| Pesan ke User | "Anda sudah memiliki order aktif untuk produk ini. Selesaikan pembayaran yang sedang berjalan." |
| Tindakan User | Selesaikan order yang sudah ada |
7. Exception: Webhook Payment Gateway
EX-WH-01: Webhook Tidak Dapat Diverifikasi
| Atribut | Detail |
|---|---|
| Kondisi | Signature webhook tidak cocok atau tidak valid |
| Sistem | Abaikan webhook, catat di error log |
| Respons HTTP ke Gateway | 400 Bad Request |
| Lisensi | Tidak diaktifkan |
| Tindakan | Super Admin memeriksa log dan melakukan verifikasi manual jika perlu |
EX-WH-02: Webhook Diterima Lebih dari Satu Kali (Retry)
| Atribut | Detail |
|---|---|
| Kondisi | Payment gateway mengirim ulang webhook yang sama karena tidak mendapat respons sukses |
| Sistem | Cek order_id sudah pernah diproses → abaikan (idempotency) |
| Respons HTTP ke Gateway | 200 OK (supaya gateway berhenti retry) |
| Lisensi | Tidak diaktifkan dua kali |
EX-WH-03: Webhook Diterima tapi Server Sedang Down
| Atribut | Detail |
|---|---|
| Kondisi | Server Hub tidak tersedia saat payment gateway mengirim webhook |
| Sistem | Payment gateway akan retry otomatis beberapa kali |
| Tindakan | Pastikan endpoint webhook dapat merespons dalam waktu singkat setelah server pulih |
| Fallback | Super Admin melakukan aktivasi manual berdasarkan log pembayaran di dashboard payment gateway |
8. Exception: SSO & Token
EX-SSO-01: Tidak Memiliki Lisensi untuk Produk yang Diminta
| Atribut | Detail |
|---|---|
| Kondisi | Member mencoba login ke aplikasi SaaS tetapi tidak punya lisensi aktif untuk produk tersebut |
| Sistem | Menolak penerbitan token, redirect ke halaman pilih paket |
| Respons | 403 no_license |
| Pesan ke User | "Anda belum berlangganan produk ini. Pilih paket untuk mulai menggunakannya." |
EX-SSO-02: Lisensi Suspended
| Atribut | Detail |
|---|---|
| Kondisi | Member mencoba login ke aplikasi dengan lisensi yang sudah suspend |
| Sistem | Menolak penerbitan token, redirect ke halaman perpanjangan |
| Respons | 403 license_suspended |
| Pesan ke User | "Akses Anda ke produk ini telah diblokir. Perpanjang langganan untuk melanjutkan." |
EX-SSO-03: Access Token Kedaluwarsa
| Atribut | Detail |
|---|---|
| Kondisi | Aplikasi SaaS menerima request dengan Access Token yang sudah expired |
| Sistem | Menolak request |
| Respons HTTP | 401 Unauthorized |
| Tindakan Aplikasi | Gunakan Refresh Token untuk mendapatkan Access Token baru |
EX-SSO-04: Refresh Token Tidak Valid atau Kedaluwarsa
| Atribut | Detail |
|---|---|
| Kondisi | Refresh Token sudah expired atau dicabut |
| Sistem | Menolak penerbitan Access Token baru |
| Respons | 401 invalid_refresh_token |
| Tindakan Aplikasi | Redirect member ke halaman login Hub |
EX-SSO-05: State Parameter Tidak Cocok (CSRF)
| Atribut | Detail |
|---|---|
| Kondisi | Nilai state yang dikembalikan oleh Hub tidak cocok dengan yang disimpan aplikasi |
| Sistem | Aplikasi SaaS menolak proses SSO |
| Tindakan Aplikasi | Tampilkan pesan error, minta member mulai ulang proses login |
| Catatan | Ini adalah perlindungan terhadap serangan CSRF |
EX-SSO-06: Signature JWT Tidak Valid
| Atribut | Detail |
|---|---|
| Kondisi | Aplikasi SaaS menerima JWT yang signature-nya tidak dapat diverifikasi menggunakan public key Hub |
| Sistem | Aplikasi menolak JWT |
| Tindakan Aplikasi | Tolak akses, redirect ke login |
| Catatan | Kemungkinan terjadi jika token dipalsukan atau public key belum diperbarui |
9. Exception: Grace Period & Suspend
EX-GP-01: Notifikasi Grace Period Gagal Terkirim
| Atribut | Detail |
|---|---|
| Kondisi | Email reminder Grace Period gagal terkirim karena error layanan email |
| Sistem | Catat kegagalan di log, coba kirim ulang sesuai retry policy |
| Tindakan | Notifikasi in-app tetap ditampilkan di dashboard |
| Catatan | Kegagalan email tidak menghentikan proses Grace Period |
EX-GP-02: Member Membayar Setelah Suspend
| Atribut | Detail |
|---|---|
| Kondisi | Lisensi sudah berstatus suspended dan member baru membayar |
| Sistem | Aktifkan kembali lisensi setelah konfirmasi pembayaran |
expired_at Baru |
Dihitung dari tanggal pembayaran + durasi paket |
| Pesan ke User | "Akses Anda telah dipulihkan. Terima kasih telah memperpanjang." |
10. Exception: Sistem & Infrastruktur
EX-SYS-01: Database Tidak Tersedia
| Atribut | Detail |
|---|---|
| Kondisi | Database tidak dapat dijangkau oleh server |
| Sistem | Kembalikan error generik ke pengguna |
| Respons HTTP | 503 Service Unavailable |
| Pesan ke User | "Layanan sedang tidak tersedia. Coba lagi beberapa saat." |
| Tindakan | Tim teknis diberitahu melalui monitoring alert |
EX-SYS-02: Layanan Email Tidak Tersedia
| Atribut | Detail |
|---|---|
| Kondisi | Layanan pengiriman email tidak dapat dihubungi |
| Sistem | Operasi utama tetap berjalan, email masuk ke antrian retry |
| Tindakan | Sistem mencoba kirim ulang email setelah layanan pulih |
| Catatan | Kegagalan email tidak boleh memblokir proses aktivasi lisensi atau login |
EX-SYS-03: Payment Gateway Tidak Tersedia
| Atribut | Detail |
|---|---|
| Kondisi | Endpoint payment gateway tidak dapat dijangkau saat membuat sesi pembayaran |
| Sistem | Tampilkan pesan error kepada member |
| Respons HTTP | 503 Service Unavailable |
| Pesan ke User | "Layanan pembayaran sedang tidak tersedia. Coba beberapa saat lagi atau pilih metode lain." |
| Tindakan User | Coba lagi atau pilih payment gateway yang berbeda |
11. Ringkasan Kode Error
| Kode Exception | Area | Kondisi Singkat |
|---|---|---|
| EX-REG-01 | Registrasi | Email sudah terdaftar |
| EX-REG-02 | Registrasi | Format email tidak valid |
| EX-REG-03 | Registrasi | Kata sandi tidak memenuhi syarat |
| EX-REG-04 | Registrasi | Tautan verifikasi expired |
| EX-REG-05 | Registrasi | Tautan verifikasi sudah digunakan |
| EX-LOGIN-01 | Login | Kredensial salah |
| EX-LOGIN-02 | Login | Akun belum diverifikasi |
| EX-LOGIN-03 | Login | Akun ditangguhkan |
| EX-LOGIN-04 | Login | Rate limit login |
| EX-LIC-01 | Lisensi | Akun belum terverifikasi |
| EX-LIC-02 | Lisensi | Lisensi aktif sudah ada |
| EX-LIC-03 | Lisensi | Produk tidak tersedia |
| EX-PAY-01 | Pembayaran | Order expired |
| EX-PAY-02 | Pembayaran | Pembayaran ditolak |
| EX-PAY-03 | Pembayaran | Jumlah tidak sesuai |
| EX-PAY-04 | Pembayaran | Order duplikat |
| EX-WH-01 | Webhook | Verifikasi signature gagal |
| EX-WH-02 | Webhook | Webhook duplikat (retry) |
| EX-WH-03 | Webhook | Server down saat webhook datang |
| EX-SSO-01 | SSO | Tidak punya lisensi produk |
| EX-SSO-02 | SSO | Lisensi suspended |
| EX-SSO-03 | SSO | Access token expired |
| EX-SSO-04 | SSO | Refresh token tidak valid |
| EX-SSO-05 | SSO | State parameter tidak cocok |
| EX-SSO-06 | SSO | Signature JWT tidak valid |
| EX-GP-01 | Grace Period | Email notifikasi gagal |
| EX-GP-02 | Grace Period | Bayar setelah suspend |
| EX-SYS-01 | Sistem | Database tidak tersedia |
| EX-SYS-02 | Sistem | Layanan email tidak tersedia |
| EX-SYS-03 | Sistem | Payment gateway tidak tersedia |
12. Prinsip Penanganan Exception
- Setiap exception harus memiliki pesan yang informatif kepada user, bukan pesan teknis mentah.
- Kode error internal dicatat di log, bukan ditampilkan ke user.
- Kegagalan email atau notifikasi tidak boleh menghentikan proses utama (lisensi, login).
- Proses pembayaran harus atomic: lisensi tidak aktif sebagian.
- Semua exception dicatat di audit log dengan konteks yang cukup untuk debugging.
- Endpoint penting harus mengembalikan respons HTTP yang tepat sesuai kondisi.
- Sistem harus fail gracefully: error infra tidak menampilkan stack trace ke pengguna.