'safe_page', 'log_id' => $log_id, 'logs' => $logs, 'needs_secondary' => false, ]; } /** * @param array $logs */ private static function fpOrRiskBranch(array $logs, $v_info, $config_name) { if (AUTO_BLACK == 'ON') { $times = howmanytimesbyip($v_info->v_ip); if ($times + 1 >= AUTO_BLACK_TIMES) { write_black_list($v_info->v_ip); } } if (!isset($_SESSION['visit_to_3'])) { $_SESSION['visit_to_3'] = '1'; } if (RiskSecondaryGate::isEnabled()) { $cached = RiskSecondaryCache::get(ClientIpResolver::resolve()); if ($cached !== null) { return self::fpFromRiskCache($logs, $v_info, $config_name, $cached); } } if (($_SESSION['visit_to_3'] ?? '1') != '3' && RiskSecondaryGate::isEnabled()) { $logs['result'] = 'wait'; $logs['reason'] = self::mergeReason($logs['reason'] ?? '', '二次风控检测中'); $logs['fp_url'] = ''; $log_id = write_log_db($logs); return [ 'branch' => 'secondary_risk', 'log_id' => $log_id, 'logs' => $logs, 'needs_secondary' => true, ]; } $logs['result'] = 'true'; $logs['reason'] = $logs['reason'] ?? ''; $resolved = FpUrlHelper::resolve($config_name, true); $logs['fp_url'] = $resolved['url'] !== '' ? $resolved['url'] : FpUrlHelper::fallbackUrl(); $log_id = write_log_db($logs); return [ 'branch' => 'fp_page', 'log_id' => $log_id, 'logs' => $logs, 'needs_secondary' => false, ]; } /** * @param array $logs * @param array $cached */ private static function fpFromRiskCache(array $logs, $v_info, $config_name, array $cached) { RiskSecondaryCache::applyToSession($cached); $apiResponse = RiskSecondaryCache::toApiResponse($cached); $logs['result'] = $apiResponse['result'] ? 'true' : 'false'; $logs['reason'] = self::mergeReason($logs['reason'] ?? '', $apiResponse['reason']); $logs['fp_url'] = trim((string) ($apiResponse['link'] ?? '')); if ($logs['fp_url'] === '') { $logs['fp_url'] = $logs['result'] === 'true' ? FpUrlHelper::fallbackUrl() : (defined('DB_ZP') ? (string) DB_ZP : ''); } if ($logs['result'] === 'false') { return self::safeBranch($logs, $v_info); } $log_id = write_log_db($logs); return [ 'branch' => 'fp_page_cache', 'log_id' => $log_id, 'logs' => $logs, 'needs_secondary' => false, ]; } private static function mergeReason($existing, $append) { $existing = trim((string) $existing); $append = trim((string) $append); if ($existing === '') { return $append; } if ($append === '' || strpos($existing, $append) !== false) { return $existing; } return $existing . ';' . $append; } }