0,'path'=>'/api/','secure'=>true,'httponly'=>true,'samesite'=>'Strict']); ini_set('session.use_strict_mode','1'); if (!session_start()) throw new Problem(503,'Не удалось подготовить форму.'); if ($method==='GET') { if (!isset($_SESSION['csrf']) || ($_SESSION['issued']??0)$_SESSION['csrf'],'recipient'=>Caterium\Support\RECIPIENT,'max_message_chars'=>4000];session_write_close(); echo json_encode($out,JSON_UNESCAPED_UNICODE|JSON_THROW_ON_ERROR);exit; } if (strtolower(trim(explode(';',$_SERVER['CONTENT_TYPE']??'')[0]))!=='application/json') throw new Problem(415,'Ожидается форма JSON.'); if ((int)($_SERVER['CONTENT_LENGTH']??0)>24000) throw new Problem(413,'Сообщение слишком длинное.'); $raw=file_get_contents('php://input',false,null,0,24001); if ($raw===false || strlen($raw)>24000) throw new Problem(413,'Сообщение слишком длинное.'); try {$input=json_decode($raw,true,8,JSON_THROW_ON_ERROR);}catch(\JsonException $e){throw new Problem(400,'Не удалось прочитать форму.');} if (!is_array($input) || !is_string($input['csrf']??null) || !isset($_SESSION['csrf']) || ($_SESSION['issued']??0)status);if($e->status===429)header('Retry-After: 3600'); echo json_encode(['ok'=>false,'message'=>$e->getMessage()],JSON_UNESCAPED_UNICODE); } catch (\Throwable $e) { if(session_status()===PHP_SESSION_ACTIVE)session_write_close(); http_response_code(503);echo json_encode(['ok'=>false,'message'=>'Не удалось подтвердить отправку. Сохраните текст и напишите на '.Caterium\Support\RECIPIENT.'.'],JSON_UNESCAPED_UNICODE); }