Diagram utama
Halaman publik (frontend)
| Route | Fungsi |
|---|---|
/order | Katalog batch & tier (OrderCatalog.tsx) |
/register/:batch/:tier | Form pendaftaran (Register.tsx) |
/payment/checkout | Tampilkan QR/VA/link bayar |
/payment/status | Cek status sesi |
/payment/success | Sukses + claim akun |
/payment/failed | Gagal / expired |
/payment/callback | Redirect dari provider |
Tahap backend
1. Katalog publik
GET /api/payment/public/batches — batch aktif + tier + harga (rate limited).
2. Register & buat sesi
POST /api/payment/register (rate limit 10 / 15 menit):
- Validasi batch & tier (slug)
- Cek duplikat email per batch
- Buat / pakai akun Better Auth (
provisionAuthAccount) ensurePendingEnrollmentForPayment— baris enrollment- Buat
payment_session+claimToken - Panggil Scalev → QRIS, VA BNI/BRI/…, OVO, GoPay, dll.
- Return
paymentUrl,sessionId, instruksi bayar
qris, va, invoice, ovo, dana, shopeepay, linkaja, gopay
3. Pembayaran Scalev
Dua jalur konfirmasi: Webhook: verifikasi secretSCALEV_WEBHOOK_SECRETKode:
payment.service.ts → handleScalevWebhook
4. Aktivasi enrollment
Saatpayment_session.status = paid:
enrollment.paymentStatus→paidenrollment.status→active- Workspace peserta bisa dipakai
getPaidAccess()mengembalikanaiFeatures,courseIds,benefits
5. Claim setelah bayar
claimPayment(sessionId, claimToken):
- Validasi claim token (one-time)
- Aktivasi enrollment jika belum
- Issue signInToken Better Auth → auto login di
/payment/success
Tier & Scalev mapping
Admin mengatur tier di batch:| Field tier | Fungsi |
|---|---|
price | Harga (min validasi Scalev) |
courseIds | Kursus yang dibuka |
aiFeatures | Gate AI hub |
scalevVariantUniqueId | Produk di Scalev |
scalevBundlePriceOptionUniqueId | Opsi harga bundle |
getBatchScalevHealth, resync tier — admin tier management.
Dev lokal tanpa Scalev:
Manual mark paid (admin)
Admin bisa tandai lunas di Daftar Peserta — enrollment paid meski sesi Scalev masih pending; checkout poll menyelaraskan session.Payment provider manual
JikaPAYMENT_PROVIDER=manual, URL bayar mengarah ke instruksi manual (MANUAL_PAYMENT_URL) — untuk dev/staging.
Duplicate registration
Email sudah terdaftar di batch yang sama:- Sudah paid → error duplicate
- Masih pending → resume sesi bayar lama jika masih valid
Setelah bayar — apa yang terbuka?
Layanan terkait
File penting
| File | Isi |
|---|---|
payment.service.ts | Register, webhook, claim, tier CRUD |
payment.routes.ts | HTTP + rate limit |
scalev.service.ts | Client Scalev API |
enrollment.service.ts | Paid access aggregation |
resolve-course-access.ts | Resolve courseIds tier |