📄 Dokumentasi Teknis

Alur Sistem Pembayaran

Dokumen Integrasi Midtrans Payment Gateway

1 Tentang KitaNikah

1.1 Deskripsi Bisnis

KitaNikah (kitanikah.net) adalah platform penyedia layanan undangan pernikahan digital berbasis web. Platform ini memungkinkan pasangan untuk membuat, mengelola, dan membagikan undangan pernikahan digital kepada tamu undangan.

1.2 Jenis Layanan

  • Produk Digital: Undangan pernikahan digital (tidak ada produk fisik)
  • Model Bisnis: Subscription / One-time Purchase per Event
  • Target Pasar: Pasangan yang akan menikah di Indonesia

📍 Informasi Perusahaan

  • Nama Website: KitaNikah
  • Domain: kitanikah.net
  • Alamat: Yogyakarta, Indonesia
  • Email: kitanikah0101@gmail.com
  • Telepon: +62 877 1365 0638

2 Pilihan Paket & Harga

Paket Harga Fitur Utama
Basic Gratis Maks 50 tamu, 1 tema, tanpa WhatsApp blast
Silver Rp 99.000 Maks 150 tamu, 3 tema, WhatsApp blast
Premium Rp 199.000 Maks 300 tamu, semua tema, WhatsApp blast, amplop digital
Exclusive Rp 399.000 Unlimited tamu, semua tema, semua fitur, custom domain
Titanium Rp 599.000 Semua fitur Exclusive + prioritas support + konsultasi desain

📝 Catatan: Harga sudah termasuk PPN. Berlaku untuk 1 event pernikahan. Tidak ada biaya berlangganan bulanan.

3 Alur Pengguna (User Journey)

3.1 Alur Registrasi & Pembuatan Undangan

1
👤
Registrasi Akun
✉️ Email + Password 🔗 Google OAuth
2
🔐
Login ke Dashboard
Akses panel pengguna di /user
3
💒
Buat Undangan Baru
Wizard pembuatan undangan dengan 3 langkah
Step 1
Data Mempelai
  • Nama mempelai wanita
  • Nama mempelai pria
  • Data orang tua
  • Upload foto mempelai
Step 2
Acara & Lokasi
  • Tanggal & waktu acara
  • Nama & alamat lokasi
  • Link Google Maps
Step 3
Desain & Pengaturan
  • ⭐ Pilih Paket
  • Pilih tema undangan
  • Set URL slug
  • Pengaturan aktivasi
4
💾
Simpan Undangan
Undangan disimpan sebagai draft
5
💳
Proses Pembayaran
Jika memilih paket berbayar
QRIS Virtual Account E-Wallet
6
Aktivasi Undangan
Undangan aktif dan dapat diakses publik
7
📤
Kelola & Bagikan
👥 Tambah data tamu
📱 Kirim via WhatsApp
📊 Pantau RSVP
💌 Lihat ucapan
┌─────────────────────────────────────────────────────────────────┐
│                        ALUR PENGGUNA                            │
└─────────────────────────────────────────────────────────────────┘

[1] REGISTRASI AKUN
    │
    ├── Via Email + Password
    │   └── Verifikasi email (opsional)
    │
    └── Via Google OAuth
        └── Login langsung tanpa verifikasi
    │
    ▼
[2] LOGIN KE DASHBOARD
    │   └── Akses panel pengguna di /user
    │
    ▼
[3] BUAT UNDANGAN BARU
    │
    ├── Step 1: Input Data Mempelai
    │   ├── Nama mempelai wanita + orang tua
    │   ├── Nama mempelai pria + orang tua
    │   └── Upload foto mempelai
    │
    ├── Step 2: Input Acara & Lokasi
    │   ├── Tanggal & waktu acara
    │   ├── Nama lokasi & alamat
    │   └── Link Google Maps
    │
    └── Step 3: Desain & Pengaturan
        ├── ⭐ PILIH PAKET (Basic/Silver/Premium/Exclusive/Titanium)
        ├── Pilih tema undangan
        ├── Set judul & URL slug
        └── Pengaturan aktivasi
    │
    ▼
[4] SIMPAN UNDANGAN (Draft)
    │   └── Undangan tersimpan sebagai draft
    │
    ▼
[5] PROSES PEMBAYARAN (Jika paket berbayar)
    │   ├── QRIS
    │   ├── Virtual Account
    │   └── E-Wallet (GoPay, ShopeePay, dll)
    │
    ▼
[6] AKTIVASI UNDANGAN
    │   └── Undangan dapat diakses publik
    │
    ▼
[7] KELOLA TAMU & BAGIKAN UNDANGAN
    ├── 👥 Tambah data tamu
    ├── 📱 Kirim undangan via WhatsApp
    ├── 📊 Pantau RSVP & kehadiran
    └── 💌 Lihat ucapan & doa

4 Alur Pembayaran (Payment Flow)

4.1 Flow Diagram Pembayaran

👤 Pengguna
🖥️ KitaNikah
💳 Midtrans
1 Pilih paket berbayar
2 Buat Order
order_id, amount
3 Return Snap Token
4 Lihat Payment Popup
5 Pilih Metode Bayar
QRIS VA E-Wallet
- - →
- - →
6 💰 Lakukan Pembayaran
Transfer / Scan QR
══→
══→
7 Webhook Notification
transaction_status
8 ✅ Update Status
is_paid = true
9 🎉 Halaman Sukses
10 🌟 Akses Fitur Premium
┌─────────────────────────────────────────────────────────────────┐
│                     ALUR PEMBAYARAN                             │
└─────────────────────────────────────────────────────────────────┘

[PENGGUNA]                    [KITANIKAH]                  [MIDTRANS]
    │                              │                            │
    │  1. Pilih paket berbayar     │                            │
    ├─────────────────────────────>│                            │
    │                              │                            │
    │                              │  2. Buat Order/Transaksi   │
    │                              │  (order_id, amount, items) │
    │                              ├───────────────────────────>│
    │                              │                            │
    │                              │  3. Return Snap Token      │
    │                              │<───────────────────────────│
    │                              │                            │
    │  4. Tampilkan payment popup  │                            │
    │<─────────────────────────────│                            │
    │                              │                            │
    │  5. Pilih metode pembayaran  │                            │
    │  (VA, E-Wallet, QRIS, dll)   │                            │
    ├──────────────────────────────────────────────────────────>│
    │                              │                            │
    │  6. Lakukan pembayaran       │                            │
    │  (Transfer/Scan QR/dll)      │                            │
    ├──────────────────────────────────────────────────────────>│
    │                              │                            │
    │                              │  7. Webhook Notification   │
    │                              │  (transaction_status)      │
    │                              │<───────────────────────────│
    │                              │                            │
    │                              │  8. Update status order    │
    │                              │  - Set is_paid = true      │
    │                              │  - Aktivasi undangan       │
    │                              │                            │
    │  9. Redirect ke sukses page  │                            │
    │<─────────────────────────────│                            │
    │                              │                            │
    │  10. Akses fitur premium     │                            │
    │<─────────────────────────────│                            │

5 Detail Teknis

A. Inisiasi Transaksi (Server-side)

POST /api/payment/create
{
    "wedding_id": 123,
    "package_id": 2,
    "amount": 99000,
    "customer": {
        "name": "John Doe",
        "email": "john@example.com",
        "phone": "081234567890"
    }
}

B. Response dari Midtrans

{
    "token": "snap_token_xxx",
    "redirect_url": "https://app.midtrans.com/snap/v2/..."
}

C. Webhook Notification Handler

POST /api/payment/notification (dari Midtrans)
{
    "transaction_status": "settlement",
    "order_id": "KITANIKAH-123-1703...",
    "payment_type": "bank_transfer",
    "gross_amount": "99000.00"
}

D. Status Transaksi yang Ditangani

Status Aksi di KitaNikah
pending Tampilkan instruksi pembayaran
settlement ✅ Set is_paid = true, aktivasi undangan
capture ✅ Set is_paid = true, aktivasi undangan
expire Batalkan order, tampilkan notifikasi
cancel Batalkan order
deny Tampilkan pesan gagal
refund Set is_paid = false, nonaktifkan

6 Metode Pembayaran

6.1 Prioritas Tinggi

  • QRIS - Pembayaran populer untuk milenial
  • Virtual Account - BCA, BNI, BRI, Mandiri, Permata
  • E-Wallet - GoPay, ShopeePay, OVO, DANA

6.2 Opsional

  • 💳 Kartu Kredit/Debit
  • 🏪 Gerai Retail (Alfamart, Indomaret)

7 Keamanan & Validasi

🔒 Server-side Validation

  • Verifikasi signature key pada setiap webhook
  • Validasi order_id dan gross_amount
  • Double-check status transaksi via API (jika diperlukan)

💾 Database Transaction

  • Gunakan database transaction untuk update status
  • Log semua aktivitas pembayaran
  • Prevent duplicate processing

🛡️ Fraud Prevention

  • Validasi email pengguna
  • Rate limiting pada endpoint pembayaran
  • Monitor aktivitas mencurigakan

8 Halaman & Endpoint

8.1 Halaman Pengguna

Halaman URL Deskripsi
Pilih Paket /user/weddings/create Wizard pembuatan undangan
Checkout /payment/checkout/{wedding} Halaman konfirmasi pembayaran
Sukses /payment/success Konfirmasi pembayaran berhasil
Gagal /payment/failed Notifikasi pembayaran gagal
Riwayat /user/payments Daftar riwayat transaksi

8.2 API Endpoints

Method Endpoint Deskripsi
POST /api/payment/create Buat transaksi baru
POST /api/payment/notification Webhook dari Midtrans
GET /api/payment/status/{order_id} Cek status transaksi

9 Skenario Penggunaan

✅ Skenario Sukses (QRIS)

  1. User memilih paket Silver (Rp 99.000)
  2. Klik tombol "Bayar Sekarang"
  3. Popup Midtrans Snap muncul
  4. User memilih pembayaran via QRIS
  5. User scan QR dan membayar via aplikasi e-wallet
  6. Midtrans mengirim webhook settlement
  7. Sistem update is_paid = true
  8. User redirect ke halaman sukses
  9. Undangan aktif dan dapat diakses publik

⏳ Skenario Pending (Virtual Account)

  1. User memilih paket Premium (Rp 199.000)
  2. Klik "Bayar Sekarang"
  3. User memilih Virtual Account BCA
  4. Sistem menampilkan nomor VA dan instruksi
  5. User transfer dari ATM/Mobile Banking
  6. Midtrans mengirim webhook settlement
  7. Undangan otomatis aktif

❌ Skenario Expired

  1. User membuat order tapi tidak membayar
  2. Setelah 24 jam, Midtrans mengirim webhook expire
  3. Order dibatalkan
  4. User dapat membuat order baru

10 Diagram Database

users
id (PK)
name
email
phone
weddings
id (PK)
user_id (FK)
package_id (FK)
is_paid
is_active
payments
id (PK)
wedding_id (FK)
order_id
amount
status
payment_type
paid_at
packages
id (PK)
name
price
features

Versi: 1.0  |  Tanggal: 26 December 2025  |  Dokumen ini dibuat untuk keperluan pendaftaran dan integrasi Midtrans Payment Gateway