Php License Key System Github Online
-- License domains table (for domain restrictions) CREATE TABLE IF NOT EXISTS license_domains ( id INT AUTO_INCREMENT PRIMARY KEY, license_id INT NOT NULL, domain VARCHAR(255) NOT NULL, activated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (license_id) REFERENCES licenses(id) ON DELETE CASCADE, UNIQUE KEY unique_domain_license (license_id, domain), INDEX idx_domain (domain) );
echo json_encode($result); <?php // public/example-client.php class LicenseClient { private $apiUrl; private $licenseKey; private $domain; private $activationCode; private $cacheFile;
/** * Create a unique license key */ private function createLicenseKey($productId) { $prefix = strtoupper(substr(preg_replace('/[^a-zA-Z0-9]/', '', $productId), 0, 4)); $uniqueId = uniqid() . bin2hex(random_bytes(8)); $hash = hash_hmac('sha256', $uniqueId . LICENSE_SALT, SECRET_KEY); $licenseKey = $prefix . '-' . strtoupper(substr($hash, 0, 8)) . '-' . strtoupper(substr($hash, 8, 8)) . '-' . strtoupper(substr($hash, 16, 8)); // Check for uniqueness $checkSql = "SELECT id FROM licenses WHERE license_key = :license_key"; $checkStmt = $this->db->prepare($checkSql); $checkStmt->execute([':license_key' => $licenseKey]); if ($checkStmt->rowCount() > 0) { return $this->createLicenseKey($productId); // Recursive retry } return $licenseKey; } php license key system github
$validator = new LicenseValidator(); $result = $validator->validate( $data['license_key'], $data['domain'] ?? null, $data['activation_code'] ?? null );
/** * Validate with remote server */ private function validateWithServer() { $ch = curl_init($this->apiUrl . '/validate.php'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ 'license_key' => $this->licenseKey, 'domain' => $this->domain, 'activation_code' => $this->activationCode ])); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode !== 200) { return ['valid' => false, 'error' => 'License server error']; } return json_decode($response, true); } -- License domains table (for domain restrictions) CREATE
/** * Activate license */ public function activate() { // Implementation for activation $this->activationCode = bin2hex(random_bytes(16)); return $this->validateWithServer(); } }
/** * Generate a unique license key */ public function generateLicenseKey($productId, $customerName, $customerEmail, $licenseType, $maxDomains = 1, $expiryDays = null) { // Generate unique license key $licenseKey = $this->createLicenseKey($productId); // Calculate expiry date $expiresAt = null; if ($expiryDays !== null) { $expiresAt = date('Y-m-d H:i:s', strtotime("+{$expiryDays} days")); } elseif ($licenseType !== 'perpetual') { $duration = $licenseType === 'trial' ? 30 : ($licenseType === 'monthly' ? 30 : 365); $expiresAt = date('Y-m-d H:i:s', strtotime("+{$duration} days")); } // Insert into database $sql = "INSERT INTO licenses (license_key, product_id, customer_name, customer_email, license_type, max_domains, expires_at) VALUES (:license_key, :product_id, :customer_name, :customer_email, :license_type, :max_domains, :expires_at)"; $stmt = $this->db->prepare($sql); $stmt->execute([ ':license_key' => $licenseKey, ':product_id' => $productId, ':customer_name' => $customerName, ':customer_email' => $customerEmail, ':license_type' => $licenseType, ':max_domains' => $maxDomains, ':expires_at' => $expiresAt ]); // Log the action $this->logAction($this->db->lastInsertId(), 'license_generated', "License generated for {$customerEmail}"); return [ 'license_key' => $licenseKey, 'expires_at' => $expiresAt, 'license_type' => $licenseType ]; } strtoupper(substr($hash, 8, 8))
/** * Validate activation code */ private function validateActivation($licenseId, $activationCode) { $sql = "SELECT is_active FROM license_activations WHERE license_id = :license_id AND activation_code = :activation_code"; $stmt = $this->db->prepare($sql); $stmt->execute([ ':license_id' => $licenseId, ':activation_code' => $activationCode ]); $result = $stmt->fetch(); return $result && $result['is_active']; }