activate_license($license_key); } } /** * Activate license on server */ public function activate_license($license_key) { $domain = $this->get_domain(); $response = wp_remote_post($this->license_server . '/wp-json/qc/v1/license/activate', array( 'body' => array( 'license_key' => $license_key, 'domain' => $domain, 'product' => $this->product_name ), 'timeout' => 15 )); if (is_wp_error($response)) { return array( 'success' => false, 'message' => 'Could not connect to license server: ' . $response->get_error_message() ); } $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if ($data && isset($data['success']) && $data['success']) { // Store license data update_option('acceve_license_key', $license_key); update_option('acceve_license_status', 'active'); update_option('acceve_license_data', $data['data']); // Store expiry date if provided if (isset($data['data']['expiry_date']) && !empty($data['data']['expiry_date'])) { update_option('acceve_license_expiry', $data['data']['expiry_date']); } update_option('acceve_license_last_check', time()); return array( 'success' => true, 'message' => $data['message'] ?? 'License activated successfully', 'data' => $data['data'] ); } else { return array( 'success' => false, 'message' => $data['message'] ?? 'Failed to activate license' ); } } /** * Verify license status (called daily by cron) */ public function verify_license_status() { $license_key = get_option('acceve_license_key'); if (empty($license_key)) { return; } $domain = $this->get_domain(); $response = wp_remote_post($this->license_server . '/wp-json/qc/v1/license/status', array( 'body' => array( 'license_key' => $license_key, 'domain' => $domain ), 'timeout' => 15 )); if (!is_wp_error($response)) { $body = wp_remote_retrieve_body($response); $data = json_decode($body, true); if ($data && isset($data['success']) && $data['success']) { $license_data = $data['data']; // Update stored data update_option('acceve_license_data', $license_data); update_option('acceve_license_last_check', time()); // Update status if ($license_data['is_expired'] || !$license_data['is_activated_on_domain']) { update_option('acceve_license_status', 'inactive'); } else { update_option('acceve_license_status', 'active'); } // Update expiry date if (isset($license_data['expiry_date'])) { update_option('acceve_license_expiry', $license_data['expiry_date']); } } } } /** * AJAX: Activate license */ public function ajax_activate_license() { check_ajax_referer('acceve_license_nonce', 'nonce'); if (!current_user_can('manage_options')) { wp_send_json_error('Unauthorized'); } $license_key = sanitize_text_field($_POST['license_key']); if (empty($license_key)) { wp_send_json_error('License key is required'); } $result = $this->activate_license($license_key); if ($result['success']) { wp_send_json_success($result); } else { wp_send_json_error($result['message']); } } /** * Check if license is active */ public function is_license_active() { $status = get_option('acceve_license_status'); $expiry = get_option('acceve_license_expiry'); if ($status !== 'active') { return false; } // Check expiry if (!empty($expiry) && strtotime($expiry) < time()) { update_option('acceve_license_status', 'inactive'); return false; } return true; } /** * Get license info */ public function get_license_info() { return array( 'license_key' => get_option('acceve_license_key'), 'status' => get_option('acceve_license_status'), 'expiry' => get_option('acceve_license_expiry'), 'data' => get_option('acceve_license_data'), 'last_check' => get_option('acceve_license_last_check') ); } /** * Admin notices for license issues */ public function license_admin_notices() { // Only show on plugin pages $screen = get_current_screen(); if (strpos($screen->id, 'certificate_verification') === false) { return; } $license_key = get_option('acceve_license_key'); $status = get_option('acceve_license_status'); $expiry = get_option('acceve_license_expiry'); // No license key entered if (empty($license_key)) { ?>
()