{"id":21762836,"url":"https://github.com/visavi/rzd-api","last_synced_at":"2025-04-05T00:07:35.830Z","repository":{"id":38107854,"uuid":"53505697","full_name":"visavi/rzd-api","owner":"visavi","description":"Api сайта rzd.ru","archived":false,"fork":false,"pushed_at":"2024-12-02T20:22:17.000Z","size":479,"stargazers_count":82,"open_issues_count":3,"forks_count":17,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-28T23:05:56.352Z","etag":null,"topics":["api","php","rzd","rzd-tickets-checker"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/visavi.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-03-09T14:50:16.000Z","updated_at":"2025-03-28T08:18:51.000Z","dependencies_parsed_at":"2023-12-12T01:26:16.009Z","dependency_job_id":"b967c503-a361-4307-849a-00db0a106a98","html_url":"https://github.com/visavi/rzd-api","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visavi%2Frzd-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visavi%2Frzd-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visavi%2Frzd-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visavi%2Frzd-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/visavi","download_url":"https://codeload.github.com/visavi/rzd-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247266563,"owners_count":20910836,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","php","rzd","rzd-tickets-checker"],"created_at":"2024-11-26T12:13:17.058Z","updated_at":"2025-04-05T00:07:35.807Z","avatar_url":"https://github.com/visavi.png","language":"PHP","readme":"# Api сайта rzd.ru\n\n[![Latest Stable Version](https://poser.pugx.org/visavi/rzd-api/v/stable)](https://packagist.org/packages/visavi/rzd-api)\n[![Total Downloads](https://poser.pugx.org/visavi/rzd-api/downloads)](https://packagist.org/packages/visavi/rzd-api)\n[![Latest Unstable Version](https://poser.pugx.org/visavi/rzd-api/v/unstable)](https://packagist.org/packages/visavi/rzd-api)\n[![License](https://poser.pugx.org/visavi/rzd-api/license)](https://packagist.org/packages/visavi/rzd-api)\n\n[Описание установки](https://github.com/visavi/rzd-api/blob/master/docs/install.md)\n\n[Описание интерфейса пользователя](https://github.com/visavi/rzd-api/blob/master/docs/auth.md)\n\n### Что умеет Api \n* Получает маршруты в одну точку\n* Получает маршруты туда-обратно\n* Получает список вагонов выбранного поезда\n* Получает список станций в пути следования выбранного маршрута\n* Получает список кодов станций (Поиск по первым символам города)\n\n### Демонстрация возможностей\n\n#### Быстрый способ (Docker)\n\n```commandline\ndocker run -p 8000:8000 --rm --name rzd-api -v $(pwd):/app-it pavelsr/rzd-api\ncurl -s 'http://127.0.0.1:8000/train_routes.php?code0=2004000\u0026code1=2000000'\n```\n\nЕсли вы предпочитаете Github Container Registry вы можете также использовать образ `ghcr.io/pavelsr/rzd-api:latest`\n\n#### Локальная установка\n\nСкачайте архив, распакуйте и перейдите в директорию\n\nУстановите необходимые зависимости\n```sh\ncomposer install\n```\n\nИ запустите встроенный веб-сервер\n```sh\nphp -S localhost:8000 -t examples\n```\n\n### Пример запроса\n```php\n\u003c?php\n\n$config = new Rzd\\Config();\n\n// Set language\n$config-\u003esetLanguage('en');\n\n// Set userAgent\n$config-\u003esetUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 12_1_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1');\n\n// Set referer\n$config-\u003esetReferer('https://ticket.rzd.ru/');\n\n// Enable debug mode\n$config-\u003esetDebugMode(true);\n\n// Set proxy\n$config-\u003esetProxy('https://username:password@192.168.16.1:10');\n\n// Set timeout\n$config-\u003esetTimeout(10);\n\n//$config не обязателен\n$api = new Rzd\\Api($config);\n\n// В примере выполняется поиск маршрута САНКТ-ПЕТЕРБУРГ - МОСКВА (только с билетами) на завтра\n$params = [\n    'dir'          =\u003e 0, // 0 - только в один конец, 1 - туда-обратно\n    'tfl'          =\u003e 3, // 3 - поезда и электрички, 2 - электрички, 1 - поезда \n    'checkSeats'   =\u003e 1, // 1 - только с билетами, 0 - все поезда\n    //'withoutSeats' =\u003e 'y', // Если checkSeats = 0, то этот параметр тоже необходим\n    // Коды станций можно получить отдельным запросом\n    'code0'        =\u003e '2004000', // код станции отправления\n    'code1'        =\u003e '2000000', // код станции прибытия\n    'dt0'          =\u003e 'дата на завтра d.m.Y',\n    'md'           =\u003e 0, // 0 - без пересадок, 1 - с пересадками\n];\n\n$routes = $api-\u003etrainRoutes($params);\n```\n\n### Процесс приобретения билетов на сайте pass.rzd.ru разделен на несколько этапов\n\n#### Открытая часть\nВыбор маршрута - выбор поезда - выбор вагона\n\n#### Закрытая часть\n* Информация о пассажирах - Проверка заказа - Оплата заказа - Подтверждение заказа\n\n### Этапы\n* В первом этапе пользователь указывают станцию отправления и станцию прибытия поезда, а также дату желаемой поездки.\nВ этот момент на сайте pass.rzd.ru происходит отправка ajax-запроса, с которым мы и будем работать, запрос возвращает сформированный JSON пакет с ответом, в нем и находится требуемая нами информация или сообщение об ошибке\n\n* Во втором этапе мы можем выбрать необходимый нам поезд и получить полную информацию о свободных местах\n\n* В третьем этапе необходимо выбрать места и заполнить данные необходимые на оплаты и регистрации на сайте\n\nДопустимые запросы через Curl (POST и GET)\nДля обхода защиты сайта необходимо предварительно отправить запрос для получения cookies и номера идентификатора RID (REQUEST_ID)\nВторым запросом подставляем уникальный идентификатор RID и отправляем cookie\n\n### Ответы с сайта\nСтатус ответа содержится в переменной result\nRID - означает что сайт выдал нам уникальный идентификатор и куки\nOK - получен полный ответ с запрошенными нами данными\nВо всех остальных ответах Error или FAIL означает ошибку получения данных\n\n### Получение cookie\nКаждый запрос к сайту должен содержать куки примерного вида:\n* lang=ru - текущий язык\n* JSESSIONID=0000w74wcMhGMfeoE6ibmsh4i4W:17obq9kpt - уникальный ключ\n* AuthFlag=false - авторизован ли пользователь на сайте\n\n## Пример запроса\n\nВсе запросы идут на адрес http://pass.rzd.ru/timetable/public/ru?layer_id=подкатегория\u0026ключ=значение\n\nГде подкатегория это\n* 5827 - выбор маршрута (Получения списка поездов)\n* 5764 - детальная информация выбранному по поезду, список вагонов\n* 5804 - просмотр маршрута со всеми остановками (Вроде больше не работает, реализовано по-другому)\n\n### Первый запрос\nhttps://pass.rzd.ru/timetable/public/ru?layer_id=5827\u0026dir=0\u0026tfl=3\u0026checkSeats=1\u0026code0={{code_from}}\u0026dt0={{date}}\u0026code1={{code_to}}\u0026dt1={{date}}\n\n### Второй и следующие запросы\nhttps://pass.rzd.ru/timetable/public/ru?layer_id=5827\u0026rid={{rid}}\n\nВторой запрос выполняется с уже полученным нами уникальным идентификатором который хранит в себе данные предыдущего запроса и куками\nПоэтому в целях оптимизации можно не отправлять некоторые параметры указанные нами в первом запросе\n\n## Реализованные запросы\n\nНеобходимо реализовать отдачу данных через ajax-запросы, в текущих примерах это не реализовано\n\n### trainRoutes - получает маршруты поездов, количество свободных мест, цены итд в нем в один конец\n\n![Маршруты](https://github.com/visavi/rzd-api/blob/master/screens/trainRoute.png)\n\nПринимает параметры\nобязательные параметр при первом запросе\n* layer_id - подкатегория (5827)\n\nНеобязательные параметр при повторном запросе\n* dir - 0 - только в один конец, 1 - туда-обратно\n* tfl - 3 - поезда и электрички, 2 - электрички, 1 - поезда \n* checkSeats - 0, 1 - поиск в поездах только если есть свободные места\n* code0 - код станции отправления\n* code1 - код станции прибытия\n* dt0 - дата отправления\n* md - маршруты с пересадками (1 - с пересадками, 0 - только прямые рейсы)\n\nВозвращает массив поездов и свободных мест\n* from - название станции отправления (САНКТ-ПЕТЕРБУРГ)\n* where - название станции прибытия (КИРОВ ПАСС)\n* date - дата отправления (27.03.2016)\n* fromCode - код станции отправления (2004000)\n* whereCode - код станции прибытия (2060600)\n\nМассив поездов содержит\n* date0 - дата отправления\n* date1 - дата прибытия\n* time0 - время отправления\n* time1 - время прибытия\n* route0 - код станции отправления С-ПЕТ-ЛАД\n* route1 - код станции прибытия ТЮМЕНЬ\n* number - номер поезда\n* timeInWay - время в пути\n* brand - Название поезда (Демидовский экспресс)\n* carrier - тип поезда ФПК (Фирменный)\n\n* cars - массив свободных мест купе, плацкарт и люкс\n* cars.freeSeats - кол.  свободных мест\n* cars.itype\n* cars.servCls - класс обслуживания (2Ю, 2Ж и т.д.)\n* cars.tariff - стоимость билета\n* cars.pt - баллы\n* cars.typeLoc - полное наименование (Плацкартный, СВ, Купе, Люкс)\n* cars.type - сокращенное наименование (Купе, плац, люкс)\n* cars.disabledPerson - флаг обозначающий места для инвалидов\n\n### trainRoutesReturn - получает маршруты поездов, количество свободных мест, цены итд, туда-обратно\n![Поезда](https://github.com/visavi/rzd-api/blob/master/screens/trainRouteReturn.png)\n\nПринимает параметры\nобязательные параметр при первом запросе\n* layer_id - подкатегория (5827)\n\nНеобязательные параметр при повторном запросе\n* dir - 0 только в один конец, 1 - туда-обратно\n* tfl - тип поезда (3 - поезда и электрички, 2 - электрички, 1 - поезда)\n* checkSeats поиск только с билетами (1 - с билетами, 0 - все поезда)\n* code0 - код станции отправления\n* code1 - код станции прибытия\n* dt0 - дата отправления\n* dt1 - дата возвращения\n\nОтветы точно такие же как и в методе trainRoutes, только содержит 2 массива, в первом - туда, во-втором - обратно\n\n### trainCarriages - получает список вагонов, свободные места, схема вагона, стоимость билетов, тип и класс обслуживания\n![Вагоны](https://github.com/visavi/rzd-api/blob/master/screens/trainCarriages.png)\n\nНеобязательные параметр при повторном запросе\n* dir - 0 только в один конец, 1 - туда-обратно\n* code0 - код станции отправления\n* code1 - код станции прибытия\n* dt0 - дата отправления (28.03.2016)\n* time0 - время отправления (15:30)\n* tnum0 - номер поезда (072Е)\n\nВозвращает следующий массив вагонов\n* Стандартный ответ из запросов выше\n* cnumber - номер вагона\n* type - тип вагона\n* typeLoc - полное наименование (Плацкартный, СВ, Купе, Люкс)\n* clsType - 2Л, 2Э\n* tariff - стоимость билета\n* tariffServ - сервис сбор\n\n* seats - массив мест (верхние, верхние боковые, нижние, нижние боковые итд)\n* seats.*.places - список свободных мест\n* seats.*.tariff - цены за место\n* seats.type - сокр. наименование мест (up)\n* seats.free - количество мест\n* seats.label - полное наименование мест (Верхние)\n\n* schemes схемы вагонов\n* html - json массив информация о схеме вагонов\n* image - ссылка на картинку\n\n* insuranceCompany - массив с компаниями страхователями и правилами страхования\n* shortName - наименование организации\n* offerUrl - ссылка на файл с правилами, обычно PDF файл\n\n### trainStationList - получение списка всех станций в текущем маршруте движения\n![Станции](https://github.com/visavi/rzd-api/blob/master/screens/trainStationList.png)\n\nПример запроса https://pass.rzd.ru/ticket/services/route/basicRoute?STRUCTURE_ID=704\u0026trainNumber=054Г\u0026depDate=13.03.2016\n\nПринимает параметры\nНеобязательные параметр при повторном запросе\n* trainNumber - номер поезда 054Г\n* depDate - дата отправления 13.03.2016\n\nВозвращает следующий массив станций\n* Station - название станции\n* Code - код станции\n* ArvTime - время прибытия\n* WaitingTime - время стоянки\n* DepTime - время отправления\n* Distance - пройденная дистанция\n\n### stationCode - Получение списка кодов станций\n\nПринимает параметры\n* stationNamePart - часть названия станции, минимум 2 символа\n* compactMode - по умолчанию 'y'\n\nВозвращает массив найденных данных\n* station - имя станции\n* code - код станции\n\nК примеру при значении stationNamePart = 'ЧЕБ' будут возващены все станции начинающиеся на ЧЕБ (11 станций)\n\n### License\n\nThe class is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisavi%2Frzd-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvisavi%2Frzd-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisavi%2Frzd-api/lists"}