Skip to content
Api сайта rzd.ru
PHP
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs
examples
screens
src/Rzd
tests
.gitignore
composer.json
composer.lock
phpunit.xml
readme.md

readme.md

Api сайта rzd.ru

Latest Stable Version Total Downloads Latest Unstable Version License

Описание установки

Описание интерфейса пользователя

Что умеет Api

  • Получает маршруты в одну точку
  • Получает маршруты туда-обратно
  • Получает список вагонов выбранного поезда
  • Получает список станций в пути следования выбранного маршрута
  • Получает список кодов станций (Поиск по первым символам города)
  • Авторизация на сайте pass.rzd.ru
  • Получает данные профиля пользователя

Пример запроса

<?php
// Добавляем прокси
$config = new Rzd\Config();
$config->setProxy([
    'server' => '192.168.0.1',
    'port'   => '8080',
]);

// Изменяем userAgent
$config->setUserAgent('Mozilla 5');

// Изменяем referer
$config->setReferer('rzd.ru');

//$config не обязателен
$api = new Rzd\Api($config);

// В примере выполняется поиск маршрута САНКТ-ПЕТЕРБУРГ - МОСКВА (только с билетами) на завтра
$params = [
    'dir'          => 0, // 0 - только в один конец, 1 - туда-обратно
    'tfl'          => 3, // 3 - поезда и электрички, 2 - электрички, 1 - поезда 
    'checkSeats'   => 1, // 1 - только с билетами, 0 - все поезда
    //'withoutSeats' => 'y', // Если checkSeats = 0, то этот параметр тоже необходим
    // Коды станций можно получить отдельным запросом
    'code0'        => '2004000', // код станции отправления
    'code1'        => '2000000', // код станции прибытия
    'dt0'          => 'дата на завтра d.m.Y',
    'md'           => 0, // 0 - без пересадок, 1 - с пересадками
];

$routes = $api->trainRoutes($params);

Процесс приобретения билетов на сайте pass.rzd.ru разделен на несколько этапов

Открытая часть

Выбор маршрута - выбор поезда - выбор вагона

Закрытая часть

  • Информация о пассажирах - Проверка заказа - Оплата заказа - Подтверждение заказа

Этапы

  • В первом этапе пользователь указывают станцию отправления и станцию прибытия поезда, а также дату желаемой поездки. В этот момент на сайте pass.rzd.ru происходит отправка ajax-запроса, с которым мы и будем работать, запрос возвращает сформированный JSON пакет с ответом, в нем и находится требуемая нами информация или сообщение об ошибке

  • Во втором этапе мы можем выбрать необходимый нам поезд и получить полную информацию о свободных местах

  • В третьем этапе необходимо выбрать места и заполнить данные необходимые на оплаты и регистрации на сайте

Допустимые запросы через Curl (POST и GET) Для обхода защиты сайта необходимо предварительно отправить запрос для получения cookies и номера идентификатора RID (REQUEST_ID) Вторым запросом подставляем уникальный идентификатор RID и отправляем cookie

Ответы с сайта

Статус ответа содержится в переменной result RID - означает что сайт выдал нам уникальный идентификатор и куки OK - получен полный ответ с запрошенными нами данными Во всех остальных ответах Error или FAIL означает ошибку получения данных

Получение cookie

Каждый запрос к сайту должен содержать куки примерного вида:

  • lang=ru - текущий язык
  • JSESSIONID=0000w74wcMhGMfeoE6ibmsh4i4W:17obq9kpt - уникальный ключ
  • AuthFlag=false - авторизован ли пользователь на сайте

Пример запроса

Все запросы идут на адрес http://pass.rzd.ru/timetable/public/ru?layer_id=подкатегория&ключ=значение

Где подкатегория это

  • 5827 - выбор маршрута (Получения списка поездов)
  • 5764 - детальная информация выбранному по поезду, список вагонов
  • 5804 - просмотр маршрута со всеми остановками

Первый запрос

https://pass.rzd.ru/timetable/public/ru?layer_id=5827&dir=0&tfl=3&checkSeats=1&code0={{code_from}}&dt0={{date}}&code1={{code_to}}&dt1={{date}}

Второй и следующие запросы

https://pass.rzd.ru/timetable/public/ru?layer_id=5827&rid={{rid}}

Второй запрос выполняется с уже полученным нами уникальным идентификатором который хранит в себе данные предыдущего запроса и куками Поэтому в целях оптимизации можно не отправлять некоторые параметры указанные нами в первом запросе

Реализованные запросы

Необходимо реализовать отдачу данных через ajax-запросы, в текущих примерах это не реализовано

trainRoutes - получает маршруты поездов, количество свободных мест, цены итд в нем в один конец

Маршруты

Принимает параметры обязательные параметр при первом запросе

  • layer_id - подкатегория (5827)

необязательные параметр при повторном запросе

  • dir - 0 - только в один конец, 1 - туда-обратно
  • tfl - 3 - поезда и электрички, 2 - электрички, 1 - поезда
  • checkSeats - 0, 1 - поиск в поездах только если есть свободные места
  • code0 - код станции отправления
  • code1 - код станции прибытия
  • dt0 - дата отправления
  • md - маршруты с пересадками (1 - с пересадками, 0 - только прямые рейсы)

Возвращает массив поездов и свободных мест

  • from - название станции отправления (САНКТ-ПЕТЕРБУРГ)
  • where - название станции прибытия (КИРОВ ПАСС)
  • date - дата отправления (27.03.2016)
  • fromCode - код станции отправления (2004000)
  • whereCode - код станции прибытия (2060600)

Массив поездов содержит

  • date0 - дата отправления

  • date1 - дата прибытия

  • time0 - время отправления

  • time1 - время прибытия

  • route0 - код станции отправления С-ПЕТ-ЛАД

  • route1 - код станции прибития ТЮМЕНЬ

  • number - номер поезда

  • timeInWay - время в пути

  • brand - Название поезда (Демидовский экспресс)

  • carrier - тип поезда ФПК (Фирменный)

  • cars - массив свободных мест купе, плацкарт и люкс

  • cars.freeSeats - кол. свободных мест

  • cars.itype

  • cars.servCls

  • cars.tariff - стоимость билета

  • cars.pt - баллы

  • cars.typeLoc - полное наименование (Плацкартный, СВ, Купе, Люкс)

  • cars.type - сокращенное наименование (Купе, плац, люкс)

trainRoutesReturn - получает маршруты поездов, количество свободных мест, цены итд, туда-обратно

Поезда

Принимает параметры обязательные параметр при первом запросе

  • layer_id - подкатегория (5827)

необязательные параметр при повторном запросе

  • dir - 0 только в один конец, 1 - туда-обратно
  • tfl - тип поезда (3 - поезда и электрички, 2 - электрички, 1 - поезда)
  • checkSeats поиск только с билетами (1 - с билетами, 0 - все поезда)
  • code0 - код станции отправления
  • code1 - код станции прибытия
  • dt0 - дата отправления
  • dt1 - дата возвращения

Ответы точно такие же как и в методе trainRoutes, только содержит 2 массива, в первом - туда, во-втором - обартно

trainCarriages - получает список вагонов, свободные места, схема вагона, стоимость билетов, тип и класс обслуживания

Вагоны

необязательные параметр при повтрном запросе

  • dir - 0 только в один конец, 1 - туда-обратно
  • code0 - код станции отправления
  • code1 - код станции прибытия
  • dt0 - дата отправления (28.03.2016)
  • time0 - время отправления (15:30)
  • tnum0 - номер поезда (072Е)

Возвращает следующий массив вагонов

  • Стандартный ответ из запросов выше

  • cnumber - номер вагона

  • type - тип вагона

  • typeLoc - полное наименование (Плацкартный, СВ, Купе, Люкс)

  • clsType - 2Л, 2Э

  • tariff - стоимость билета

  • tariffServ - сервис сбор

  • seats - массив мест (верхние, верхние боковые, нижнии, нижнии боковые итд)

  • seats.*.places - список свободных мест

  • seats.*.tariff - цены за место

  • seats.type - сокр. наименование мест (up)

  • seats.free - количество мест

  • seats.label - полное наименование мест (Верхние)

  • schemes схемы вагонов

  • html - json массив информация о схеме вагонов

  • image - ссылка на картинку

  • insuranceCompany - массив с компаниями страхователями и правилами страхования

  • shortName - наименование организации

  • offerUrl - ссылка на файл с правилами, обычно PDF файл

trainStationList - получение списка всех станций в текущем маршруте движения

Станции

Пример запроса http://pass.rzd.ru/timetable/public/ru?layer_id=5804&train_num=072%D0%95&date=13.03.2016 Обращение через незащищенный протокол http://

Формат получения данных XML

Принимает параметры обязательные параметр при первом запросе

  • layer_id - подкатегория (5804)

необязательные параметр при повтрном запросе

  • train_num - номер поезда 072Е
  • date - дата отправления 13.03.2016

Возвращает следующий массив станций

  • Station - название станции
  • Code - код станции
  • ArvTime - время прибытия
  • WaitingTime - время стоянки
  • DepTime - время отправления
  • Distance - пройденная дистанция

stationCode - Получение списка кодов станций

Принимает параметры

  • stationNamePart - часть названия станции, минимум 2 символа
  • lang - язык, по умолчанию 'ru',
  • compactMode - по умолчанию 'y'

Возвращает массив найденных данных

  • station - имя станции
  • code - код станции

К примеру при значении stationNamePart = 'ЧЕБ' будут возващены все станции начинающиеся на ЧЕБ (11 станций)

License

The class is open-sourced software licensed under the MIT license

You can’t perform that action at this time.