12306抢票微信公众号开发

本文最后更新于2018年10月16日 后续接口和流程可能发生变化

一.流程分析


  • 浏览器:chrome
  • 工具:Fiddler

打开Fiddler以后,登录12306完成全部的订票流程。
全部过程如下:

  • 验证码拉取 接口:Get https://kyfw.12306.cn/passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&0.11080113
  • 验证码验证 接口:Post https://kyfw.12306.cn/passport/captcha/captcha-check
  • 用户名密码认证 接口:Post https://kyfw.12306.cn/passport/web/login
  • 获取apptk 接口:Post https://kyfw.12306.cn/passport/web/auth/uamtk
  • 获取登录结果 接口:Post https://kyfw.12306.cn/otn/uamauthclient
  • 余票查询 接口:Get https://kyfw.12306.cn/otn/leftTicket/query[A-Z]
  • 车票信息确认 接口: Post https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest
  • InitDC(单程跟往返接口不一样 本文统一单程) 接口:Post https://kyfw.12306.cn/otn/confirmPassenger/initDc
  • 获取乘客信息 接口:Post https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs
  • 确认订单信息 接口:Post https://kyfw.12306.cn/otn/confirmPassenger/checkOrderInfo
  • 获取排队信息 接口:Post https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount
  • 进入队伍 接口:Post https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue
  • 查询抢票结果 接口:Post https://kyfw.12306.cn/otn/confirmPassenger/queryOrderWaitTime
  • 查询订单信息 接口:Post https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete

二.打通抢票流程


2.1 用户登录
  • 验证码
    验证码拉取接口最后的数字是一个随机的0-1的小数,防止缓存,程序里随机生成即可。
    验证码识别我选用的是超级鹰,在网站上注册了账号以后下载java的使用代码,验证码拉取接口获得的byte数组可以直接传给超级鹰,验证码类型为9004
    注意:超级鹰返回的坐标以整个图片左上角为(0,0) 但是12306以验证码左上角为(0,0) 需要减去差值 测试时差值约为30

1坑
验证码验证环节需要注意SSL和content-type

  • 校验验证码
    - 没携带cookie: {"result_message":"验证码校验失败,信息为空","result_code":"8"}
    - 携带cookie但点错了: {"result_message":"验证码校验失败","result_code":"5"}
    - 携带cookie并且点击正确: {"result_message":"验证码校验成功","result_code":"4"}
    - 停留时间过长: {"result_message":"验证码已经过期","result_code":"7"}

    • 校验用户名密码:
      • 密码输入错误: {"result_message":"密码输入错误。如果输错次数超过4次,用户将被锁定。","result_code":1}
      • 用户不存在: {"result_message":"登录名不存在。","result_code":1}
      • 密码输入正确: {"result_message":"登录成功","result_code":0,"uamtk":"tWDQtPie_z22IWMknmFOymUpDRzvLE4CfzREJBzS9NwrwL2L0"}

你可能感兴趣的:(12306抢票微信公众号开发)