优化登录订票流程

pull/4/head
wenxianping 2018-01-10 19:36:22 +08:00
parent bebdcfaf31
commit f53270c151
2 changed files with 81 additions and 77 deletions

View File

@ -293,7 +293,7 @@ class select:
else: else:
print ('出票失败') print ('出票失败')
elif 'messages' in submitResult and submitResult['messages']: elif 'messages' in submitResult and submitResult['messages']:
raise ticketIsExitsException("检查到有未支付的订单,程序自动停止") raise ticketIsExitsException(submitResult['messages'][0])
def getPassengerTicketStr(self, set_type): def getPassengerTicketStr(self, set_type):
""" """
@ -375,8 +375,12 @@ class select:
open(img_path, 'wb').write(result) open(img_path, 'wb').write(result)
data['pass_code'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], img_path).main() data['pass_code'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], img_path).main()
checkOrderInfo = json.loads(myurllib2.Post(checkOrderInfoUrl, data, )) checkOrderInfo = json.loads(myurllib2.Post(checkOrderInfoUrl, data, ))
if checkOrderInfo['data']['submitStatus'] is True:
print ('车票提交通过,正在尝试排队')
if self.getQueueCount(train_no, set_type): if self.getQueueCount(train_no, set_type):
return True return True
else:
raise ticketNumOutException("提交订单失败")
else: else:
print("验证码识别错误,第{0}次重试".format(i)) print("验证码识别错误,第{0}次重试".format(i))
if checkOrderInfo['data']['submitStatus'] is True: if checkOrderInfo['data']['submitStatus'] is True:
@ -415,8 +419,6 @@ class select:
'train_location': self.get_ticketInfoForPassengerForm()['train_location'], 'train_location': self.get_ticketInfoForPassengerForm()['train_location'],
'REPEAT_SUBMIT_TOKEN': self.get_token(), 'REPEAT_SUBMIT_TOKEN': self.get_token(),
} }
for i in range(3):
print("{0}次排队".format(i+1))
getQueueCountResult = json.loads(myurllib2.Post(getQueueCountUrl, data)) getQueueCountResult = json.loads(myurllib2.Post(getQueueCountUrl, data))
if "status" in getQueueCountResult and getQueueCountResult["status"] is True: if "status" in getQueueCountResult and getQueueCountResult["status"] is True:
if "countT" in getQueueCountResult["data"]: if "countT" in getQueueCountResult["data"]:
@ -440,16 +442,15 @@ class select:
else: else:
print("排队发现未知错误{0},将此列车 {1}加入小黑屋".format(getQueueCountResult, train_no)) print("排队发现未知错误{0},将此列车 {1}加入小黑屋".format(getQueueCountResult, train_no))
self.ticket_black_list[train_no] = datetime.datetime.now() self.ticket_black_list[train_no] = datetime.datetime.now()
break
elif "messages" in getQueueCountResult and getQueueCountResult["messages"]: elif "messages" in getQueueCountResult and getQueueCountResult["messages"]:
print("排队异常,错误信息:{0}, 将此列车 {1}加入小黑屋".format(getQueueCountResult["messages"][0], train_no)) print("排队异常,错误信息:{0}, 将此列车 {1}加入小黑屋".format(getQueueCountResult["messages"][0], train_no))
self.ticket_black_list[train_no] = datetime.datetime.now() self.ticket_black_list[train_no] = datetime.datetime.now()
break
else: else:
if "validateMessages" in getQueueCountResult and getQueueCountResult["validateMessages"]:
print(str(getQueueCountResult["validateMessages"])) print(str(getQueueCountResult["validateMessages"]))
self.ticket_black_list[train_no] = datetime.datetime.now() self.ticket_black_list[train_no] = datetime.datetime.now()
break else:
time.sleep(1) print("未知错误 {0}".format("".join(getQueueCountResult)))
def checkQueueOrder(self): def checkQueueOrder(self):
""" """
@ -472,15 +473,17 @@ class select:
} }
try: try:
checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data))
except ValueError:
checkQueueOrderResult = {}
if checkQueueOrderResult:
if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]: if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]:
c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {} c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {}
if 'submitStatus' in c_data and c_data['submitStatus']: if 'submitStatus' in c_data and c_data['submitStatus']:
print("提交订单成功!") print("提交订单成功!")
if self.queryOrderWaitTime(): self.queryOrderWaitTime()
return True
else: else:
if 'errMsg' in c_data and c_data['errMsg']: if 'errMsg' in c_data and c_data['errMsg']:
print("提交订单成功!" + c_data['errMsg']) print("提交订单失败" + c_data['errMsg'])
else: else:
print(c_data) print(c_data)
print('订票失败!很抱歉,请重试提交预订功能!') print('订票失败!很抱歉,请重试提交预订功能!')
@ -488,8 +491,8 @@ class select:
print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"])
else: else:
print("订单提交中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) print("订单提交中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"]))
except ValueError: else:
pass print("接口 {} 无响应".format("confirmSingleForQueue"))
def queryOrderWaitTime(self): def queryOrderWaitTime(self):
""" """
@ -511,44 +514,43 @@ class select:
try: try:
queryOrderWaitTimeResult = json.loads(myurllib2.Post(queryOrderWaitTimeUrl, data)) queryOrderWaitTimeResult = json.loads(myurllib2.Post(queryOrderWaitTimeUrl, data))
except ValueError: except ValueError:
pass queryOrderWaitTimeResult = {}
if queryOrderWaitTimeResult:
if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]: if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]:
if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] != "null": if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] is not None:
self.initNoComplete() raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306访问未完成订单在30分钟内完成支付".format(queryOrderWaitTimeResult["data"]["orderId"]))
orderId = self.queryMyOrderNoComplete()
if orderId:
raise ticketIsExitsException(("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306访问未完成订单在30分钟内完成支付".format(orderId)))
else:
print("等待出票中...")
continue
elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]: elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]:
orderId = self.queryMyOrderNoComplete() print queryOrderWaitTimeResult["data"]["msg"]
if orderId:
raise ticketIsExitsException(
("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306访问未完成订单在30分钟内完成支付".format(orderId)))
else:
break break
elif "waitTime"in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["waitTime"]:
print("排队等待时间预计还剩{}".format(queryOrderWaitTimeResult["data"]["waitTime"]))
else:
print ("正在等待中")
elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]: elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]:
print("订单提交失败: " + queryOrderWaitTimeResult["messages"]) print("订单提交失败: " + queryOrderWaitTimeResult["messages"])
orderId = self.queryMyOrderNoComplete()
if orderId:
raise ticketIsExitsException(
("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306访问未完成订单在30分钟内完成支付".format(orderId)))
else:
break
else: else:
print("订单提交中,请耐心等待") print("订单提交中,请耐心等待")
time.sleep(1) time.sleep(2)
raise ticketNumOutException("订单提交时排队超时,重新刷票") else:
print("接口 {} 无响应".format("queryOrderWaitTime"))
order_id = self.queryMyOrderNoComplete() # 尝试查看订单列表,如果有订单,则判断成功,不过一般可能性不大
if order_id:
raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306访问未完成订单在30分钟内完成支付".format(order_id))
raise ticketNumOutException("订单提交失败!")
def queryMyOrderNoComplete(self): def queryMyOrderNoComplete(self):
""" """
获取订单列表信息 获取订单列表信息
:return: :return:
""" """
self.initNoComplete()
queryMyOrderNoCompleteUrl = "https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete" queryMyOrderNoCompleteUrl = "https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete"
data = {"_json_att": None} data = {"_json_att": None}
try:
queryMyOrderNoCompleteResult = json.loads(myurllib2.Post(queryMyOrderNoCompleteUrl, data)) queryMyOrderNoCompleteResult = json.loads(myurllib2.Post(queryMyOrderNoCompleteUrl, data))
except ValueError:
queryMyOrderNoCompleteResult = {}
if queryMyOrderNoCompleteResult:
if "data" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["data"] and "orderDBList" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderDBList"]: if "data" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["data"] and "orderDBList" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderDBList"]:
orderId = queryMyOrderNoCompleteResult["data"]["orderDBList"][0]["sequence_no"] orderId = queryMyOrderNoCompleteResult["data"]["orderDBList"][0]["sequence_no"]
return orderId return orderId
@ -562,6 +564,8 @@ class select:
return False return False
else: else:
return False return False
else:
print("接口 {} 无响应".format("queryMyOrderNoComplete"))
def initNoComplete(self): def initNoComplete(self):
""" """

BIN
tkcode

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB