Roadmap dari localhost ke online

Belajar PHP sambil membangun
website top up digital.

Panduan praktik bertahap dari dasar PHP, database dan keamanan, sampai website bisa memakai domain sendiri dan berjalan di hosting. Ikuti urutan, buat proyek kecil, lalu uji setiap fitur.

πŸ—“οΈ Estimasi 16 minggu ⏱️ 1–2 jam per hari 🎯 Proyek: website top up digital

Hasil akhir yang dituju

Sebuah aplikasi web yang dapat digunakan pelanggan untuk mencari layanan, memilih nominal, mengirim pesanan, membayar, dan memeriksa status transaksi. Admin dapat mengelola katalog, transaksi, saldo vendor, dan mutasi melalui panel yang hanya bisa diakses setelah login.

Progres belajar

Checklist disimpan di browser ini, bukan di server.

0 dari 0 tugas selesai0%

Struktur folder lengkap di cPanel

Pelajari peta folder ini sebelum mulai roadmap. Domain biasanya mengarah ke public_html/; hanya file publik yang boleh diakses browser ada di situ. Source internal, log, konfigurasi, dan dependency diletakkan di folder privat yang sejajar dengannya.

/home/USERNAME_CPANEL/
β”œβ”€β”€ public_html/                         # Folder web; domain mengarah ke sini
β”‚   β”œβ”€β”€ index.php                        # Beranda/katalog
β”‚   β”œβ”€β”€ checkout.php                    # Endpoint checkout
β”‚   β”œβ”€β”€ login.php                        # Endpoint login
β”‚   β”œβ”€β”€ register.php                    # Endpoint registrasi
β”‚   β”œβ”€β”€ logout.php                      # Endpoint logout
β”‚   β”œβ”€β”€ dashboard.php                   # Halaman pelanggan
β”‚   β”œβ”€β”€ admin/
β”‚   β”‚   β”œβ”€β”€ orders.php                  # Kelola pesanan
β”‚   β”‚   └── reports.php                 # Laporan admin
β”‚   β”œβ”€β”€ webhooks/
β”‚   β”‚   └── payment.php                 # Callback payment gateway
β”‚   └── assets/
β”‚       β”œβ”€β”€ css/style.css               # Gaya tampilan
β”‚       β”œβ”€β”€ js/app.js                   # Interaksi browser, tanpa secret
β”‚       └── images/                     # Gambar/logo publik
└── topup_private/                      # Folder privat di luar web root
    β”œβ”€β”€ app/
    β”‚   β”œβ”€β”€ Controllers/                # Pengatur request/response
    β”‚   β”œβ”€β”€ Services/                   # Aturan bisnis aplikasi
    β”‚   β”œβ”€β”€ Repositories/               # Akses database via PDO
    β”‚   β”œβ”€β”€ Views/                      # Template HTML/PHP
    β”‚   β”œβ”€β”€ Data/                       # Data contoh saat belajar
    β”‚   β”œβ”€β”€ Middleware/                 # Cek login dan role
    β”‚   β”œβ”€β”€ Integrations/               # Klien API vendor/payment
    β”‚   β”œβ”€β”€ Security/                   # CSRF dan helper keamanan
    β”‚   β”œβ”€β”€ Support/                    # Logger/helper umum
    β”‚   β”œβ”€β”€ Database/connection.php     # Koneksi database
    β”‚   └── bootstrap.php               # Setup aplikasi dan session
    β”œβ”€β”€ config/database.php             # Konfigurasi koneksi
    β”œβ”€β”€ routes/web.php                  # Peta URL, bila diperlukan
    β”œβ”€β”€ database/migrations/            # Perubahan struktur tabel
    β”œβ”€β”€ storage/logs/                   # Log privat
    β”œβ”€β”€ tests/                           # Pengujian
    β”œβ”€β”€ scripts/                         # Skrip CLI/cron
    β”œβ”€β”€ .env                             # Kredensial; jangan commit
    β”œβ”€β”€ .env.example                     # Nama konfigurasi tanpa secret
    β”œβ”€β”€ .gitignore                       # Abaikan file privat/lokal
    β”œβ”€β”€ README.md                        # Panduan instalasi/deploy
    β”œβ”€β”€ composer.json                    # Dependency PHP
    └── vendor/                          # Library Composer
Aturan aman: jangan menaruh .env, backup database, file SQL, log, atau source internal di public_html/. Jika cPanel mengatur Document Root domain ke folder lain, sesuaikan struktur publik dengan pengaturan domain tersebut.

Roadmap 16 minggu

Centang tugas setelah benar-benar mencoba dan memahami hasilnya.

01

Persiapan dan dasar web

Pahami apa yang terjadi saat browser meminta halaman ke server.

Minggu 1

Pelajari dan praktikkan

  • Pasang XAMPP, jalankan Apache dan MySQL, lalu buat halaman uji di htdocs.
  • Kenali HTML semantik, CSS dasar, formulir HTML, dan cara browser mengirim request HTTP.
  • Pelajari PHP tags, variabel, tipe data, operator, string, komentar, serta perbedaan PHP dan JavaScript.
  • Gunakan VS Code dan terminal; pahami lokasi file dan URL localhost.
  • Rancang UI mobile-first: teks terbaca, kontras cukup, tombol mudah disentuh, dan navigasi dapat digunakan dengan keyboard.
Hasil minggu ini: satu halaman PHP sederhana berisi nama toko, daftar layanan statis, dan harga dalam Rupiah.
02

Logika PHP dan katalog produk

Susun produk top up dari data dan tampilkan secara dinamis.

Minggu 2–3

Pelajari dan praktikkan

  • Latih kondisi if/else, switch, loop, array numerik/asosiatif, dan foreach.
  • Buat array katalog berisi kategori game, operator, layanan, nominal, dan harga.
  • Pelajari fungsi, parameter, return, include/require, dan pisahkan header/footer.
  • Tampilkan katalog dengan pencarian dan filter; lakukan escaping output dengan htmlspecialchars.
  • Gunakan gambar berukuran sesuai tampilan, kompres aset, dan hindari memuat library besar yang belum diperlukan.
Hasil minggu ini: katalog game/pulsa yang dirender oleh PHP dari array produk, bukan kartu HTML berulang yang ditulis manual.
03

Formulir dan validasi pesanan

Buat alur order, bukan hanya tampilan pilihan produk.

Minggu 4

Pelajari dan praktikkan

  • Pahami form GET dan POST, request method, dan cara membaca $_POST dengan aman.
  • Validasi server-side untuk produk yang diizinkan, nominal, ID game/nomor tujuan, serta metode pembayaran.
  • Hitung harga di server berdasarkan ID nominal tersimpan; jangan mempercayai harga yang dikirim browser.
  • Tampilkan kembali error dengan aman dan pertahankan input yang valid.
  • Rancang keadaan UI untuk proses, berhasil, gagal, dan data kosong; uji layout di ponsel serta desktop.
Hasil minggu ini: checkout simulasi dengan validasi server dan ringkasan pesanan yang sesuai pilihan.
04

MySQL, desain tabel, dan PDO

Simpan produk dan order secara persisten di database.

Minggu 5–6

Pelajari dan praktikkan

  • Pelajari SQL: tabel, primary/foreign key, index, constraint, SELECT, INSERT, UPDATE, dan JOIN.
  • Rancang tabel users, categories, products, denominations, orders, payments, vendors, dan wallet_transactions.
  • Hubungkan PHP ke MySQL menggunakan PDO dan prepared statements.
  • Gunakan transaksi database untuk perubahan terkait yang harus berhasil atau gagal bersama.
  • Simpan order ke database dan tampilkan riwayat; buat backup dan latihan restore database lokal.
  • Gunakan pagination untuk daftar panjang, ambil hanya kolom yang diperlukan, dan pelajari index untuk kolom filter yang sering dipakai.
Hasil minggu ini: order simulasi masuk ke database, memiliki ID unik dan timestamp, dan bisa dibaca kembali.
05

Login, sesi, dan hak akses

Lindungi akun pelanggan dan panel admin.

Minggu 7

Pelajari dan praktikkan

  • Buat registrasi, login, logout, dan pemeriksaan sesi pada setiap halaman privat.
  • Simpan password dengan password_hash dan verifikasi dengan password_verify; jangan simpan password asli.
  • Terapkan role pelanggan/admin dan pemeriksaan izin di server, bukan sekadar menyembunyikan menu.
  • Atur cookie session dengan aman dan regenerasi ID sesi setelah login.
  • Tambahkan alur reset password yang memakai token sekali pakai dan kedaluwarsa; batasi percobaan login dan tetapkan masa berlaku sesi.
Hasil minggu ini: pelanggan bisa melihat order miliknya sendiri dan halaman admin menolak pengguna tanpa hak admin.
06

Keamanan web yang wajib

Keamanan harus dibangun sejak awal, bukan ditambahkan setelah ada masalah.

Minggu 8

Pelajari dan praktikkan

  • Cegah SQL injection dengan prepared statements; lakukan output escaping untuk mencegah XSS.
  • Tambahkan token CSRF pada perubahan state seperti order, saldo, dan pengaturan admin.
  • Validasi dan otorisasi setiap aksi di server; lindungi kredensial dan rahasia di luar source code.
  • Jangan percaya redirect, status pembayaran, total harga, atau callback yang belum diverifikasi.
  • Pelajari HTTPS, backup berkala, pencatatan error tanpa membocorkan data sensitif, dan pembatasan percobaan login.
  • Atur penanganan exception terpusat: tampilkan pesan aman kepada pengguna dan catat detail teknis yang sudah disaring ke log privat.
  • Jangan mencatat password, token sesi, API key, atau data pembayaran; batasi akses log dan rencanakan rotasi/penghapusan log.
Hasil minggu ini: checklist keamanan diterapkan pada login, checkout, mutasi saldo, dan seluruh aksi admin.
07

Dasbor admin dan ledger transaksi

Buat angka operasional dari catatan transaksi yang konsisten.

Minggu 9–10

Pelajari dan praktikkan

  • Tentukan state order seperti pending, paid, processing, success, dan failed beserta transisinya.
  • Buat halaman admin dengan filter tanggal/status, pencarian, detail order, dan ekspor laporan.
  • Catat pemasukan, biaya vendor, biaya pembayaran, pengembalian dana, dan keuntungan sebagai nilai terpisah.
  • Jangan mengubah saldo langsung tanpa catatan mutasi; rekam alasan, waktu, referensi, dan aktor perubahan.
  • Tambahkan log aktivitas admin dan tampilkan ringkasan jam transaksi berdasarkan data database.
  • Pastikan pengguna hanya dapat membaca order miliknya; terapkan pagination dan filter di query server untuk daftar besar.
Hasil minggu ini: admin bisa mencari transaksi, memantau vendor, melihat mutasi, dan menelusuri sumber hitungan keuntungan.
08

Integrasi vendor dan payment gateway

Gunakan integrasi resmi; uji seluruh skenario sebelum menerima pembayaran asli.

Minggu 11–12

Pelajari dan praktikkan

  • Pelajari HTTP API, JSON, autentikasi API, timeout, penanganan kegagalan, dan retry yang aman.
  • Pilih vendor produk dan payment gateway resmi; baca dokumentasi dan persyaratan bisnis dari penyedia.
  • Integrasikan sandbox terlebih dahulu dan simpan API key di environment/config rahasia, bukan di repository.
  • Verifikasi signature callback/webhook di server; periksa nominal, referensi, dan status sebelum mengubah order.
  • Buat idempotency agar callback berulang tidak menggandakan order, saldo, pengembalian dana, atau pemenuhan produk.
  • Uji pembayaran berhasil, tertunda, gagal, callback terlambat/berulang, vendor timeout, dan refund.
  • Catat ID transaksi internal dan ID request penyedia pada log agar satu kegagalan bisa ditelusuri; jangan catat secret atau data kartu.
  • Sebelum menulis kode integrasi, baca dokumentasi resmi API dan catat endpoint, autentikasi, format request/response, error, batas penggunaan, sandbox, dan aturan webhook.
Hasil minggu ini: ringkasan spesifikasi API yang dipahami, integrasi berfungsi di sandbox, status konsisten, dan tidak ada rahasia produksi di kode.
09

Pengujian, Git, dan persiapan produksi

Stabilkan aplikasi dan siapkan prosedur pemulihan.

Minggu 13–14

Pelajari dan praktikkan

  • Pelajari Git: commit kecil, branch, remote privat, dan cara memulihkan versi sebelumnya.
  • Tulis pengujian untuk validasi harga/nominal, akses admin, status order, callback, dan perhitungan keuntungan.
  • Tes tampilan ponsel/desktop, form kosong, input tidak valid, refresh, dan koneksi lambat.
  • Gunakan Composer bila memakai library; kunci versi dependency dan dokumentasikan kebutuhan PHP/extensi.
  • Siapkan environment staging, log, backup database, dan uji prosedur restore.
  • Jalankan Lighthouse/PageSpeed; periksa gambar berat, aset berlebih, aksesibilitas, query lambat, dan perilaku di ponsel sebelum rilis.
Hasil minggu ini: aplikasi diuji dengan skenario normal dan gagal, serta bisa dipulihkan dari backup.
10

Domain, hosting, dan go-live

Publikasikan dengan konfigurasi produksi yang aman.

Minggu 15–16

Pelajari dan praktikkan

  • Pilih domain dan hosting yang mendukung versi PHP, MySQL, ekstensi, cron, SSL, dan kebutuhan API aplikasi.
  • Hubungkan nameserver/DNS domain ke hosting, aktifkan HTTPS, dan pastikan sertifikat SSL terpasang.
  • Unggah aplikasi melalui Git/fitur deployment/SFTP; arahkan document root ke folder publik bila struktur hosting memungkinkan.
  • Buat database produksi dan import schema; atur environment production, permission file, dan kredensial secara rahasia.
  • Konfigurasikan URL callback production, cron jika dibutuhkan, backup otomatis, dan notifikasi error.
  • Uji checkout end-to-end dengan transaksi kecil yang aman setelah penyedia memberi izin live; siapkan cara menghentikan transaksi jika ada masalah.
  • Di cPanel, periksa versi PHP, ekstensi PDO MySQL/cURL, batas resource, akses outbound HTTPS, cron, dan lokasi log yang didukung provider.
  • Uji prosedur deteksi gangguan: cek log aplikasi dan menu Errors cPanel, cocokkan waktu serta ID transaksi, lalu pastikan pengunjung hanya melihat pesan umum.
Hasil akhir: website online di domain sendiri, HTTPS aktif, admin terlindungi, database/backup siap, dan alur transaksi sudah diuji sesuai persetujuan vendor serta payment gateway.

Panduan ringkas: performa dan mencari error

Jangan menebak atau langsung mengubah banyak hal sekaligus. Catat gejala, waktu kejadian, URL/aksi, dan ID order yang relevan; lalu cocokkan dengan log. Jangan pernah mengirim rahasia atau data pelanggan ke log.

Jika aplikasi menampilkan error 1) Catat waktu, halaman/aksi, dan ID transaksi (jangan catat password/token). 2) Periksa log aplikasi di topup_private/storage/logs/ dan menu Metrics β†’ Errors cPanel jika tersedia. 3) Cocokkan pesan dan waktu untuk menemukan file/baris atau layanan yang gagal. 4) Perbaiki di staging, ulangi skenario, lalu deploy. Di produksi, matikan tampilan detail error ke pengunjung; tampilkan pesan umum dan ID laporan bila tersedia.
Siapkan log yang bisa ditelusuri Setiap log penting sebaiknya memuat waktu, level (info/warning/error), nama komponen, dan ID request/order. Pastikan PHP bisa menulis ke folder log privat, file log tidak dapat diakses melalui URL, aksesnya terbatas, dan ukuran log tidak tumbuh tanpa batas. Uji dengan error terkendali di staging; jangan sengaja membuat error di produksi.
Jaga halaman tetap ringan Kompres dan ubah ukuran gambar sebelum upload; muat gambar di bawah layar secara lazy bila sesuai; minimalkan CSS/JavaScript dan dependency; gunakan pagination untuk daftar panjang; ambil kolom database seperlunya; tambahkan index setelah melihat pola query. Ukur dulu dengan Lighthouse/PageSpeed sebelum melakukan optimasi.
Jaga UI tetap enak digunakan Gunakan layout mobile-first, hierarki heading yang konsisten, kontras warna memadai, fokus keyboard yang terlihat, label form, dan pesan validasi yang jelas. Tampilkan status memuat, berhasil, gagal, dan data kosong agar pengguna tahu apa yang sedang terjadi.
Catatan cPanel: nama/lokasi menu log, ekstensi PHP, cron, dan batas resource dapat berbeda menurut provider. Gunakan menu PHP Selector/MultiPHP INI Editor dan Errors/Metrics yang tersedia, atau tanyakan provider. Jangan menampilkan phpinfo() ke publik; hapus halaman diagnostik setelah pemeriksaan.

Penjelasan folder dan urutan pembuatan file

Di cPanel, domain utama biasanya mengarah ke public_html/. Letakkan hanya file yang memang perlu diakses browser di sana. Simpan kode internal, konfigurasi, log, dan dependency di folder privat yang sejajar dengan public_html/, bukan di dalamnya.

/home/USERNAME_CPANEL/
β”œβ”€β”€ public_html/                         # Web root; domain mengarah ke sini
β”‚   β”œβ”€β”€ index.php                        # Beranda/UI, mulai dibuat minggu 1
β”‚   β”œβ”€β”€ checkout.php                    # Endpoint checkout
β”‚   β”œβ”€β”€ login.php                       # Endpoint login
β”‚   β”œβ”€β”€ register.php                    # Endpoint registrasi
β”‚   β”œβ”€β”€ logout.php                      # Endpoint logout
β”‚   β”œβ”€β”€ dashboard.php                   # Halaman pelanggan setelah login
β”‚   β”œβ”€β”€ admin/
β”‚   β”‚   β”œβ”€β”€ orders.php                  # Halaman kelola order
β”‚   β”‚   └── reports.php                 # Laporan admin
β”‚   β”œβ”€β”€ webhooks/
β”‚   β”‚   └── payment.php                 # Callback payment gateway
β”‚   └── assets/
β”‚       β”œβ”€β”€ css/style.css               # CSS yang dikirim ke browser
β”‚       β”œβ”€β”€ js/app.js                   # Interaksi UI; tidak menyimpan rahasia
β”‚       └── images/                     # Gambar/logo publik
└── topup_private/                      # Tidak dapat diakses melalui URL
    β”œβ”€β”€ app/
    β”‚   β”œβ”€β”€ Controllers/                # Mengatur request/response
    β”‚   β”œβ”€β”€ Services/                   # Aturan bisnis login/order/pembayaran
    β”‚   β”œβ”€β”€ Repositories/               # Query database dengan PDO
    β”‚   β”œβ”€β”€ Views/                      # Template HTML/PHP
    β”‚   β”œβ”€β”€ Data/                       # Data contoh saat belajar katalog
    β”‚   β”œβ”€β”€ Middleware/                 # Cek login dan role
    β”‚   β”œβ”€β”€ Integrations/               # Klien API vendor/payment gateway
    β”‚   β”œβ”€β”€ Security/                   # CSRF dan fungsi keamanan
    β”‚   β”œβ”€β”€ Support/                    # Logger/helper umum
    β”‚   β”œβ”€β”€ Database/connection.php     # Membuat koneksi PDO
    β”‚   └── bootstrap.php               # Setup session, autoload, dan konfigurasi
    β”œβ”€β”€ config/database.php             # Membaca konfigurasi database
    β”œβ”€β”€ routes/web.php                  # Peta URL (opsional saat aplikasi membesar)
    β”œβ”€β”€ database/migrations/            # File SQL untuk perubahan schema
    β”œβ”€β”€ storage/logs/                   # Log privat
    β”œβ”€β”€ tests/                           # Pengujian aplikasi
    β”œβ”€β”€ scripts/                         # Skrip CLI/cron, misalnya backup
    β”œβ”€β”€ .env                             # Kredensial; jangan commit ke Git
    β”œβ”€β”€ .env.example                     # Nama variabel tanpa nilai rahasia
    β”œβ”€β”€ .gitignore                       # Abaikan rahasia, log, dan file lokal
    β”œβ”€β”€ README.md                        # Cara instalasi, tes, dan deployment
    β”œβ”€β”€ composer.json                    # Dependency PHP
    └── vendor/                          # Library hasil Composer
Untuk minggu pertama di cPanel: buat public_html/index.php, public_html/assets/css/style.css, dan bila perlu public_html/assets/js/app.js. Upload folder assets beserta file UI ke public_html memakai File Manager atau FTP/SFTP. Untuk halaman statis tanpa PHP, gunakan public_html/index.html. Jangan upload .env, log, backup, atau file SQL ke public_html.
Hubungan file publik ke kode privat: endpoint langsung di public_html dapat memuat bootstrap dengan require_once dirname(__DIR__) . '/topup_private/app/bootstrap.php';. Endpoint di public_html/admin/ atau public_html/webhooks/ gunakan require_once dirname(__DIR__, 2) . '/topup_private/app/bootstrap.php';. Pastikan topup_private sejajar dengan public_html di home akun cPanel. Jika document root domain berbeda, sesuaikan dengan halaman Domains di cPanel.

Urutan belajar: pahami dulu, baru buat file

Gunakan urutan ini bersama roadmap di atas. Pelajari konsep dan kerjakan latihan kecil terlebih dahulu; setelah bisa menjelaskan hasilnya, baru buat file minggu tersebut. Daftar nama/lokasi file di bawah tetap sama.

Minggu 1 β€” sebelum membuat UI pertamaPelajari alur browser–server, URL dan localhost, struktur HTML semantik, CSS dasar, elemen form, dasar PHP, serta perbedaan tugas PHP di server dan JavaScript di browser. Latihan dulu membuat halaman statis sederhana dan mengubah tampilannya di layar ponsel. Setelah paham, buat file UI minggu 1.
Minggu 2 β€” sebelum membuat data katalogPelajari tipe data, array asosiatif, kondisi, loop, dan foreach. Rancang satu bentuk data produk yang konsistenβ€”misalnya nama, kategori, nominal, dan hargaβ€”lalu latihan merender beberapa item dari array. Setelah itu buat file data dan view katalog minggu 2.
Minggu 3 β€” sebelum memisahkan komponenPelajari fungsi, parameter/return, include/require, scope variabel, query string untuk filter, dan output escaping dengan htmlspecialchars. Pahami juga hierarki heading serta dasar responsive design. Baru kemudian pisahkan header/footer dan kembangkan katalog minggu 3.
Minggu 4 β€” sebelum menerima checkoutPelajari siklus HTTP request/response, metode GET vs POST, validasi input di server, tipe dan batas input, cara menampilkan pesan error aman, dan prinsip bahwa data browser tidak tepercaya. Latih alur form simulasi dari input sampai ringkasan. Setelah itu buat endpoint dan view checkout.
Minggu 5 β€” sebelum membuat schema databasePelajari konsep tabel/baris/kolom, primary key, foreign key, relasi, tipe kolom, constraint, dan dasar normalisasi. Gambar relasi data users, products, denominations, orders, serta payments di kertas; pelajari juga cara kerja konfigurasi environment dan koneksi PDO. Sesudah rancangan masuk akal, buat migration/schema dan koneksi.
Minggu 6 β€” sebelum menyimpan orderPelajari SELECT/INSERT/UPDATE/JOIN, prepared statements, transaksi database, penanganan exception, dan pagination. Latih query dengan data uji; pastikan harga diambil dari database, bukan nilai kiriman browser. Baru sambungkan repository ke alur checkout dan riwayat.
Minggu 7 β€” sebelum membuat loginPelajari session/cookie dan siklus login, password_hash/password_verify, autentikasi vs otorisasi, role, serta IDOR (akses data pengguna lain melalui ID). Rancang siapa boleh melihat/mengubah tiap jenis data. Baru buat halaman login/register/logout dan pemeriksaan akses.
Minggu 8 β€” sebelum menambah keamanan dan logPelajari SQL injection, XSS dan escaping kontekstual, CSRF, session fixation, rate limiting, HTTPS, serta perbedaan error untuk pengguna dan detail internal. Pelajari level log, informasi yang boleh dicatat, dan cara menghubungkan kejadian dengan request/order tanpa menyimpan rahasia. Setelah itu tambahkan perlindungan dan pencatatan error.
Minggu 9 β€” sebelum mengelola status orderPelajari state machine sederhana dan transisi status yang valid, otorisasi berbasis role, audit trail, pagination/filter, serta transaksi database. Gambar alur status dan tentukan siapa yang boleh mengubahnya sebelum membuat halaman admin dan service status.
Minggu 10 β€” sebelum membuat laporan dan ledgerPelajari debit/kredit atau pencatatan mutasi yang sesuai model bisnis, konsistensi transaksi, agregasi SQL, index, dan audit perubahan. Bedakan nominal pembayaran, biaya vendor, biaya gateway, refund, dan keuntungan. Baru susun laporan serta pencatatan ledger.
Minggu 11 β€” sebelum menghubungi APIPelajari HTTP/HTTPS, JSON, header, autentikasi API, timeout, kode respons, batas percobaan ulang, dan penyimpanan secret di environment. Baca dokumentasi resmi dari awal sebelum menulis kode: temukan base URL dan versi API, metode serta endpoint, autentikasi, parameter wajib/opsional, contoh request dan response, arti status/kode error, rate limit, timeout/retry, sandbox, dan kontak dukungan. Buat catatan alur request-response dengan bahasa sendiri, lalu cocokkan dengan kebutuhan aplikasi dan coba request non-transaksi di sandbox; jangan mengirim transaksi sungguhan saat belajar.
Minggu 12 β€” sebelum menerima webhookPelajari signature/HMAC sesuai dokumentasi penyedia, verifikasi nominal dan referensi, replay, callback berulang, idempotensi, dan penguncian/transaksi database. Gambar skenario sukses, pending, gagal, terlambat, dan duplikat. Baru buat endpoint webhook dan pemrosesnya.
Minggu 13 β€” sebelum menulis testPelajari unit test vs integration test, assertion, fixture/data uji, mock API, serta cara menguji kasus gagal dan izin akses. Tentukan kriteria lulus untuk login, harga, status, dan callback sebelum membuat file test.
Minggu 14 β€” sebelum menyiapkan stagingPelajari environment development/staging/production, dependency Composer dan lock file, Git branch/commit, konfigurasi tanpa rahasia, backup dan restore, serta cara membaca log. Pastikan tes dapat diulang dan data uji tidak memakai data pelanggan sebenarnya.
Minggu 15 β€” sebelum deployment cPanelPelajari document root public_html, DNS, HTTPS/SSL, permission file, versi PHP dan ekstensi yang dibutuhkan, konfigurasi environment, serta cara deploy dan rollback. Cocokkan kebutuhan aplikasi dengan batas cPanel/provider sebelum upload.
Minggu 16 β€” sebelum go-livePelajari checklist rilis, pengujian sandbox vs live, pemantauan log, cron job sesuai batas hosting, backup terjadwal dan latihan restore, rotasi secret, serta prosedur menghentikan transaksi. Lakukan uji end-to-end yang diizinkan penyedia sebelum membuka layanan ke pelanggan.

File yang dibuat bertahap dari minggu 1 sampai 16

Setelah materi pada bagian β€œUrutan belajar” dipahami dan latihan kecilnya berhasil, baru buat file minggu terkait. Berikut contoh file untuk setiap minggu; buat bertahap, bukan semuanya sekaligus. Beberapa file akan terus dipakai dan dikembangkan pada minggu berikutnya.

Minggu 1 β€” halaman UI pertamaBuat public_html/index.php, public_html/assets/css/style.css, dan public_html/assets/js/app.js bila perlu. Untuk halaman statis tanpa PHP, gunakan public_html/index.html.
Minggu 2 β€” data katalog sederhanaBuat topup_private/app/Data/products.php berisi array produk contoh dan topup_private/app/Views/catalog/index.php sebagai template katalog. Mulai tampilkan produk dari data, bukan menyalin kartu HTML berulang-ulang.
Minggu 3 β€” komponen dan filter katalogTambahkan topup_private/app/Views/partials/header.php dan topup_private/app/Views/partials/footer.php untuk bagian yang dipakai ulang. Kembangkan public_html/index.php agar katalog dapat dicari/disaring dan output dinamis di-escape.
Minggu 4 β€” checkout simulasiBuat public_html/checkout.php untuk menerima form; topup_private/app/Services/OrderService.php untuk validasi dan hitung harga dari sumber tepercaya; topup_private/app/Views/orders/checkout.php untuk form/ringkasan dan topup_private/app/Views/errors/validation.php untuk error validasi. Jangan percaya harga dari browser.
Minggu 5 β€” schema dan koneksi databaseBuat topup_private/database/migrations/001_create_core_tables.sql untuk schema; topup_private/config/database.php untuk konfigurasi koneksi; topup_private/app/Database/connection.php untuk PDO; topup_private/app/bootstrap.php untuk persiapan aplikasi; serta topup_private/.env, topup_private/.env.example, dan topup_private/.gitignore. Jangan simpan file SQL di public_html atau commit rahasia.
Minggu 6 β€” simpan dan baca orderTambahkan topup_private/app/Repositories/ProductRepository.php dan topup_private/app/Repositories/OrderRepository.php untuk query database, lalu topup_private/app/Views/orders/history.php untuk riwayat. Ubah checkout di public_html/checkout.php agar menyimpan order dan membaca kembali datanya.
Minggu 7 β€” akun dan aksesBuat public_html/login.php, public_html/register.php, dan public_html/logout.php; topup_private/app/Services/AuthService.php; topup_private/app/Repositories/UserRepository.php; topup_private/app/Middleware/AuthMiddleware.php; serta topup_private/app/Views/auth/login.php dan topup_private/app/Views/auth/register.php. Simpan hash password, bukan password asli.
Minggu 8 β€” keamanan dan error logTambahkan topup_private/app/Security/Csrf.php untuk token CSRF, topup_private/app/Support/Logger.php untuk log aman, dan topup_private/storage/logs/app.log sebagai lokasi privat. Jangan tampilkan detail error atau mencatat password/token ke log.
Minggu 9 β€” status order dan halaman adminBuat public_html/admin/orders.php, topup_private/app/Controllers/AdminOrderController.php, topup_private/app/Services/OrderStatusService.php, dan topup_private/app/Views/admin/orders.php. Tetapkan transisi status order yang diizinkan.
Minggu 10 β€” laporan dan ledgerTambahkan public_html/admin/reports.php, topup_private/app/Repositories/TransactionRepository.php, dan topup_private/database/migrations/002_create_audit_and_ledger_tables.sql untuk mutasi serta audit. Saldo jangan diubah tanpa catatan transaksi.
Minggu 11 β€” klien APIBuat topup_private/app/Integrations/VendorClient.php dan topup_private/app/Integrations/PaymentGatewayClient.php untuk request resmi ke penyedia. Simpan API key di environment; tangani timeout dan kegagalan tanpa mengungkap rahasia.
Minggu 12 β€” callback dan idempotensiBuat public_html/webhooks/payment.php untuk menerima callback; topup_private/app/Services/WebhookService.php untuk verifikasi signature dan pemrosesan idempotent; serta topup_private/database/migrations/003_create_webhook_events.sql untuk mencatat event agar callback berulang tidak menggandakan proses.
Minggu 13 β€” pengujian fitur intiTambahkan topup_private/tests/ untuk login, validasi harga, izin admin, perubahan status, dan webhook. Buat topup_private/composer.json serta topup_private/phpunit.xml jika memilih PHPUnit.
Minggu 14 β€” dokumentasi dan stagingBuat/perbarui topup_private/README.md untuk instalasi, versi PHP, dan tes; lengkapi topup_private/.env.example; siapkan konfigurasi staging terpisah. Uji backup dan pemulihan sebelum rilis.
Minggu 15 β€” persiapan deploymentLengkapi panduan deployment/rollback di topup_private/README.md; pastikan Document Root domain di cPanel adalah public_html/. Buat public_html/.htaccess hanya bila memakai Apache dan memang diperlukan. Simpan konfigurasi produksi di cPanel, bukan repository.
Minggu 16 β€” go-live dan operasionalBila perlu, buat topup_private/scripts/backup-database.php untuk dijalankan aman melalui CLI/cron. Siapkan dan uji HTTPS, konfigurasi environment, DNS, backup, callback, serta prosedur penghentian transaksi.
public_html/ β€” area publik cPanelFile di sini dapat diminta browser. Domain utama cPanel biasanya mengarah ke folder ini. Simpan hanya entry point PHP dan aset publik; jangan taruh kredensial, file log, backup, atau kode internal.
public_html/index.php β€” UI awalMulai dari halaman utama sederhana. Ketika aplikasi berkembang, file ini dapat memuat bootstrap privat lalu meneruskan alur ke controller. Jangan menaruh semua aturan bisnis di dalamnya.
public_html/assets/ β€” aset tampilanCSS, JavaScript, dan gambar publik. JavaScript di browser tidak boleh menyimpan API key atau menjadi sumber harga/status transaksi yang dipercaya server.
topup_private/app/Controllers/ β€” pengatur requestMenerima input, memanggil layanan yang sesuai, lalu menentukan tampilan atau redirect. Contoh: AuthController menangani request login.
topup_private/app/Services/ β€” aturan bisnisTempat keputusan aplikasi, misalnya validasi order dan perhitungan harga dari data tepercaya. Tidak bertanggung jawab menggambar HTML.
topup_private/app/Repositories/ β€” akses databaseTempat query untuk mencari pengguna, produk, atau pesanan. Gunakan PDO dan prepared statements; jangan menyusun query dari input mentah.
topup_private/app/Views/ β€” template halamanBerisi HTML yang ditampilkan, seperti form login dan daftar produk. Escape nilai dinamis sebelum ditampilkan dan hindari query database di template.
topup_private/app/Middleware/ β€” pemeriksaan aksesMemeriksa syarat sebelum halaman/aksi berjalan, seperti pengguna harus login atau memiliki role admin. Pemeriksaan dilakukan di server.
topup_private/app/bootstrap.php β€” persiapan aplikasiMemuat autoload dan konfigurasi, memulai session, serta menyiapkan hal umum yang diperlukan request. Hindari menaruh proses bisnis khusus di sini.
topup_private/config/ β€” pengaturanPengaturan aplikasi dan pembacaan rahasia dari environment. Folder ini berada di luar public_html/ agar tidak bisa diunduh melalui URL.
topup_private/routes/ β€” peta URLMenghubungkan URL dan metode HTTP ke handler. Untuk proyek pemula, boleh ditambahkan belakangan; beberapa endpoint PHP di public_html/ dapat digunakan lebih dulu.
topup_private/database/ β€” perubahan dan data awalmigrations/ mencatat perubahan tabel. Jalankan file SQL melalui phpMyAdmin/CLI sesuai prosedur; jangan upload SQL agar bisa diunduh dari public_html/.
topup_private/storage/logs/ β€” catatan errorLog membantu diagnosis. Simpan di luar public_html/, batasi akses file, dan jangan mencatat password, token sesi, atau API key.
topup_private/tests/ β€” pengujianTempat menguji login, izin admin, harga pesanan, callback, dan perubahan status. Tidak perlu dipublikasikan ke web.
topup_private/.env dan .env.example.env berisi rahasia dan berada di luar public_html/; jangan commit ke Git. .env.example mendokumentasikan nama variabel tanpa nilainya.
topup_private/composer.json dan vendor/composer.json mencatat library PHP. Composer membuat vendor/; letakkan keduanya di folder privat dan muat autoload dari bootstrap.
Prinsip cPanel: semua URL publik masuk melalui public_html/. Letakkan source internal, rahasia, log, file SQL, dan backup di topup_private/ pada level akun yang sama. Pastikan pengguna PHP cPanel dapat membaca folder privat dan menulis ke folder log, tetapi pengunjung web tidak bisa membukanya.

Alur inti website top up

Pahami alur ini sebelum menghubungkan transaksi sungguhan. Status harus dilacak di backend; tampilan browser tidak menjadi sumber kebenaran pembayaran.

01 Β· PELANGGANPilih layananKatalog β†’ produk β†’ nominal β†’ ID tujuan.
02 Β· SERVERBuat orderValidasi harga dari database; simpan status awal.
03 Β· PEMBAYARANBayar & verifikasiGateway mengirim callback bertanda tangan untuk diverifikasi.
04 Β· VENDORPenuhi top upKirim order dengan referensi unik; tangani retry tanpa duplikasi.
05 Β· PEMANTAUANCatat hasilUpdate status, mutasi, biaya, keuntungan, dan riwayat admin.

Checklist domain dan hosting

Domain adalah alamat website; hosting adalah server tempat aplikasi dan database berjalan. Keduanya biasanya dibeli terpisah, lalu dihubungkan melalui DNS.

Sebelum membeli

  • Pastikan provider mendukung versi PHP yang dipilih, MySQL/MariaDB, PDO MySQL, HTTPS, dan outbound API HTTPS.
  • Tanyakan batas cron job, proses background, email transaksional, database, backup, dan akses log.
  • Pastikan provider produk dan payment gateway mengizinkan penggunaan domain serta model bisnis Anda.

Saat deployment

  • Hubungkan domain lewat DNS sesuai instruksi hosting dan tunggu propagasi.
  • Aktifkan SSL/HTTPS sebelum menangani akun, callback, atau proses pembayaran.
  • Impor database, simpan konfigurasi produksi di tempat yang tidak dapat diakses publik.
  • Nonaktifkan error detail untuk pengunjung; gunakan log server untuk diagnosis.
  • Pastikan log aplikasi dapat ditulis, tidak berada di area publik, dan uji alur pelaporan error di staging.
  • Uji formulir dan halaman utama di ponsel; periksa waktu muat dan ukuran aset sebelum rilis.

Operasional rutin

  • Backup file dan database terjadwal; uji restore, bukan sekadar menganggap backup berhasil.
  • Perbarui PHP, library, dan dependency; pantau kapasitas dan error aplikasi.
  • Periksa log aplikasi serta Errors/Metrics cPanel secara berkala; siapkan kontak provider jika error berasal dari layanan hosting.
  • Jaga API key, password database, token webhook, dan akun hosting tetap privat.
  • Buat SOP refund, transaksi pending, kegagalan vendor, dan eskalasi dukungan.

Urusan bisnis

  • Pelajari aturan usaha, pajak, perlindungan data, kebijakan refund, dan hak pelanggan yang berlaku.
  • Terbitkan kontak dukungan, syarat penggunaan, kebijakan privasi, dan alur pengaduan.
  • Jangan menerima pembayaran langsung sebelum alur rekonsiliasi dan dukungan berfungsi.
Jangan diluncurkan ke transaksi nyata hanya karena halaman terlihat berfungsi. Perlu autentikasi dan izin admin, HTTPS, validasi server, log privat tanpa rahasia, database dan backup yang sudah diuji restore, integrasi vendor/gateway resmi, validasi callback, penanganan refund, serta tes status transaksi dan prosedur saat terjadi error.

Referensi belajar resmi