Skip to content

Latest commit

 

History

History
248 lines (223 loc) · 8.95 KB

12306.md

File metadata and controls

248 lines (223 loc) · 8.95 KB

前言

12306 的 api 是 https 请求,所以在网络请求中需要添加证书,根证书下载地址就在 12306 首页上可以看到,下载链接请戳我

请求中可能需要使用到火车出发站、始发站、到达站、终点站所对应的代号,我已经将相应的数据转成了 WPS 的表格,点我查看文件,下载后可以用 WPS 或 Excel 打开即可,或自行转成数据库文件,文件中的 teleCode 列就是相应的站点代号了。

票数

请求方式:GET

url:https://kyfw.12306.cn/otn/leftTicket/query

url:https://kyfw.12306.cn/otn/leftTicket/queryX

ps:12306 网页版的 api 不是很稳定,定期会更改,更改套路是上面 url 中的 leftTicket/query 后面可能会增加一个大写的字母。例如: https://kyfw.12306.cn/otn/leftTicket/queryA,此时返回的 json 中有一个 c_url 字段,将其拼接在 https://kyfw.12306.cn/otn/ 后就是最新的 api 接口。可见 issue#1issue#22

参数:

参数名 参数意义 参数类型
leftTicketDTO.train_date 乘车日期,yyyy-MM-dd 格式(例:2017-02-05) String
leftTicketDTO.from_station 始发站码,取值参考数据库 String
leftTicketDTO.to_station 终点站码,取值参考数据库 String
purpose_codes 乘车人员码,取值(普通 ADULT,学生 0X00 String

url 示例:https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2017-02-05&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=0X002017年02月05日北京上海普通乘客票)

json 示例:

{
  "validateMessagesShowId": "_validatorMessage",
  "status": true,
  "httpstatus": 200,
  "data": [
    {
      "queryLeftNewDTO": {
        "train_no": "240000G1230Z",
        "station_train_code": "G123",
        "start_station_telecode": "VNP",
        "start_station_name": "北京南",
        "end_station_telecode": "AOH",
        "end_station_name": "上海虹桥",
        "from_station_telecode": "VNP",
        "from_station_name": "北京南",
        "to_station_telecode": "AOH",
        "to_station_name": "上海虹桥",
        "start_time": "11:05",
        "arrive_time": "16:50",
        "day_difference": "0",
        "train_class_name": "",
        "lishi": "05:45",
        "canWebBuy": "N",
        "lishiValue": "345",
        "yp_info": "sE3veQEvivDNrJQAIUCZI5PtvU7ENkijF8pSvENHwys5z311",
        "control_train_day": "20301231",
        "start_train_date": "20170205",
        "seat_feature": "O3M393",
        "yp_ex": "O090M0",
        "train_seat_feature": "3",
        "seat_types": "O9M",
        "location_code": "P3",
        "from_station_no": "01",
        "to_station_no": "11",
        "control_day": 29,
        "sale_time": "0800",
        "is_support_card": "0",
        "controlled_train_flag": "0",
        "controlled_train_message": "正常车次,不受控",
        "train_type_code": "2",
        "start_province_code": "31",
        "start_city_code": "0357",
        "end_province_code": "33",
        "end_city_code": "0712",
        "yz_num": "--",
        "rz_num": "--",
        "yw_num": "--",
        "rw_num": "--",
        "gr_num": "--",
        "zy_num": "无",
        "ze_num": "无",
        "tz_num": "--",
        "gg_num": "--",
        "yb_num": "--",
        "wz_num": "--",
        "qt_num": "--",
        "swz_num": "无"
      },
      "secretStr": "",
      "buttonTextInfo": "预订"
    },
    {
      "queryLeftNewDTO": {
        "train_no": "2400000G2108",
        "station_train_code": "G21",
        "start_station_telecode": "VNP",
        "start_station_name": "北京南",
        "end_station_telecode": "AOH",
        "end_station_name": "上海虹桥",
        "from_station_telecode": "VNP",
        "from_station_name": "北京南",
        "to_station_telecode": "AOH",
        "to_station_name": "上海虹桥",
        "start_time": "16:00",
        "arrive_time": "21:14",
        "day_difference": "0",
        "train_class_name": "",
        "lishi": "05:14",
        "canWebBuy": "Y",
        "lishiValue": "314",
        "yp_info": "WmvP8FMB9uVqGcP1F4NHBnyROKJlVXgN5%2BROQdLyLq2LFnqJ",
        "control_train_day": "20301231",
        "start_train_date": "20170205",
        "seat_feature": "O3M393",
        "yp_ex": "O0M090",
        "train_seat_feature": "3",
        "seat_types": "OM9",
        "location_code": "P2",
        "from_station_no": "01",
        "to_station_no": "06",
        "control_day": 29,
        "sale_time": "0800",
        "is_support_card": "0",
        "controlled_train_flag": "0",
        "controlled_train_message": "正常车次,不受控",
        "train_type_code": "2",
        "start_province_code": "31",
        "start_city_code": "0357",
        "end_province_code": "33",
        "end_city_code": "0712",
        "yz_num": "--",
        "rz_num": "--",
        "yw_num": "--",
        "rw_num": "--",
        "gr_num": "--",
        "zy_num": "无",
        "ze_num": "无",
        "tz_num": "--",
        "gg_num": "--",
        "yb_num": "--",
        "wz_num": "--",
        "qt_num": "--",
        "swz_num": "1"
      },
      "secretStr": "JjGzeN7ylJHEQP%2BV5SJrrRMAYJHWAIa%2Br0ajzk82EdzFbABAe6ePuEJKqxjxJe2Eas8uwD4ygP1j%0Avgtn%2F4o4c60VBBTn80KZ7wVd2lmzRGO7WSHNsp%2F%2F0OH7VLER0lhKFd3%2BZbu6gRG%2BeBv%2FJuIJkFUj%0A71KnMlVLZQtNXuZR6PnXcLc3pcb7eflTamalptsn9Nbb5oiya8YM2vKGvrqmYoKY2CJlAFv8ZObF%0AYdKyo4tYLnJkMfZdyCSTDq%2F17ZLvwaK2eOMukVZUAZ6fzhPNRqFsC6L%2FXJpTXCZcBJAW%2Fh17XSQN%0AWImvMFtTCtY%3D",
      "buttonTextInfo": "预订"
    }
  ],
  "messages": [],
  "validateMessages": {}
}

解析:

  • train_no:车次码(用作票价查询)
  • station_train_code:车次号
  • from_station_name:出发站
  • from_station_telecode:出发站码
  • to_station_name:到达站
  • to_station_telecode:到达站码
  • start_station_name:始发站
  • start_station_telecode:始发站码
  • end_station_name:终点站
  • end_station_telecode:终点站码
  • start_time:出发时间
  • arrive_time:到达时间
  • day_difference:历时天数
  • train_class_name:???
  • lishi:历时小时分钟数
  • canWebBuyY 可以预订、N 不可预订、IS_TIME_NOT_BUY 没到预定时间
  • lishiValue:历时分钟数
  • yp_info一票信息,应该是智行火车票所需要的信息
  • control_train_day:???
  • start_train_date:发车日
  • seat_types:座位类型(用作票价查询)
  • from_station_no:出发站码(用作票价查询)
  • to_station_no:到达站码(用作票价查询)
  • swz_num:商务座
  • tz_num:特等座
  • zy_num:一等座数
  • ze_num:二等座数
  • gr_num:高级软卧数
  • rw_num:软卧数
  • yw_num:硬卧数
  • rz_num:软座数
  • yz_num:硬座数
  • wz_num:无座数
  • qt_num:其他座数
  • gg_num:???
  • secretStr:车票预订标识

票价

请求方式:GET

url:https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice

参数:

参数名 参数意义 参数类型
train_no 车次码 String
from_station_no 出发站码 int
to_station_no 到达站码 int
seat_types 座位类型 String
train_date 乘车日期,yyyy-MM-dd 格式(例:2017-02-05) String

url 示例:https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no=5l0000G13061&from_station_no=01&to_station_no=12&seat_types=O9M&train_date=2017-02-05

json 示例:

{
  "validateMessagesShowId": "_validatorMessage",
  "status": true,
  "httpstatus": 200,
  "data": {
    "3": "2835",
    "A1": "¥156.5",
    "1": "1565",
    "A4": "¥455.5",
    "A3": "¥283.5",
    "4": "4555",
    "OT": [],
    "WZ": "¥156.5",
    "train_no": "5500001462H1"
  },
  "messages": [],
  "validateMessages": {}
}

解析:

  • MIN:其他座票价
  • WZ:无座票价
  • A1:硬座票价
  • A2:软座票价
  • A3:硬卧票价
  • A4:软卧票价
  • A6:高级软卧
  • O:二等座票价
  • M:一等座票价
  • P:特等座票价
  • A9:商务座票价
  • train_no:车次代码