Dalam era digital saat ini, pengelolaan data royalti penulis memerlukan sistem yang tidak hanya aman tetapi juga mudah digunakan. Artikel ini membahas pengembangan sistem manajemen royalti yang mengintegrasikan autentikasi OTP melalui WhatsApp dengan arsitektur API modern.
Industri penerbitan menghadapi tantangan dalam mengelola data royalti penulis secara transparan dan aman. Sistem tradisional seringkali rumit, tidak user-friendly, dan rentan terhadap masalah keamanan. Penulis membutuhkan akses mudah untuk melihat data royalti mereka, sementara penerbit memerlukan kontrol administratif yang kuat.
Sistem ini dibangun dengan arsitektur tiga lapis:
Menggunakan WhatsApp sebagai channel OTP memberikan beberapa keuntungan:
private function sendOTPWhatsApp($phone, $otp) {
$message = "Kode OTP Sistem Royalti Cakrawala Satria Mandiri\n\n";
$message .= "Kode OTP Anda: *{$otp}*\n\n";
$message .= "Kode ini berlaku selama {$this->config['otp']['expire_minutes']} menit.\n";
// API call ke WhatsApp endpoint
return $this->callWhatsAppAPI('send-message', [
'phone' => $phone,
'message' => $message
]);
}
Sistem mengimplementasikan dua role utama:
Penulis (Author):
Administrator:
Interface menggunakan prinsip glassmorphism dengan:
.card {
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(20px);
border-radius: 20px;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
border: 1px solid rgba(255, 255, 255, 0.3);
}
Sistem secara otomatis menormalisasi format nomor HP Indonesia:
function normalizePhoneNumber(phone) {
let normalized = phone.replace(/\D/g, '');
if (normalized.startsWith('0')) {
normalized = '62' + normalized.substring(1);
} else if (!normalized.startsWith('62')) {
normalized = '62' + normalized;
}
return normalized;
}
Integrasi dengan Royalty API menggunakan authentication header:
'header' => [
'X-API-Key: ' . $this->config['api']['api_key'],
'Accept: application/json',
'Content-Type: application/json'
]
Mencegah spam OTP dengan rate limiting per IP:
private function isRateLimited() {
$key = 'rate_limit_' . ($_SERVER['REMOTE_ADDR'] ?? 'unknown');
if (isset($_SESSION[$key])) {
$elapsed = time() - $_SESSION[$key];
return $elapsed < ($this->config['security']['rate_limit_minutes'] * 60);
}
return false;
}
Automatic logout setelah periode inaktivitas:
$elapsed = time() - $_SESSION['user']['login_time'];
if ($elapsed > $this->config['security']['session_timeout']) {
unset($_SESSION['user']);
return $this->error('Session expired', 401);
}
// Rekap data untuk admin
GET /api/royalti/rekap
// Cek royalti berdasarkan HP
GET /api/royalti/cek?phone={phone}
// Semua data (admin only)
GET /api/royalti/all
// Kirim pesan text
POST /api/send-message
{
"phone": "6281234567890",
"message": "Your OTP message"
}
Comprehensive error handling untuk semua scenarios:
Strict validation untuk semua input:
Tantangan: Dependency pada external WhatsApp API Solusi: Implementasi fallback mechanism dan error handling yang robust
Tantangan: Format nomor HP Indonesia yang beragam Solusi: Smart normalization function yang handle semua format
Tantangan: Balance antara security dan user experience Solusi: Configurable timeout dengan auto-refresh capability
Sistem manajemen royalti ini mendemonstrasikan bagaimana teknologi modern dapat diterapkan untuk menyelesaikan masalah bisnis yang konkret. Dengan mengombinasikan autentikasi OTP WhatsApp, API integration, dan modern UI/UX, sistem ini memberikan solusi yang aman, user-friendly, dan scalable.
Key takeaways dari project ini:
Sistem ini dapat menjadi foundation untuk pengembangan aplikasi manajemen royalti yang lebih kompleks di masa depan, dengan kemampuan untuk di-scale up sesuai kebutuhan bisnis.
Artikel ini menjelaskan pengembangan sistem manajemen royalti modern yang mengintegrasikan berbagai teknologi untuk memberikan solusi yang komprehensif bagi industri penerbitan.