Cover Image

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.

Tutorial Membuat SaaS Multi-Tenant dengan PHP & MySQL: Sistem Subscription, Billing & Role Management (Production Ready 2026)

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:

Cara Membuat Website Direktori AI Tools yang SEO Friendly dan Berpotensi Lolos AdSense (Panduan Lengkap 2026)
  • 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.