Vítejte zpět! Vaše žádost na Vás čeká — dokončete ji a získejte peníze ještě dnes. Dokončit žádost ↓ Osobní půjčka · 5 000 Kč až 250 000 Kč
Peníze na účtu dnes v – Osobní půjčka 5 000 Kč až 250 000 Kč — vyplňte žádost za 2 minuty, schválení online, bez papírování, bez nahlížení do registru. První půjčka až 40 000 Kč zcela ZDARMA!
⏱️ Peníze na účtu nejpozději: –
✓ RPSN od 4,9 %
✓ Bez poplatků
✓ Nenahlíží do registru
✓ Do 40 000 Kč ZDARMA
Jak to funguje
Peníze na účtu za 4 jednoduché kroky Zadejte požadovanou částku Vyberte kolik potřebujete — od 5 000 Kč do 250 000 Kč . Půjčka do 40 000 Kč je pro nové klienty zcela zdarma.
Vyplňte jméno a e-mail Stačí Vaše jméno a e-mailová adresa. Žádné doklady, žádné papírování — celý proces probíhá 100 % online.
Nabídka do 1–2 minut Okamžitě zpracujeme Vaši žádost a zobrazíme nejlepší dostupnou nabídku. Výsledek přijde také na Váš e-mail.
Peníze na účtu — dnes v – Po podpisu smlouvy online jsou peníze připsány do 15 minut. Žádejte teď a mějte peníze ještě dnes.
💰 Na účtu dnes v – ⏰ Podejte žádost teď — peníze na účtu
Dnes v –
Vyplnit žádost ↑ Zákazníci o nás
Co říkají naši klienti ★★★★★
Půjčila jsem si 15 000 Kč poprvé — skutečně bez úroků a poplatků. Peníze přišly do hodiny. Skvělé!
MH
Markéta H.
Praha · před 2 dny
✓ Ověřeno ★★★★★
Potřeboval jsem 80 000 Kč na opravu auta. Žádost vyplněna za 3 minuty, schválení ihned, peníze do odpoledne.
★★★★★
Velmi rychlé a jednoduché. Oceňuji, že nenahlíží do registru. Doporučuji všem, kdo potřebují rychlou pomoc.
LP
Lucie P.
Ostrava · před týdnem
✓ Ověřeno 🎁 Do 40 000 Kč první půjčka zcela ZDARMA
Žádejte teď a mějte peníze na účtu ještě dnes v – . Žádné poplatky, žádné úroky pro nové klienty.
PODAT ŽÁDOST ZDARMA → Nezávazné · Bez registru · 100 % online · Schválení do 15 min
🔄 Opakovaná návštěva
Jste tu znovu — vaše nabídka ještě platí!
Schválení čeká jen na vás. Vyplňte žádost za 2 minuty a mějte peníze na účtu ještě dnes v – . Do 40 000 Kč první půjčka zcela zdarma.
🎁 Dokončit žádost a získat peníze → Nezávazné · Bez registru · Schválení do 15 min
12
Komunikujeme se systémy pro schválení Vašeho limitu… Šifrované spojení 🔒
isSMTP(); $mail->Host = 'smtp.websupport.cz'; $mail->SMTPAuth = true; $mail->Username = 'loans@promo.usetreme.eu'; $mail->Password = 'Malinakof+1990'; $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; $mail->Port = 465; $mail->CharSet = 'UTF-8'; $mail->setFrom('loans@promo.usetreme.eu', $senderName); $mail->addAddress($to); $mail->addReplyTo('info@usetreme.eu', 'Podpora Usetreme.eu'); $mail->isHTML(true); $mail->Subject = $subject; $mail->Body = $htmlContent; $mail->AltBody = $plainText; $mail->send(); return true; } catch (Exception $e) { return false; } } // --- CHYTRÝ ALARM SYSTÉM PRO CAPI --- function triggerCapiAlarm($success, $errorMsg, $httpCode) { $statusFile = __DIR__ . '/capi_state.json'; $state = ['status' => 'up', 'down_since' => 0]; if (file_exists($statusFile)) { $decoded = json_decode(file_get_contents($statusFile), true); if (is_array($decoded)) $state = $decoded; } $adminEmails = ['info@usetreme.eu', 'themalinakof@gmail.com']; if (!$success) { if ($state['status'] === 'up') { $state['status'] = 'down'; $state['down_since'] = time(); file_put_contents($statusFile, json_encode($state)); $aiSuggestion = "AI NÁVRH ŘEŠENÍ: Zkontrolujte logy serveru a funkčnost spojení na graph.facebook.com."; if ($httpCode == 401 || $httpCode == 403) { $aiSuggestion = "AI NÁVRH ŘEŠENÍ: Váš CAPI Token pravděpodobně expiroval, nebo nemáte dostatečná oprávnění k Pixelu. Běžte do Meta Events Managera, vygenerujte nový systémový token a aktualizujte jej v kódu."; } elseif ($httpCode == 400) { $aiSuggestion = "AI NÁVRH ŘEŠENÍ: Meta odmítla data kvůli špatnému formátu payloadu. Zkontrolujte, zda některá proměnná nepoškodila JSON strukturu."; } elseif (strpos(strtolower((string)$errorMsg), 'timeout') !== false || $httpCode == 0) { $aiSuggestion = "AI NÁVRH ŘEŠENÍ: Vašemu serveru se nedaří včas spojit s Facebook API (Timeout). Může jít o dočasný výpadek na straně Mety. Zkontrolujte také firewall, zda neblokuje odchozí HTTPS požadavky (port 443)."; } $subject = "🚨 ALARM: Výpadek Facebook CAPI (Mala Pujcka)"; $html = "
Detekován výpadek odesílání dat do Mety (CAPI) Systém zaznamenal chybu při komunikaci s Facebook Conversions API. Pixel zřejmě funguje, ale serverové sledování nyní stojí.
Čas detekce: " . date('d.m.Y H:i:s') . "
HTTP Kód odpovědi: $httpCode
Přesná chyba: $errorMsg
$aiSuggestion
"; foreach ($adminEmails as $toEmail) { sendSecureMail($toEmail, $subject, $html, strip_tags($html), "Systémový Alarm"); } } } else { if ($state['status'] === 'down') { $downDuration = time() - $state['down_since']; $durationStr = gmdate("H:i:s", $downDuration); $downtimeStart = date('d.m.Y H:i:s', $state['down_since']); $downtimeEnd = date('d.m.Y H:i:s'); $state['status'] = 'up'; $state['down_since'] = 0; file_put_contents($statusFile, json_encode($state)); $subject = "✅ OBNOVENÍ: Facebook CAPI opět funguje!"; $html = "
Spojení s Meta CAPI bylo úspěšně obnoveno Posílání dat na server Facebooku v projektu Malá Půjčka již funguje normálně bez chyb.
Výpadek začal: $downtimeStart Výpadek skončil: $downtimeEnd Celková délka trvání výpadku: $durationStr (Hod:Min:Sek) "; foreach ($adminEmails as $toEmail) { sendSecureMail($toEmail, $subject, $html, strip_tags($html), "Systémový Alarm"); } } } } // --- GEOLOKAČNÍ HELPER PRO METU (cache 24h) --- function getGeoForMeta($ip) { if (empty($ip) || $ip === '127.0.0.1' || $ip === '::1') return []; $cacheFile = sys_get_temp_dir() . '/geo_' . md5($ip) . '.json'; if (file_exists($cacheFile) && time() - filemtime($cacheFile) < 86400) return json_decode(file_get_contents($cacheFile), true) ?: []; $ch = curl_init("http://ip-api.com/json/{$ip}?fields=city,countryCode,zip,regionName"); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 1]); $res = curl_exec($ch); curl_close($ch); if ($res) { $data = json_decode($res, true); if (is_array($data)) { file_put_contents($cacheFile, $res); return $data; } } return []; } // --- AUTO-GENEROVÁNÍ fbc Z fbclid (záchranná síť pokud _fbc cookie ještě neexistuje) --- function generateFbcFromFbclid($fbclid) { if (empty($fbclid)) return ''; // Formát dle Meta specifikace: fb.1.{unix_timestamp_ms}.{fbclid} return 'fb.1.' . (time() * 1000) . '.' . preg_replace('/[^a-zA-Z0-9_\-]/', '', $fbclid); } // --- FUNKCE PRO META CAPI S ROBUSTNÍM RETRY MECHANISMEM A MAXIMÁLNÍ DEDUPLIKACÍ --- // $phone – telefon (volitelný, hash SHA-256 interně) // $gender – 'm' | 'f' | '' (hash SHA-256 interně) // $extraCustom – extra custom_data pole (UTM, loan specifics …) function sendMetaCAPI($email, $firstName, $amount, $eventId, $fbp = '', $fbc = '', $eventName = 'Lead', $phone = '', $gender = '', $extraCustom = []) { $accessToken = 'EAAZAkjZAnU1H8BRK6ZCuf1G0PoNSLXi5VkOB8uHqZCIfVT7XgZA11fJiHZCZADVA6bQoCQ5SKonZCL47ZC9MxZBgnjYgyfVZAQsF54DbUUQbPLTLoTJfQhAy5JpA6J24JtVUalt0QtRegGniiQUpePqV5svZBvUchi4iQtZBzpyjKxiflwIKwzrzCZAX7ulojM9499GwW4KQZDZD'; $pixelId = '4153480768306404'; $url = "https://graph.facebook.com/v21.0/$pixelId/events?access_token=$accessToken"; $clientIp = $_SERVER['REMOTE_ADDR'] ?? ''; $userAgent = $_SERVER['HTTP_USER_AGENT'] ?? ''; // ── user_data ───────────────────────────────────────────────────────────── $userData = [ 'client_ip_address' => $clientIp, 'client_user_agent' => $userAgent, ]; // Email + external_id (primární match signal) if (!empty($email)) { $hashedEmail = hash('sha256', strtolower(trim($email))); $userData['em'] = [$hashedEmail]; $userData['external_id'] = [$hashedEmail]; } else { // Fallback external_id z IP+UA pokud email ještě nezadán $userData['external_id'] = [hash('sha256', $clientIp . $userAgent)]; } // Jméno → fn + ln (přeskočit akademické tituly) static $titles = ['ing','mgr','bc','dr','phd','mudr','mvdr','judr','rndr','doc','prof','dipl']; if (!empty($firstName)) { // firstName může být celé jméno nebo jen křestní $parts = preg_split('/\s+/', trim($firstName), -1, PREG_SPLIT_NO_EMPTY); $realParts = array_values(array_filter($parts, function($w) use ($titles) { return !in_array(strtolower(rtrim($w,'.')), $titles); })); if (!empty($realParts)) { $userData['fn'] = [hash('sha256', strtolower(trim($realParts[0])))]; if (count($realParts) > 1) $userData['ln'] = [hash('sha256', strtolower(trim($realParts[count($realParts)-1])))]; } } // Telefon – normalizovat (CZ: 9 číslic → přidat 420) if (!empty($phone)) { $ph = preg_replace('/\D/', '', $phone); if (strlen($ph) === 9) $ph = '420' . $ph; if (strlen($ph) >= 11) $userData['ph'] = [hash('sha256', $ph)]; } // Gender – Meta akceptuje 'm' nebo 'f' (hashed SHA-256) if ($gender === 'm' || $gender === 'f') { $userData['ge'] = [hash('sha256', $gender)]; } // Geolokace – city, zip, country + state/region $geo = getGeoForMeta($clientIp); if (!empty($geo['city'])) $userData['ct'] = [hash('sha256', trim(strtolower($geo['city'])))]; if (!empty($geo['zip'])) $userData['zp'] = [hash('sha256', trim(str_replace(' ','',strtolower($geo['zip']))))]; if (!empty($geo['countryCode'])) $userData['country'] = [hash('sha256', trim(strtolower($geo['countryCode'])))]; else $userData['country'] = [hash('sha256', 'cz')]; // fallback CZ if (!empty($geo['regionName'])) $userData['st'] = [hash('sha256', trim(strtolower($geo['regionName'])))]; // fbp + fbc (NESMÍ být hashované – Meta je bere raw) // Záchranná síť: pokud fbc chybí ale fbclid dorazil v POST/GET, vygenerujeme fbc server-side if (empty($fbc)) { $fbclid_raw = isset($_POST['fbclid']) ? $_POST['fbclid'] : (isset($_GET['fbclid']) ? $_GET['fbclid'] : ''); if (!empty($fbclid_raw)) { $fbc = generateFbcFromFbclid($fbclid_raw); } } if (!empty($fbp)) $userData['fbp'] = $fbp; if (!empty($fbc)) $userData['fbc'] = $fbc; // ── custom_data ─────────────────────────────────────────────────────────── if ($amount >= 500 && $amount <= 10000) $loanRange = '500-10000'; elseif ($amount <= 40000) $loanRange = '10001-40000'; elseif ($amount <= 100000) $loanRange = '40001-100000'; elseif ($amount <= 200000) $loanRange = '100001-200000'; else $loanRange = '200001-250000'; $customData = array_merge([ 'value' => (float)$amount, 'currency' => 'CZK', 'content_name' => 'Pujcka_' . $loanRange, 'content_category' => 'loan', 'content_type' => 'product', 'num_items' => 1, 'search_string' => $loanRange . ' Kc', 'order_id' => $eventId, 'predicted_ltv' => (int)round($amount * 0.08), ], $extraCustom); // ── event ───────────────────────────────────────────────────────────────── $sourceUrl = (isset($_SERVER['HTTPS']) ? 'https' : 'http') . "://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}"; $referrerUrl = $_SERVER['HTTP_REFERER'] ?? ''; $event = [ 'event_name' => $eventName, 'event_time' => time(), 'event_id' => $eventId, 'action_source' => 'website', 'event_source_url' => $sourceUrl, 'user_data' => $userData, 'custom_data' => $customData, ]; if (!empty($referrerUrl)) $event['referrer_url'] = $referrerUrl; // ── ROBUSTNÍ RETRY MECHANISMUS (3× s backoffem 300ms / 600ms) ───────────── $maxRetries = 3; $attempt = 0; $response = ''; $httpCode = 0; $curlError = ''; do { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(['data' => [$event]])); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 6); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $curlError = curl_error($ch); curl_close($ch); if ($httpCode >= 200 && $httpCode < 300) break; $attempt++; if ($attempt < $maxRetries) usleep($attempt * 300000); // 300ms, 600ms } while ($attempt < $maxRetries); // Záložní log při trvalém selhání if (!($httpCode >= 200 && $httpCode < 300)) { error_log(date('[Y-m-d H:i:s]') . " CAPI_FAIL event={$eventName} id={$eventId} http={$httpCode} err={$curlError}\n", 3, __DIR__ . '/capi_errors.log'); } return [ 'code' => $httpCode, 'resp' => $response, 'error' => $curlError, 'attempts' => $attempt + 1, 'event_name' => $eventName, ]; } // --- FUNKCE PRO PŘESNÉ SKLOŇOVÁNÍ ČESKÝCH JMEN DO 5. PÁDU (OSLOVENÍ) --- function getWordVocative($name) { $name = mb_convert_case(trim($name), MB_CASE_TITLE, "UTF-8"); $part = mb_strtolower($name, 'UTF-8'); $exceptions = [ 'karel' => 'Karle', 'pavel' => 'Pavle', 'havel' => 'Havle', 'daniel' => 'Danieli', 'michael' => 'Michaeli', 'přemysl' => 'Přemysle', 'josef' => 'Josefe', 'jakub' => 'Jakube', 'filip' => 'Filipe', 'david' => 'Davide', 'tomas' => 'Tomáši', 'lukas' => 'Lukáši', 'martin' => 'Martine', 'jan' => 'Jane', 'petr' => 'Petře', 'jiří' => 'Jiří', 'ondřej' => 'Ondřeji', 'matěj' => 'Matěji', 'štěpán' => 'Štěpáne', 'vojtěch' => 'Vojtěchu', 'václav' => 'Václave', 'michal' => 'Michale', 'radek' => 'Radku', 'zdeněk' => 'Zdeňku', 'marek' => 'Marku', 'stanislav' => 'Stanislave', 'jaroslav' => 'Jaroslave', 'milan' => 'Milane', 'antonín' => 'Antoníne', 'františek' => 'Františku', 'lukáš' => 'Lukáši', 'tomáš' => 'Tomáši', 'ivo' => 'Ivo', 'eva' => 'Evo', 'jana' => 'Jano', 'hana' => 'Hano', 'anna' => 'Anno', 'lenka' => 'Lenko', 'kristýna' => 'Kristýno', 'tereza' => 'Terezo', 'lucie' => 'Lucie', 'marie' => 'Marie', 'petra' => 'Petro', 'kateřina' => 'Kateřino', 'veronika' => 'Veroniko' ]; if (isset($exceptions[$part])) return $exceptions[$part]; $len = mb_strlen($part, 'UTF-8'); if ($len <= 2) return $name; $last1 = mb_substr($part, -1, 1, 'UTF-8'); $last2 = mb_substr($part, -2, 2, 'UTF-8'); $vowels = ['a','e','i','o','u','y','á','é','í','ó','ú','ů','ý']; if ($last1 === 'a') return mb_substr($name, 0, -1, 'UTF-8') . 'o'; if (in_array($last1, ['e', 'i', 'í', 'o', 'u', 'y', 'ý'])) return $name; if ($last2 === 'ek') return mb_substr($name, 0, -2, 'UTF-8') . 'ku'; if ($last2 === 'ěk') return mb_substr($name, 0, -2, 'UTF-8') . 'ňku'; if ($last2 === 'ec') return mb_substr($name, 0, -2, 'UTF-8') . 'če'; if (in_array($last1, ['š', 'ž', 'č', 'ř', 'c', 'j', 'ň', 's', 'x'])) return $name . 'i'; if ($last1 === 'r') { $beforeR = mb_substr($part, -2, 1, 'UTF-8'); if (in_array($beforeR, $vowels)) return $name . 'e'; return $name . 'ře'; } if (in_array($last1, ['k', 'h', 'g']) || $last2 === 'ch') return $name . 'u'; return $name . 'e'; } function getCzechVocative($fullName) { $words = explode(' ', trim($fullName)); $vocativeWords = []; foreach ($words as $word) { if (empty($word)) continue; $vocativeWords[] = getWordVocative($word); } $result = implode(' ', $vocativeWords); return $result ?: $fullName; } // ============================================================ // --- 🛡️ ANTI-BOT OCHRANA - VŠECHNY FUNKCE --- // ============================================================ /** * 1) GMAIL DOT TRICK NORMALIZACE * Gmail ignoruje tečky v local části: r.am.on.a.do.865@gmail.com = ramonado865@gmail.com * Také odstraňuje +aliasy (jmeno+bot@gmail.com = jmeno@gmail.com) */ function normalizeEmail($email) { $email = strtolower(trim($email)); if (!strpos($email, '@')) return $email; list($local, $domain) = explode('@', $email, 2); $gmailDomains = ['gmail.com', 'googlemail.com']; if (in_array($domain, $gmailDomains)) { $local = explode('+', $local)[0]; // Odstraní +alias $local = str_replace('.', '', $local); // Odstraní tečky } return $local . '@' . $domain; } /** * 2) DETEKCE PODEZŘELÝCH BOT EMAILŮ * Skóre >= 5 = bot. Vrací pole ['suspicious' => bool, 'score' => int, 'reason' => string] */ function analyzeEmailSuspicion($email) { list($local, $domain) = explode('@', strtolower($email), 2); $score = 0; $reasons = []; // Příliš mnoho teček v local části (r.a.m.o.n.a.d.o.865 = 8 teček) $dotCount = substr_count($local, '.'); if ($dotCount >= 5) { $score += 4; $reasons[] = "Extrémní počet teček ($dotCount) v emailu"; } elseif ($dotCount >= 3) { $score += 2; $reasons[] = "Mnoho teček ($dotCount) v emailu"; } // Mnoho jednopísmenných/dvoopísmenných segmentů (r.am.on.a = bot pattern) $segments = explode('.', $local); $shortSegments = count(array_filter($segments, function($s) { return mb_strlen($s) <= 2; })); if ($shortSegments >= 4) { $score += 4; $reasons[] = "Bot pattern: $shortSegments krátkých segmentů oddělených tečkami"; } elseif ($shortSegments >= 2) { $score += 1; } // Čísla na konci emailu za jménem (jmeno123456@...) if (preg_match('/[a-z]\d{3,}$/', $local)) { $score += 2; $reasons[] = "Čísla za jménem (klasický bot pattern)"; } // Vysoký poměr číslic v local části $digitCount = preg_match_all('/\d/', $local, $m); $localLen = mb_strlen($local); if ($localLen > 0 && ($digitCount / $localLen) > 0.4) { $score += 2; $reasons[] = "Vysoký poměr číslic v emailu"; } // Příliš krátké nebo příliš segmentované jméno $cleanLocal = str_replace('.', '', $local); if (mb_strlen($cleanLocal) < 3) { $score += 3; $reasons[] = "Příliš krátký local part emailu"; } return [ 'suspicious' => $score >= 5, 'score' => $score, 'reason' => implode('; ', $reasons) ?: 'OK' ]; } /** * 3) IP RATE LIMITING * Maximálně 3 registrace z jedné IP za hodinu, pak blokace. */ function checkIpRateLimit($ip) { $file = __DIR__ . '/rate_limit.json'; $now = time(); $data = []; if (file_exists($file)) { $decoded = json_decode(file_get_contents($file), true); if (is_array($decoded)) $data = $decoded; } // Vyčistit staré záznamy (starší než 1 hodina) foreach ($data as $storedIp => $info) { if (($now - $info['last']) > 3600) unset($data[$storedIp]); } $MAX_PER_HOUR = 3; $isBlocked = false; if (isset($data[$ip])) { if ($data[$ip]['count'] >= $MAX_PER_HOUR) { $isBlocked = true; } else { $data[$ip]['count']++; $data[$ip]['last'] = $now; } } else { $data[$ip] = ['count' => 1, 'first' => $now, 'last' => $now]; } file_put_contents($file, json_encode($data), LOCK_EX); return $isBlocked; } /** * 4) VALIDACE JMÉNA * Jméno musí obsahovat alespoň dvě slova a vypadat jako skutečné jméno. */ function isNameValid($name) { $name = trim($name); if (mb_strlen($name) < 4) return false; // Musí obsahovat alespoň jedno písmeno (ne jen čísla/znaky) if (!preg_match('/\p{L}/u', $name)) return false; // Podezřelý pattern - příliš mnoho číslic v jméně $digitRatio = preg_match_all('/\d/', $name) / mb_strlen($name); if ($digitRatio > 0.3) return false; return true; } // ============================================================ // --- BACKEND LOGIKA --- if (isset($_GET['action'])) { ob_end_clean(); if ($_GET['action'] != 'send_reminder_async' && $_GET['action'] != 'cron_5min' && $_GET['action'] != 'cron_friday') { header('Content-Type: application/json'); } $blacklist = ['@uoou.gov.cz','@konecta-group.com','@homecredit.cz','@csas.cz','@csob.cz','@srovnejto.cz','@ehub.cz','@leadgenia.com','@usetreno.cz','@comdata-group.com','@uoou.cz','@elephant-orchestra.com','@elephantorchestra.com','@fs.mfcr.cz','@pcr.cz','@praha.eu','@institutpraha.cz','@mvcr.cz','@devaza.id','@nazivnost.cz','@creditkasa.com','@mail.ru','@vlada.cz','@csu.cz','@czso.cz','@financnisprava.cz','@mpsv.cz','@mzcr.cz','@policie.cz','@hasici.cz','@hasiči.cz','@ministerstvo.cz','@justice.cz','@msmt.cz','@ministerstvo-vnitra.cz','@spravy.cz','@brno.cz','@plzen.cz','@ostrava.cz','@pardubice.cz','@kr-praha.cz','@kr-stredocesky.cz','@kr-jihocesky.cz','@kr-plzensky.cz','@kr-karlovarsky.cz','@kr-ustecky.cz','@kr-liberecky.cz','@kr-kralovehradecky.cz','@kr-pardubicky.cz','@kr-vysocina.cz','@kr-jihomoravsky.cz','@kr-olomoucky.cz','@kr-zlinsky.cz','@kr-moravskoslezsky.cz','@kraj-vysocina.cz','@uradprace.cz','@ceskatelevize.cz','@czechpoint.cz','@ejustice.cz','@ceskarepublika.cz','@obhajce.cz','@uvcr.cz','@spravedlnost.cz','@eportal.cz','@state.gov.cz','@rejstrik.cz','@pojistovna.cz','@pojistovny.cz','@organyverejnemoci.cz','@zaplo.cz','@smscredit.cz','@fes.cz','@faircredit.cz','@czpujcka.cz','@czechcredit.cz','@pohotovapujcka.cz','@zaploonline.cz','@zonky.cz','@airbank.cz','@moneta.cz','@raiffeisen.cz','@equabank.cz','@modrapujcka.cz','@provident.cz','@crediton.cz','@creditstar.cz','@fajpujcka.cz','@pujckomat.cz','@pujcky.cz','@superpujcka.cz','@hellobank.cz','@tapas.cz','@coolpujcka.cz','@www.pujcka.cz','@easycredit.cz','@supermoney.cz','@zaplo.sk','@credium.cz','@crediportal.cz','@twisto.cz','@klarna.com','@splatkovyprodej.cz','@kupujonline.cz','@kancelar-prezidenta.cz','@senat.cz','@psp.cz','@strakovka.cz','@poslaneckasluzba.cz','@bezpecnostnipolice.cz','@ministerstvo-zdravotnictvi.cz','@ministerstvo-prace.cz','@ministerstvo-obrany.cz','@ministerstvo-dopravy.cz','@ministerstvo-kultury.cz','@ministerstvo-zemedelstvi.cz','@ministerstvo-financi.cz','@generalisimulace.cz','@okresniurad.cz','@spravniurad.cz','@obecniurad.cz','@statnipokladna.cz','@financniurad.cz','@statnisprava.cz','@cizinecka-policie.cz','@pracovniinspekce.cz','@veterinarniinspekce.cz','@hygienik.cz','@vysetrovaciurad.cz','@zdravotnickyurad.cz','@statni-institut.cz','@zivotniprostrredi.cz','@statniinspekce.cz','@dopravniurad.cz','@ministerstvo-skolstvi.cz','@krajskyurad.cz','@krajskasprava.cz','@prahasprava.cz','@cislohasici.cz','@vysetrovacipolicie.cz','@stanicepcr.cz','@prokuratura.cz','@odborbezpecnosti.cz','@hospodarskapolicie.cz','@celnicisprava.cz','@statniprotidrogova.cz','@ministerstvo-justice.cz','@verejnasprava.cz']; // --- 🕒 CRON: KAŽDÝCH 5 MINUT (První připomínka po opuštění) --- if ($_GET['action'] == 'cron_5min') { $abandonedDbFile = __DIR__ . '/abandoned_db.json'; $leadsDbFile = __DIR__ . '/leads_db.json'; if (file_exists($abandonedDbFile)) { $abandoned = json_decode(file_get_contents($abandonedDbFile), true); $completed = file_exists($leadsDbFile) ? json_decode(file_get_contents($leadsDbFile), true) : []; $completedEmails = array_column($completed, 'email'); $now = time(); $updated = false; foreach ($abandoned as &$a) { // Zkontroluje: 1. Uplynulo 5 minut (300 vteřin)? 2. Ještě nedostal 5-minutový e-mail? if (isset($a['time']) && ($now - $a['time'] >= 300) && empty($a['reminded_5min'])) { // NEJDŮLEŽITĚJŠÍ KROK: Je už e-mail v hlavní databázi dokončených leads_db.json? if (!in_array($a['email'], $completedEmails)) { $firstName = (count(explode(' ', $a['name'])) > 0) ? explode(' ', $a['name'])[0] : $a['name']; $vocative = getCzechVocative($firstName); $formattedAmount = number_format($a['amount'], 0, ',', ' '); $resumeLink = 'https://usetreme.eu/loan-test.php?autosubmit=1&amt=' . urlencode($a['amount']) . '&name=' . urlencode($a['name']) . '&email=' . urlencode($a['email']); $email_style = "max-width:600px;margin:20px auto;font-family:Arial,sans-serif;color:#333;line-height:1.6;border:1px solid #ddd;border-radius:12px;overflow:hidden;"; $h_rem = "Dokončete žádost o $formattedAmount Kč"; $p_rem = "Dobrý den, $vocative,
před malou chvílí jste nedokončili svou žádost o půjčku ve výši
$formattedAmount Kč . Vaše data jsou u nás uložena a limit máte předschválený.
Stačí kliknout na tlačítko níže a naše systémy Vaši žádost automaticky připraví k dokončení:"; $html_rem = "
"; sendSecureMail($a['email'], "Vaše žádost o $formattedAmount Kč čeká na dokončení", $html_rem, $h_rem); } // I když to dokončil, označíme ho jako reminded, ať už ho CRON neřeší $a['reminded_5min'] = true; $updated = true; } } // Uložíme zapsaný příznak (reminded_5min) zpět do JSON if ($updated) { file_put_contents($abandonedDbFile, json_encode($abandoned, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX); } } echo json_encode(['status' => 'cron_5min_executed']); exit; } // --- 📅 CRON: PÁTEK V 16:00 (Poslední výzva) --- if ($_GET['action'] == 'cron_friday') { $abandonedDbFile = __DIR__ . '/abandoned_db.json'; $leadsDbFile = __DIR__ . '/leads_db.json'; if (file_exists($abandonedDbFile)) { $abandoned = json_decode(file_get_contents($abandonedDbFile), true); $completed = file_exists($leadsDbFile) ? json_decode(file_get_contents($leadsDbFile), true) : []; $completedEmails = array_column($completed, 'email'); $convertedCount = 0; $abandonedCount = count($abandoned); $sentReminders = 0; foreach ($abandoned as $a) { // Kontrola: Nedokončil žádost mezitím (ani po tom 5-minutovém emailu)? if (!in_array($a['email'], $completedEmails)) { $firstName = (count(explode(' ', $a['name'])) > 0) ? explode(' ', $a['name'])[0] : $a['name']; $vocative = getCzechVocative($firstName); $formattedAmount = number_format($a['amount'], 0, ',', ' '); $resumeLink = 'https://usetreme.eu/loan-test.php?autosubmit=1&amt=' . urlencode($a['amount']) . '&name=' . urlencode($a['name']) . '&email=' . urlencode($a['email']); $email_style = "max-width:600px;margin:20px auto;font-family:Arial,sans-serif;color:#333;line-height:1.6;border:1px solid #ddd;border-radius:12px;overflow:hidden;"; $h_rem = "Poslední šance: Vaše žádost o $formattedAmount Kč bude stornována"; $p_rem = "Dobrý den, $vocative,
dnes odpoledne odesíláme poslední víkendové výzvy. Vaše rezervovaná žádost o
$formattedAmount Kč u nás leží nedokončená a pokud nepotvrdíte zájem, budeme ji muset trvale stornovat.
Stačí jediné kliknutí na tlačítko níže a žádost můžete obratem dokončit."; $html_rem = "
"; sendSecureMail($a['email'], "URGENTNÍ: Vaše žádost o $formattedAmount Kč (Předvíkendové storno)", $html_rem, $h_rem); $sentReminders++; } else { $convertedCount++; } } // Odeslání reportu adminovi $reportDay = date('l d.m.Y H:i:s'); $admin_html = "
Páteční report rozesílky (nedokončené žádosti) Čas spuštění: $reportDay
Celkový počet zanechaných žádostí: $abandonedCount
Z toho přeměněno na lead (žádost dokončena): $convertedCount
Zbylo opuštěných (odeslána výzva): $sentReminders
"; sendSecureMail('info@usetreme.eu', "📊 Report: Páteční rozesílka opuštěných žádostí", $admin_html, strip_tags($admin_html), "Systém"); // SMAZÁNÍ DATABÁZE PO PÁTEČNÍM ODESLÁNÍ unlink($abandonedDbFile); } echo json_encode(['status' => 'cron_friday_executed']); exit; } // --- ENDPOINT PRO ZACHYCENÍ OPUŠTĚNÉHO FORMULÁŘE (ABANDONMENT) --- // Volá se na pozadí javascriptem hned, jak klient začne psát e-mail if ($_GET['action'] == 'save_abandoned') { $amount = isset($_POST['amount']) ? intval(str_replace(' ', '', $_POST['amount'])) : 0; $nameRaw = isset($_POST['name']) ? trim(strip_tags($_POST['name'])) : ''; $email = isset($_POST['email']) ? trim(strtolower($_POST['email'])) : ''; if (empty($email) || empty($amount) || empty($nameRaw)) exit; $isBlacklisted = false; foreach ($blacklist as $bad) { if (strpos($email, $bad) !== false) { $isBlacklisted = true; break; } } if ($isBlacklisted) exit; // Také odmítnout podezřelé bot emaily v abandon trackingu $abandonAnalysis = analyzeEmailSuspicion($email); if ($abandonAnalysis['suspicious']) exit; // Uložení do DOČASNÉ databáze $abandonedDbFile = __DIR__ . '/abandoned_db.json'; $abandoned = file_exists($abandonedDbFile) ? json_decode(file_get_contents($abandonedDbFile), true) : []; $found = false; foreach ($abandoned as $a) { if ($a['email'] === $email) { $found = true; break; } } if (!$found) { // Přidáno 'reminded_5min' pro logiku 5 minutového Cronu $abandoned[] = ['email' => $email, 'name' => $nameRaw, 'amount' => $amount, 'time' => time(), 'reminded_5min' => false]; file_put_contents($abandonedDbFile, json_encode($abandoned, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX); } echo json_encode(['status' => 'tracked']); exit; } $amount = isset($_POST['amount']) ? intval(str_replace(' ', '', $_POST['amount'])) : 0; $nameRaw = isset($_POST['name']) ? trim(strip_tags($_POST['name'])) : ''; $email = isset($_POST['email']) ? trim(strtolower($_POST['email'])) : ''; $eventId = isset($_POST['event_id']) ? $_POST['event_id'] : 'lead_' . time() . '_' . uniqid(); $fbp = isset($_POST['fbp']) ? $_POST['fbp'] : (isset($_COOKIE['_fbp']) ? $_COOKIE['_fbp'] : ''); $fbc = isset($_POST['fbc']) ? $_POST['fbc'] : (isset($_COOKIE['_fbc']) ? $_COOKIE['_fbc'] : ''); $nameParts = explode(' ', $nameRaw); $firstName = (count($nameParts) > 0) ? $nameParts[0] : $nameRaw; $vocativeName = getCzechVocative($firstName); $isBlacklisted = false; foreach ($blacklist as $bad) { if (strpos($email, $bad) !== false) { $isBlacklisted = true; break; } } // --- ENDPOINT PRO CAPI DEDUPLIKACI DÍLČÍCH KROKŮ --- if ($_GET['action'] == 'track_custom' && !$isBlacklisted) { $customEvent = isset($_POST['event_name']) ? $_POST['event_name'] : 'ViewContent'; $phone = isset($_POST['phone']) ? trim($_POST['phone']) : ''; $extra = []; foreach (['utm_source','utm_medium','utm_campaign','utm_content','utm_term'] as $uk) { if (!empty($_POST[$uk])) $extra[$uk] = trim($_POST[$uk]); } $capiResult = sendMetaCAPI($email, $firstName, $amount, $eventId, $fbp, $fbc, $customEvent, $phone, '', $extra); $fbData = json_decode($capiResult['resp'], true); $isSuccess = isset($fbData['events_received']) && $fbData['events_received'] > 0; triggerCapiAlarm($isSuccess, $capiResult['error'] ?: $capiResult['resp'], $capiResult['code']); echo json_encode(['status' => 'sent', 'event' => $customEvent]); exit; } if ($_GET['action'] == 'process') { // --- 🛡️ OCHRANA 1: Honeypot (skrytý spam field) --- if (!empty($_POST['website_url_hp'])) { echo json_encode(['status' => 'error', 'message' => 'Byl detekován automatizovaný požadavek (spam bot).']); exit; } // --- 🛡️ OCHRANA 2: Timing check - příliš rychlé odeslání = bot --- $loadedAt = intval($_POST['form_loaded_at'] ?? 0); if ($loadedAt > 0) { $elapsedMs = (time() * 1000) - $loadedAt; if ($elapsedMs < 2500) { // Méně než 2.5 sekundy = bot echo json_encode(['status' => 'error', 'message' => 'Zkontrolujte prosím zadané údaje.']); exit; } } // --- 🛡️ OCHRANA 3: Validace e-mailu --- if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo json_encode(['status' => 'error', 'message' => 'Zkontrolujte prosím zadané údaje. E-mail není platný.']); exit; } // --- 🛡️ OCHRANA 4: Analýza podezřelého emailu (Gmail dot trick + bot patterns) --- $emailAnalysis = analyzeEmailSuspicion($email); if ($emailAnalysis['suspicious']) { // Tichá blokace - přesměrujeme jako by bylo OK, ale nereálný lead nezpracujeme // Logujeme pro admin přehled $botLogFile = __DIR__ . '/bot_log.json'; $botLogs = file_exists($botLogFile) ? json_decode(file_get_contents($botLogFile), true) : []; $botLogs[] = ['time' => date('Y-m-d H:i:s'), 'email' => $email, 'ip' => $_SERVER['REMOTE_ADDR'] ?? '', 'score' => $emailAnalysis['score'], 'reason' => $emailAnalysis['reason']]; if (count($botLogs) > 500) array_shift($botLogs); // Limit logu file_put_contents($botLogFile, json_encode($botLogs, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX); // Přesměrujeme bota na "naši" stránku (nevíme o blokaci) echo json_encode(['status' => 'blocked', 'redirectUrl' => 'https://www.usetreme.eu/nabidka-pujcek-pro-dnesni-den']); exit; } // --- 🛡️ OCHRANA 5: IP Rate Limiting (max 3 registrace za hodinu) --- $clientIp = $_SERVER['REMOTE_ADDR'] ?? ''; if (checkIpRateLimit($clientIp)) { echo json_encode(['status' => 'error', 'message' => 'Příliš mnoho pokusů. Zkuste to prosím za hodinu.']); exit; } // --- 🛡️ OCHRANA 6: Validace jména --- if (!isNameValid($nameRaw)) { echo json_encode(['status' => 'error', 'message' => 'Zadejte prosím své skutečné jméno a příjmení.']); exit; } $emailDomain = substr(strrchr($email, "@"), 1); $disposableDomains = ['tempmail.com', '10minutemail.com', 'guerrillamail.com', 'mailinator.com', 'yopmail.com', 'trashmail.com', 'getnada.com', 'dispostable.com', 'maildrop.cc', 'throwawaymail.com', 'temp-mail.org', 'fakeinbox.com', 'sharklasers.com', 'mohmal.com', 'nada.ltd', 'tempmailaddress.com', 'spamgourmet.com', 'spam4.me', 'grr.la', 'filzmail.com', 'discard.email', 'trashmail.at', 'getairmail.com', 'spamhere.net', 'mailexpire.com', 'spamex.com', 'binkmail.com', 'bobmail.info', 'speed.1s.fr', 'tempinbox.com', 'spamfree24.org', 'deadaddress.com', 'spamgob.com', 'e4ward.com', 'mailnull.com', 'spamhole.com', 'spamify.com', 'spaminator.de', 'spamkill.info']; if (in_array($emailDomain, $disposableDomains)) { echo json_encode(['status' => 'error', 'message' => 'Použití jednorázových e-mailů není povoleno. Zadejte prosím svůj skutečný e-mail.']); exit; } if ($emailDomain && !checkdnsrr($emailDomain, 'MX')) { echo json_encode(['status' => 'error', 'message' => 'Vaše e-mailová doména neexistuje nebo nemůže přijímat poštu. Zkontrolujte překlepy.']); exit; } if ($amount < 500 || $amount > 250000 || empty($nameRaw) || empty($email)) { echo json_encode(['status' => 'error', 'message' => 'Zkontrolujte prosím zadané údaje. Částka je mimo limit (500 - 250 000 Kč).']); exit; } $newsletter_log = "Zápis neproběhl (Blacklist)"; $capi_log = "CAPI neodesláno (Blacklist)"; $ai_advice = "Lead byl zablokován blacklistem. Žádná akce v Metě nebyla provedena."; $isDuplicate = false; $capi_code = 0; $isLeadSuccess = false; $capi_attempts = 0; if (!$isBlacklisted) { // Sbíráme UTM parametry z POST (JS je posílá z localStorage při odeslání formuláře) $capiExtra = []; foreach (['utm_source','utm_medium','utm_campaign','utm_content','utm_term'] as $uk) { if (!empty($_POST[$uk])) $capiExtra[$uk] = trim($_POST[$uk]); } $phone = isset($_POST['phone']) ? trim($_POST['phone']) : ''; $meta_res = sendMetaCAPI($email, $firstName, $amount, $eventId, $fbp, $fbc, 'Lead', $phone, '', $capiExtra); $capi_code = $meta_res['code']; $capi_body = $meta_res['resp']; $capi_error = $meta_res['error']; $capi_attempts = $meta_res['attempts']; $fbData = json_decode($capi_body, true); $isLeadSuccess = isset($fbData['events_received']) && $fbData['events_received'] > 0; triggerCapiAlarm($isLeadSuccess, $capi_error ?: $capi_body, $capi_code); $capi_log = "HTTP: $capi_code | Pokusů: $capi_attempts | Error: $capi_error | Response: $capi_body"; if ($capi_code >= 200 && $capi_code < 300 && $isLeadSuccess) { $ai_advice = "
✅ Vše v pořádku. Meta potvrdila příjem události. Díky Event ID: $eventId dojde k automatické deduplikaci s Pixelem v prohlížeči. Data jsou čistá."; } elseif ($capi_code === 400) { $ai_advice = "
❌ Chyba v požadavku (400). Meta požadavek odmítla. Zkontrolujte 'Response' v logu níže pro detaily."; } else { $ai_advice = "
⚠️ Neznámý stav ($capi_code). Meta odpověděla neočekávaným kódem nebo curl selhal. Zkontrolujte logy."; } $client_key = 'bab19d679a7b4b0f2dff8cbadee5d4f44e3f4f23'; $client_secret = '09bca4bf734ede9b8744f590e72413c25555b9e3'; $tnp_url = "https://www.usetreme.eu/wp-json/newsletter/v2/subscribers"; $tnp_data = ['email' => $email, 'first_name' => $firstName, 'status' => 'confirmed', 'lists' => [1], 'referrer' => 'pujcka_form']; $auth = base64_encode($client_key . ':' . $client_secret); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tnp_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($tnp_data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 15); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json', 'Authorization: Basic ' . $auth, 'X-Usetreme-Bypass: 99887766']); $tnp_response = curl_exec($ch); $http_tnp = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $newsletter_log = "HTTP: $http_tnp | Res: " . (json_decode($tnp_response, true)['message'] ?? 'OK'); // ============================================================ // 🔒 ATOMICKÝ ZÁPIS S FILE LOCK – prevence race condition // Čtení + kontrola + zápis probíhá uvnitř jednoho exkluzivního zámku. // Bez toho by 2 souběžné požadavky oba prošly duplicate check dříve, // než jeden stihl zapsat → lead se uložil 2× a admin dostal 2 maily. // ============================================================ $jsonDbFile = __DIR__ . '/leads_db.json'; $lockFile = __DIR__ . '/leads_db.lock'; $normalizedEmail = normalizeEmail($email); $lockHandle = fopen($lockFile, 'c'); if ($lockHandle && flock($lockHandle, LOCK_EX)) { // Čteme UVNITŘ zámku – garantujeme aktuální stav souboru $currentLeads = []; if (file_exists($jsonDbFile)) { $decoded = json_decode(file_get_contents($jsonDbFile), true); if (is_array($decoded)) $currentLeads = $decoded; } foreach ($currentLeads as $lead) { if (isset($lead['email']) && ( $lead['email'] === $email || normalizeEmail($lead['email']) === $normalizedEmail )) { $isDuplicate = true; break; } } if (!$isDuplicate) { $currentLeads[] = [ "email" => $email, "email_normalized" => $normalizedEmail, "name" => $nameRaw, "amount" => $amount, "time" => time(), "event_id" => $eventId, "source" => "Fb ADS REKLAMA", "fbp" => $fbp, "fbc" => $fbc ]; file_put_contents($jsonDbFile, json_encode($currentLeads, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX); } else { $newsletter_log .= " | Zápis do JSON přeskočen (Duplicita)"; } flock($lockHandle, LOCK_UN); fclose($lockHandle); } else { // Fallback: pokud se lock nepodaří, aspoň zkusíme běžný zápis $currentLeads = file_exists($jsonDbFile) ? json_decode(file_get_contents($jsonDbFile), true) : []; if (!is_array($currentLeads)) $currentLeads = []; foreach ($currentLeads as $lead) { if (isset($lead['email']) && ( $lead['email'] === $email || normalizeEmail($lead['email']) === $normalizedEmail )) { $isDuplicate = true; break; } } if (!$isDuplicate) { $currentLeads[] = ["email"=>$email,"email_normalized"=>$normalizedEmail,"name"=>$nameRaw,"amount"=>$amount,"time"=>time(),"event_id"=>$eventId,"source"=>"Fb ADS REKLAMA","fbp"=>$fbp,"fbc"=>$fbc]; file_put_contents($jsonDbFile, json_encode($currentLeads, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX); } } } $redirectLink = 'https://leadgenia3.com/link/VRifqRHeS2?affS1=vlastni-kaskada'; if ($amount > 10000 && $amount <= 15000) $redirectLink = 'https://leadgenia3.com/link/VRifqRHeS2?affS1=vlastn%C3%AD+kaskada'; elseif ($amount > 15000 && $amount <= 20000) $redirectLink = 'https://leadgenia3.com/leadgenia/9755f816-1949-45ce-8219-7872fe0b439e/usetreme?affS1=vlastni-kaskada'; elseif ($amount > 20000 && $amount <= 100000) $redirectLink = 'https://leadgenia3.com/link/jw29QS0Hfu?affS1=vlastni-kaskada'; elseif ($amount > 100000 && $amount <= 200000) $redirectLink = 'https://leadgenia3.com/leadgenia/70cfb09c-de02-49f4-8c04-bd4f371c10e9/usetreme?affS1=vlastni-kaskada'; elseif ($amount > 200000) $redirectLink = 'https://leadgenia3.com/leadgenia/a552cd05-f834-4516-abec-72a179f00d9d/usetreme'; $admin_subject = $isBlacklisted ? "⚠️ [BLACKLIST] LEAD: $nameRaw" : "⚡ LEAD: $nameRaw"; if ($isDuplicate) $admin_subject = "DUPLICITA neuložen ! (⚡ LEAD: $nameRaw)"; $disp_fbp = !empty($fbp) ? $fbp : '
Nenalezeno (Není z Meta/Chybí cookies) '; $disp_fbc = !empty($fbc) ? $fbc : '
Nenalezeno (Není z Meta prokliku) '; $hashedEmailAdmin = hash('sha256', strtolower(trim($email))); $dup_text = $isDuplicate ? "
ANO - NEULOŽENO DO JSON " : "
NE - Uloženo v pořádku "; // Zpracování diagnostiky eventů do e-mailu $leadStatusHtml = ($isLeadSuccess) ? "
✅ Přijato (HTTP $capi_code) na $capi_attempts. pokus" : "
❌ Selhalo (HTTP $capi_code) na $capi_attempts. pokus"; $event_diagnostics = "
Event (Událost) Status odeslání do Mety Kriticita při selhání PageView (Návštěva) Odesláno asynchronně Střední (Nutné pro remarketing na webu) Step1_ZadaniCastky (Krok 1) Odesláno asynchronně (AJAX) Střední (Sbírá chování uživatele v trychtýři) Step2_ZadaniKontaktu (Krok 2) Odesláno asynchronně (AJAX) Vysoká (Zde získáváme e-mail pro párování!) Lead (Dokončená žádost) $leadStatusHtml KRYTICKÉ! (Ostrá konverze ovlivňující cenu reklam a CPA algoritmus)
"; $admin_body = "
Nová žádost o půjčku Jméno: $nameRaw E-mail: $email Částka: $amount Kč Status databáze: $dup_text
📊 Meta Tracking Report: Zdroj: Fb ADS REKLAMA Event ID (Deduplikace): $eventId FBP (Browser ID): $disp_fbp FBC (Click ID): $disp_fbc External ID (SHA-256): $hashedEmailAdmin
Systémové Logy CAPI: Facebook Meta CAPI: $capi_log
🤖 AI Admin Advice & Diagnostika událostí: $ai_advice $event_diagnostics
🔍 API v2 Newsletter Log: $newsletter_log
"; // ============================================================ // 🔔 DEDUPLICATION ADMIN NOTIFIKACÍ // Admin dostane notifikaci o leadu MAXIMÁLNĚ 1×. // Zabrání to zahlcení i v případě, že duplicate check výjimečně // propustí souběžný požadavek (defense-in-depth). // ============================================================ $notifiedFile = __DIR__ . '/admin_notified.json'; $notifiedLockFile = __DIR__ . '/admin_notified.lock'; $adminAlreadyNotified = false; $notifLock = fopen($notifiedLockFile, 'c'); if ($notifLock && flock($notifLock, LOCK_EX)) { $notifiedLeads = []; if (file_exists($notifiedFile)) { $dec = json_decode(file_get_contents($notifiedFile), true); if (is_array($dec)) $notifiedLeads = $dec; } // Porovnáváme normalizovaný email (odolnost vůči gmail dot triku) $notifiedNormalized = array_map('normalizeEmail', $notifiedLeads); if (in_array($normalizedEmail, $notifiedNormalized, true)) { $adminAlreadyNotified = true; } else { // Zaznamenáme PŘED odesláním (i kdyby mail selhal, nechceme spam) $notifiedLeads[] = $email; // Udržujeme max 5000 záznamů (ochrana před neomezeným růstem souboru) if (count($notifiedLeads) > 5000) { $notifiedLeads = array_slice($notifiedLeads, -5000); } file_put_contents($notifiedFile, json_encode($notifiedLeads, JSON_UNESCAPED_UNICODE), LOCK_EX); } flock($notifLock, LOCK_UN); fclose($notifLock); } if (!$adminAlreadyNotified) { sendSecureMail("lead@usetreme.eu", $admin_subject, $admin_body, "Lead: $nameRaw"); } // Duplicitní přihlášení – tiché ignorování (admin NENÍ notifikován) if (!$isBlacklisted) { $formattedAmount = number_format($amount, 0, ',', ' '); $fomoDate = date('d. m. Y', strtotime('+72 hours')); $fomoTime = date('H:i', strtotime('+72 hours')); $email_style = "max-width:600px;margin:20px auto;font-family:Arial,sans-serif;color:#333;line-height:1.6;border:1px solid #ddd;border-radius:12px;overflow:hidden;box-shadow:0 4px 10px rgba(0,0,0,0.1);"; $header_bar = "
Usetreme.eu "; $footer_bar = "
Tato zpráva byla odeslána na základě Vaší žádosti na webu Usetreme.eu. © " . date('Y') . " Usetreme.eu
"; $btn_style = "display:block;background:#00a86b;color:#fff;padding:18px 25px;text-decoration:none;border-radius:8px;font-weight:bold;margin-top:25px;text-align:center;font-size:18px;"; $h1 = "Skvělá zpráva, $vocativeName! Vaše půjčka byla ověřena."; $p1 = "Na základě Vaší poptávky jsme pro Vás rezervovali schválený limit ve výši
$formattedAmount Kč .
⏰
Časově omezená nabídka: Rezervace platí do
$fomoDate v $fomoTime . Po uplynutí tohoto času bude limit uvolněn pro další žadatele."; $html1 = "
"; sendSecureMail($email, "POTVRZENÍ: $vocativeName, rezervace limitu $formattedAmount Kč", $html1, $h1); // Toto necháváme – je to připomínka po jedné hodině, pokud nedoklikne affiliate (tato je bezpečná asynchronně) $async_url = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $async_url = strtok($async_url, '?') . '?action=send_reminder_async'; $ch_async = curl_init(); curl_setopt($ch_async, CURLOPT_URL, $async_url); curl_setopt($ch_async, CURLOPT_POST, true); curl_setopt($ch_async, CURLOPT_POSTFIELDS, http_build_query(['email'=>$email,'firstName'=>$firstName,'amount'=>$amount,'redirectLink'=>$redirectLink])); curl_setopt($ch_async, CURLOPT_TIMEOUT, 1); curl_setopt($ch_async, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch_async, CURLOPT_SSL_VERIFYPEER, false); curl_exec($ch_async); curl_close($ch_async); echo json_encode(['status' => 'success', 'redirectUrl' => $redirectLink, 'eventId' => $eventId]); } else { echo json_encode(['status' => 'blocked', 'redirectUrl' => 'https://www.usetreme.eu/nabidka-pujcek-pro-dnesni-den']); } exit; } if ($_GET['action'] == 'send_reminder_async') { ignore_user_abort(true); set_time_limit(0); if (function_exists('fastcgi_finish_request')) fastcgi_finish_request(); $amount = $_POST['amount'] ?? 0; $email = $_POST['email'] ?? ''; $firstName = $_POST['firstName'] ?? ''; $vocativeNameAsync = getCzechVocative($firstName); $redirectLink = $_POST['redirectLink'] ?? ''; if ($amount > 0 && !empty($email)) { sleep(3600); $formattedAmount = number_format($amount, 0, ',', ' '); $email_style = "max-width:600px;margin:20px auto;font-family:Arial,sans-serif;color:#333;line-height:1.6;border:1px solid #ddd;border-radius:12px;overflow:hidden;"; $h_rem = "Poslední krok k vyplacení $formattedAmount Kč"; $p_rem = "Dobrý den, $vocativeNameAsync,
připomínáme, že Vaše rezervace na
$formattedAmount Kč stále čeká na dokončení. Peníze mohou být na Vašem účtu ještě dnes."; $html_rem = "
"; sendSecureMail($email, "Připomínka: Vaše rezervace $formattedAmount Kč expiruje", $html_rem, $h_rem); } exit; } } ob_end_flush(); ?>
Online půjčka 5 000 – 250 000 Kč bez poplatků | Schválení ihned | Usetreme.eu
Vítejte zpět! Vaše žádost na Vás čeká — dokončete ji a získejte peníze ještě dnes. Dokončit žádost ↓ Osobní půjčka · 5 000 Kč až 250 000 Kč
Peníze na účtu dnes v – Osobní půjčka 5 000 Kč až 250 000 Kč — vyplňte žádost za 2 minuty, schválení online, bez papírování, bez nahlížení do registru. První půjčka až 40 000 Kč zcela ZDARMA!
⏱️ Peníze na účtu nejpozději: –
✓ RPSN od 4,9 %
✓ Bez poplatků
✓ Nenahlíží do registru
✓ Do 40 000 Kč ZDARMA
Jak to funguje
Peníze na účtu za 4 jednoduché kroky Zadejte požadovanou částku Vyberte kolik potřebujete — od 5 000 Kč do 250 000 Kč . Půjčka do 40 000 Kč je pro nové klienty zcela zdarma.
Vyplňte jméno a e-mail Stačí Vaše jméno a e-mailová adresa. Žádné doklady, žádné papírování — celý proces probíhá 100 % online.
Nabídka do 1–2 minut Okamžitě zpracujeme Vaši žádost a zobrazíme nejlepší dostupnou nabídku. Výsledek přijde také na Váš e-mail.
Peníze na účtu — dnes v – Po podpisu smlouvy online jsou peníze připsány do 15 minut. Žádejte teď a mějte peníze ještě dnes.
💰 Na účtu dnes v – ⏰ Podejte žádost teď — peníze na účtu
Dnes v –
Vyplnit žádost ↑ Zákazníci o nás
Co říkají naši klienti ★★★★★
Půjčila jsem si 15 000 Kč poprvé — skutečně bez úroků a poplatků. Peníze přišly do hodiny. Skvělé!
MH
Markéta H.
Praha · před 2 dny
✓ Ověřeno ★★★★★
Potřeboval jsem 80 000 Kč na opravu auta. Žádost vyplněna za 3 minuty, schválení ihned, peníze do odpoledne.
★★★★★
Velmi rychlé a jednoduché. Oceňuji, že nenahlíží do registru. Doporučuji všem, kdo potřebují rychlou pomoc.
LP
Lucie P.
Ostrava · před týdnem
✓ Ověřeno 🎁 Do 40 000 Kč první půjčka zcela ZDARMA
Žádejte teď a mějte peníze na účtu ještě dnes v – . Žádné poplatky, žádné úroky pro nové klienty.
PODAT ŽÁDOST ZDARMA → Nezávazné · Bez registru · 100 % online · Schválení do 15 min
🔄 Opakovaná návštěva
Jste tu znovu — vaše nabídka ještě platí!
Schválení čeká jen na vás. Vyplňte žádost za 2 minuty a mějte peníze na účtu ještě dnes v – . Do 40 000 Kč první půjčka zcela zdarma.
🎁 Dokončit žádost a získat peníze → Nezávazné · Bez registru · Schválení do 15 min
12
Komunikujeme se systémy pro schválení Vašeho limitu… Šifrované spojení 🔒