12306接口
Posted hacker001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12306接口相关的知识,希望对你有一定的参考价值。
接口
1、检查用户是否保持登录成功
https://kyfw.12306.cn/otn/login/checkUser
2、点击预定
https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest
3、获取联系人
https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs
4、检查选票人信息
https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo
5、提交订单
https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount
6、确认订单
https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue
7、排队等待
https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime
8、订单结果
https://kyfw.12306.cn/otn/confirmPassenger/resultOrderForDcQueue
说明
需要做的依次post服务器需要的参数后,根据response返回的内容进行判断是否成功。
1. checkUser
post参数_json_att为空,注意返回的json,flag:true 为保持登录成功
2. 点击预定
post参数 secretStr 根据查看返回的预定号urldecode转码而来,python3 可使用urllib.parse.unquote来进行转码,train_date 出发时间,back_train_date 返程时间 , tour_flag 固定值。
3. 获取联系人
post的参数_json_att为空,REPEAT_SUBMIT_TOKEN在上一次请求页面的源码中。由于下面截图是后续截的,所以与上一次不同,由此可见每一次的REPEAT_SUBMIT_TOKEN都会改变,所以只要将https://kyfw.12306.cn/otn/confirmPassenger/initDc get下来,使用正则便可以分析出来。方便后续使用。获取的联系人可以将有用的信息,买票人信息提取出来,为后面选票人下单提供参数。
4. 检查选票人信息
‘cancel_flag‘:‘2‘, #固定值 ‘bed_level_order_num‘:‘000000000000000000000000000000‘, #固定值 ‘passengerTicketStr‘:‘3,0,1,xxx,1,xxxxxxxxxxxxxx,,N‘, #座位类型,0,票类型(成人/儿童),name,身份类型(身份证/军官证….),身份证,电话号码,保存状态 ‘oldPassengerStr‘:‘xxx,1,xxxxxxxxxxxxxxxx,1‘, #姓名 1 身份证号码 1 ‘tour_flag‘:‘dc‘, #固定值 ‘randCode‘:‘‘, #随机数 ‘whatsSelect‘:‘1‘, ‘_json_att‘:‘‘, #空 ‘REPEAT_SUBMIT_TOKEN‘: xxxxxxxxx #上面获取过
5. 提交订单
data={ ‘train_date‘: ‘Wed Apr 22 2018 00:00: 00 GMT + 0800‘, #出发时间,注意格式 "REPEAT_SUBMIT_TOKEN": xxxxxxxx, #上面获取过 "_json_att": "", #空 "fromStationTelecode": fromStationTelecode, #出发站的英文编号 "leftTicket": leftTicket, #和REPEAT_SUBMIT_TOKEN一样在相同网页获取 "purpose_codes": purpose_codes, #和REPEAT_SUBMIT_TOKEN一样在相同网页获取 "seatType": ‘3‘, #3为硬卧,具体可以查看https://kyfw.12306.cn/otn/confirmPassenger/initDc 检视元素可查看 "stationTrainCode": station_train_code, #车次 "toStationTelecode": to_station_telecode, #目的站的也稳编号 "train_no": train_no, #和REPEAT_SUBMIT_TOKEN一样在相同网页获取 ‘train_location‘:trainl_lst[2] #车次序列号,和REPEAT_SUBMIT_TOKEN一样在相同网页获取 }
6. 确认订单
data={ ‘passengerTicketStr‘: ‘3,0,1,xxx,1,xxxxxxxxxx,,N‘, #选票人信息,获取过 ‘oldPassengerStr‘: ‘xxx,1,xxxxxxxxxxxxxxx,1_‘, #获取过 ‘randCode‘: ‘‘, #随机值,空 "purpose_codes": purpose_codes, #获取过 "key_check_isChange": key_check_isChange, #和REPEAT_SUBMIT_TOKEN一样在相同网页获取 "leftTicketStr": leftTicket, #获取过 ‘train_location‘: trainl_lst[2], #获取过 ‘choose_seats‘:‘‘, #座位类型,一般是高铁用 ‘roomType‘: ‘00‘, #固定值 ‘dwAll‘: ‘N‘, #固定值 "_json_att": "", #空 ‘seatDetailType‘:‘000‘, #固定值 ‘whatsSelect‘: ‘1‘, #固定值 "REPEAT_SUBMIT_TOKEN": ticketToken, #获取过 }
7. 排队等待
第一次post:
第二次post:
第一次和第二次post参数相同,但是第二次返回json中多了一个orderid,在订单结果中使用。
data={ "REPEAT_SUBMIT_TOKEN": ticketToken, #获取过 "_json_att": "", #空 "random": str(time.time()), #随机值 "tourFlag": "dc" #固定值 }
8. 订单结果
data={ "REPEAT_SUBMIT_TOKEN": ticketToken, #获取过 "_json_att": "", #空 "orderSequence_no": orderId #获取到排队等待response中的orderid }
以上是关于12306接口的主要内容,如果未能解决你的问题,请参考以下文章