
Tutorial Membuat Website Membership Premium dengan Payment Gateway Otomatis & Recurring Subscription System (Production Ready 2026)
Pendahuluan
Model bisnis membership premium adalah salah satu sistem monetisasi paling stabil di 2026. Dengan sistem subscription otomatis, Anda bisa mendapatkan pendapatan recurring setiap bulan tanpa harus menjual ulang produk.
Dalam tutorial lengkap ini kita akan membangun:
- Sistem Register & Login User
- Paket Membership (Basic, Pro, VIP)
- Sistem Subscription Otomatis
- Simulasi Payment Gateway
- Recurring Billing Logic
- Pembatasan Konten Premium
- Dashboard User
- Production Security Checklist
1. Konsep Website Membership Premium
Website membership premium adalah sistem di mana user harus berlangganan untuk mengakses konten tertentu.
Contoh platform global yang menggunakan model ini:
- Platform kursus online seperti Udemy
- Creator platform seperti Patreon
- Subscription software seperti Netflix
2. Struktur Folder Project
/membership-site
│
├── config/
│ └── database.php
│
├── auth/
│ ├── register.php
│ ├── login.php
│ └── logout.php
│
├── middleware/
│ └── check_subscription.php
│
├── dashboard/
│ └── index.php
│
└── index.php
3. Database Structure
CREATE DATABASE membership_system;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100),
email VARCHAR(150) UNIQUE,
password VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE plans (
id INT AUTO_INCREMENT PRIMARY KEY,
plan_name VARCHAR(50),
price INT,
duration_days INT
);
CREATE TABLE subscriptions (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
plan_id INT,
start_date DATE,
expired_date DATE,
status ENUM('active','expired') DEFAULT 'active',
FOREIGN KEY (user_id) REFERENCES users(id)
);
4. Koneksi Database
<?php
$conn = new mysqli("localhost","root","","membership_system");
if ($conn->connect_error) {
die("Connection failed");
}
?>
5. Sistem Register
<?php
include "../config/database.php";
$username = htmlspecialchars($_POST['username']);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$stmt = $conn->prepare("INSERT INTO users (username,email,password) VALUES (?,?,?)");
$stmt->bind_param("sss",$username,$email,$password);
$stmt->execute();
echo "Register berhasil";
?>
6. Login System
session_start();
include "../config/database.php";
$email=$_POST['email'];
$password=$_POST['password'];
$stmt=$conn->prepare("SELECT * FROM users WHERE email=?");
$stmt->bind_param("s",$email);
$stmt->execute();
$user=$stmt->get_result()->fetch_assoc();
if($user && password_verify($password,$user['password'])){
session_regenerate_id(true);
$_SESSION['user_id']=$user['id'];
header("Location: ../dashboard/index.php");
}else{
echo "Login gagal";
}
7. Menambahkan Paket Membership
INSERT INTO plans (plan_name,price,duration_days)
VALUES ('Basic',100000,30),
('Pro',250000,30),
('VIP',500000,30);
8. Simulasi Payment Gateway
Di production, Anda bisa integrasikan dengan payment gateway seperti:
- Midtrans
- Xendit
$user_id = $_SESSION['user_id'];
$plan_id = $_POST['plan_id'];
$stmt=$conn->prepare("SELECT * FROM plans WHERE id=?");
$stmt->bind_param("i",$plan_id);
$stmt->execute();
$plan=$stmt->get_result()->fetch_assoc();
$start=date('Y-m-d');
$expired=date('Y-m-d',strtotime("+".$plan['duration_days']." days"));
$stmt=$conn->prepare("INSERT INTO subscriptions (user_id,plan_id,start_date,expired_date) VALUES (?,?,?,?)");
$stmt->bind_param("iiss",$user_id,$plan_id,$start,$expired);
$stmt->execute();
echo "Subscription aktif";
9. Middleware Cek Subscription
session_start();
include "../config/database.php";
$user_id=$_SESSION['user_id'];
$stmt=$conn->prepare("SELECT expired_date FROM subscriptions
WHERE user_id=? AND status='active'
ORDER BY expired_date DESC LIMIT 1");
$stmt->bind_param("i",$user_id);
$stmt->execute();
$data=$stmt->get_result()->fetch_assoc();
if(!$data || $data['expired_date'] < date('Y-m-d')){
die("Subscription expired. Silakan perpanjang.");
}
10. Pembatasan Konten Premium
include "../middleware/check_subscription.php";
echo "Konten premium hanya untuk member aktif.";
11. Dashboard User
<?php
session_start();
echo "Selamat datang member ID: ".$_SESSION['user_id'];
?>
12. Recurring Subscription Logic
Untuk recurring otomatis, gunakan cron job harian untuk mengecek expired_date dan memperpanjang jika payment sukses.
UPDATE subscriptions
SET status='expired'
WHERE expired_date < CURDATE();
13. Production Security Checklist
- ✔ Gunakan HTTPS
- ✔ Gunakan Prepared Statement
- ✔ Validasi Input
- ✔ Gunakan CSRF Token
- ✔ Session Regenerate
- ✔ Webhook Payment Validation
- ✔ Logging Transaksi
Pengembangan Lanjutan
- Integrasi API Payment Gateway
- Email Invoice Otomatis
- Diskon & Kupon
- Referral System
- Upgrade/Downgrade Plan
- Statistik Revenue Dashboard
Dengan sistem ini, Anda sudah memiliki Website Membership Premium Production Ready 2026.