Alur Halaman Kasir (Checkout Flow) #
Setiap produk memiliki rute checkout publik mandiri di:
https://domainanda.com/checkout/{slug-produk}
Data yang Diminta dari Pelanggan #
- Nama Lengkap: Digunakan untuk pembuatan identitas akun dan personalisasi pesan notifikasi.
- Alamat Email: Menjadi username akun WordPress customer dan tujuan pengiriman email setel kata sandi.
- Nomor WhatsApp: Nomor handphone aktif yang disanitasi ke format internasional (contoh:
0812...otomatis dinormalisasi menjadi62812...) untuk pengiriman instruksi dan konfirmasi via WhatsApp. - Pilihan Metode Pembayaran: Radio pilihan metode yang sedang aktif di toko (Pembayaran Manual, Duitku, Midtrans, Xendit, atau DOKU).
- Persetujuan Syarat & Ketentuan: Checkbox persetujuan pemesanan.
Mekanisme Keamanan Checkout #
- Honeypot Protection: Bidang input tersembunyi yang mendeteksi dan menggugurkan submit otomatis dari bot spam tanpa membebani manusia dengan captcha yang mengganggu.
- Idempotency Key: Kunci idempotensi unik yang mencegah terciptanya pesanan ganda jika pembeli mengklik tombol submit berkali-kali.
- Rate Limiting: Pembatasan maksimal 10 pesanan per jam untuk setiap alamat IP client guna mencegah serangan flooding formulir.
- Server-side Recalculation: Harga final selalu dihitung ulang di sisi server berdasarkan database produk untuk mencegah manipulasi harga dari inspect element browser.
Perbedaan Alur: Manual vs Automatic Payment #
1. Alur Pembayaran Manual #
- Pelanggan memilih metode Transfer Bank / QRIS lalu klik tombol Buat Pesanan.
- Sistem membuat order baru dengan status
awaiting_paymentdan langsung mengarahkan pelanggan ke halaman status pesanan privat di:
https://domainanda.com/order/{public_token_32_karakter} - Pada halaman tersebut, pembeli melihat nominal yang wajib ditransfer, nomor rekening tujuan, gambar QRIS, dan formulir unggah bukti transfer.
- Setelah bukti diunggah, status pesanan berubah menjadi
waiting_verificationhingga diverifikasi admin.
2. Alur Pembayaran Otomatis (Payment Gateway) #
- Pelanggan memilih salah satu gateway aktif (contoh: Duitku) lalu klik tombol Bayar Sekarang.
- Sistem memanggil API gateway untuk meminta tautan pembayaran resmi dan membuat pesanan berstatus
processing_payment. - Pelanggan secara otomatis dialihkan ke halaman pembayaran aman payment gateway untuk memilih channel pembayaran (QRIS dinamis, Virtual Account BCA/Mandiri/BRI/BNI, E-Wallet ShopeePay/OVO/GoPay, atau Indomaret/Alfamart).
- Setelah pelanggan menyelesaikan pembayaran, payment gateway mengirimkan notifikasi callback (webhook) ke server WordPress.
- Server memverifikasi signature digital webhook, mencocokkan nominal transaksi, dan seketika mengubah status pesanan menjadi Lunas (
paid) secara otomatis tanpa campur tangan admin!