encryptData($phoneNumber); $email_encrypted = $encryptionHelper->encryptData($email); try { // ๐Ÿงน ุญุฐู ุฃูŠ ุฑู…ูˆุฒ ู‚ุฏูŠู…ุฉ ู„ู†ูุณ ุงู„ุฑู‚ู… $con->prepare("DELETE FROM phone_verification WHERE phone_number = ?") ->execute([$phoneNumber_encrypted]); // ๐Ÿงพ ุชูˆู„ูŠุฏ driverID ูุฑูŠุฏ $raw = $phoneNumber; $driverID = substr(md5($raw), 2, 20); // ๐Ÿ” ุชูˆู„ูŠุฏ ุฑู…ุฒ ุชุฌุฑูŠุจูŠ (ุจุฏูˆู† OTP ุญู‚ูŠู‚ูŠ ู„ุชุฌู†ุจ Null) $dummyToken = $encryptionHelper->encryptData('AUTO'); // ๐Ÿ•’ ุงู„ูˆู‚ุช ุงู„ุญุงู„ูŠ $now = date('Y-m-d H:i:s'); // โœ… ุฅุฏุฎุงู„ ุณุฌู„ ุชุญู‚ู‚ ู…ุจุงุดุฑ $stmt = $con->prepare(" INSERT INTO phone_verification (phone_number, token_code, email, driverId, expiration_time, is_verified, created_at) VALUES (?, ?, ?, ?, NULL, 1, ?) "); $stmt->execute([$phoneNumber_encrypted, $dummyToken, $email_encrypted, $driverID, $now]); error_log("โœ… [verifyOtp.php] Auto verification record inserted successfully for $phoneNumber"); // ๐Ÿ” ุงู„ุชุญู‚ู‚ ุฅุฐุง ุงู„ุณุงุฆู‚ ู…ูˆุฌูˆุฏ ู…ุณุจู‚ุงู‹ $checkDriverStmt = $con->prepare("SELECT * FROM driver WHERE phone = ?"); $checkDriverStmt->execute([$phoneNumber_encrypted]); $driver = $checkDriverStmt->fetch(PDO::FETCH_ASSOC); if ($driver) { error_log("๐Ÿ‘ค [verifyOtp.php] Driver already registered. Returning driver info."); printSuccess([ "message" => "Driver already registered.", "isRegistered" => true, "driver" => [ "id" => $driver['id'], "first_name" => $encryptionHelper->decryptData($driver['first_name']), "last_name" => $encryptionHelper->decryptData($driver['last_name']), "email" => $encryptionHelper->decryptData($driver['email']), "phone" => $phoneNumber ] ]); } else { error_log("๐Ÿ†• [verifyOtp.php] Phone verified automatically. Driver not found."); printSuccess([ "message" => "Phone number verified automatically (no OTP required).", "isRegistered" => false, "driverID" => $driverID ]); } } catch (PDOException $e) { error_log("๐Ÿ’ฅ [verifyOtp.php] PDO ERROR: " . $e->getMessage()); jsonError("Database error: " . $e->getMessage()); } ?>