Skip to main content
Peserta membeli tier di dalam batch training. Pembayaran lewat Scalev; setelah lunas, enrollment aktif dan fitur tier terbuka.

Diagram utama

Halaman publik (frontend)

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):
  1. Validasi batch & tier (slug)
  2. Cek duplikat email per batch
  3. Buat / pakai akun Better Auth (provisionAuthAccount)
  4. ensurePendingEnrollmentForPayment — baris enrollment
  5. Buat payment_session + claimToken
  6. Panggil Scalev → QRIS, VA BNI/BRI/…, OVO, GoPay, dll.
  7. Return paymentUrl, sessionId, instruksi bayar
Metode bayar (schema): qris, va, invoice, ovo, dana, shopeepay, linkaja, gopay

3. Pembayaran Scalev

Dua jalur konfirmasi: Webhook: verifikasi secret SCALEV_WEBHOOK_SECRET
Kode: payment.service.tshandleScalevWebhook

4. Aktivasi enrollment

Saat payment_session.status = paid:
  • enrollment.paymentStatuspaid
  • enrollment.statusactive
  • Workspace peserta bisa dipakai
  • getPaidAccess() mengembalikan aiFeatures, courseIds, benefits
Idempotent — webhook retry tidak double-activate.

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: Health check Scalev: 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

Jika PAYMENT_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