Light12306/Web12306/js/otn/orderprocess.js

224 lines
8.0 KiB
JavaScript
Raw Normal View History

2014-06-27 22:25:42 +08:00
define(function (require, exports, module) {
var ajax = require("../platform/webRequest.js");
var parser = require("../platform/parser.js");
var submitToken;
2014-07-01 20:07:44 +08:00
var formData;
var submitData;
window.test=function(token, data) {
submitToken = token;
submitData = data;
}
exports.formatJson = function(data) {
return data.replace(/'/g, '"');
};
2014-06-27 22:25:42 +08:00
exports.prepareOrder = function (train, profile) {
2014-07-01 20:07:44 +08:00
var purposeCode = profile.studentTicket=="1" ? "0X00" : "ADULT";
2014-06-27 22:25:42 +08:00
var data = "secretStr" + "=" + train.secureStr + "&train_date=" + train.date + "&back_train_date" + "=" + (profile.resign ? profile.resignDate : train.date) + "&tour_flag" + "=" + (profile.resign ? "gc" : "dc") + "&" +
"purpose_codes" + "=" + purposeCode + "&" +
2014-07-01 20:07:44 +08:00
"query_from_station_name" + "=" + profile.fromText + "&" +
"query_to_station_name" + "=" + profile.toText + "&" + (ajax.userAtts ? "_json_att=" + ajax.userAtts : "undefined");
2014-06-27 22:25:42 +08:00
var def = new $.Deferred();
ajax.sendPost("leftTicket/submitOrderRequest", "leftTicket/init", data, "json", function (data) {
if (!data.status) {
def.reject({ msg: parser.getError(data).message });
} else {
ajax.sendPost(profile.resign ? "confirmPassenger/initGc" : "confirmPassenger/initDc", "leftTicket/init", null, "text", function (html) {
2014-07-01 20:07:44 +08:00
parseFields(html);
2014-06-27 22:25:42 +08:00
var token = /var\s*globalRepeatSubmitToken\s*=\s*['"]([^'"]+)["']/i.exec(html) && RegExp.$1;
if (token) {
submitToken = token;
2014-07-01 20:07:44 +08:00
console.log(token, submitData.leftTicketStr, submitData.key_check_isChange, submitData.train_location);
2014-06-27 22:25:42 +08:00
def.resolve({ token: token });
} else {
submitToken = null;
def.reject({ msg: "12306返回的信息无法识别请重试..." });
}
}, function () {
def.reject({ msg: "12306不给力唷请尽快重试..." });
}, true);
}
}, function () {
def.reject({ msg: "12306不给力唷请尽快重试..." });
});
2014-07-01 20:07:44 +08:00
var parseFields = function (html) {
var reg = /(init_seatTypes|defaultTicketTypes|ticket_seat_codeMap|init_cardTypes|ticketInfoForPassengerForm|orderRequestDTO|oldTicketDTOs)\s*=\s*([^;]+);/gi;
var m;
formData = {};
while (m = reg.exec(html)) {
formData[m[1]] = m[2];
}
submitData = JSON.parse(exports.formatJson(formData["ticketInfoForPassengerForm"] || "{}"));
};
return def;
};
exports.submitOrder = function (train, profile, passenger, randcode) {
var def = new $.Deferred();
var pas1 = [];
var pas2 = [];
var page = profile.resign ? "confirmPassenger/initGc" : "confirmPassenger/initDc";
var resign = profile.resign;
passenger.forEach(function (e) {
pas1.push(e.seat + "," + "1" + "," + e.passenger_type + "," + e.passenger_name + "," + e.passenger_id_type_code + "," + e.passenger_id_no + "," + e.mobile_no + "," + (profile.resign ? "Y" : "N"));
if (e.passenger_type === "2")
pas2.push(" ");
else pas2.push(e.passenger_name + "," + e.passenger_id_type_code + "," + e.passenger_id_no + "," + e.passenger_type);
});
pas1 = pas1.join("_");
pas2 = pas2.join("_") + "_";
var doneHmd;
var isCheckOrderInfo;
var checkOrderInfo = function () {
def.notify({ msg: "正在检测订单信息..." });
var data = "cancel_flag=2&" +
"bed_level_order_num=000000000000000000000000000000&" +
"passengerTicketStr=" + pas1 + "&" +
"oldPassengerStr=" + pas2 + "&" +
"tour_flag=" + (profile.resign ? "gc" : "dc") +
"&randCode=" + randcode +
"&_json_att=" + ajax.userAtts +
"&REPEAT_SUBMIT_TOKEN=" + submitToken;
ajax.sendPost("confirmPassenger/checkOrderInfo", page, data, "json", function (json) {
if (!json || !json.status || !json.data) {
def.reject({ msg: parser.getError(json) });
} else if (json.data.isRelogin) {
def.reject({ msg: "登录状态异常,请重新登录。" });
} else if (!json.data.submitStatus || json.data.get608Msg) {
def.reject({ msg: json.data.errMsg || json.data.get608Msg || parser.getError(json) });
} else {
isCheckOrderInfo = json.data.isCheckOrderInfo;
doneHmd = json.data.doneHMD;
checkQueueInfo();
}
}, function (json) {
def.reject({ msg: "12306不给力啊唉。出现网络错误了请重试.." });
});
};
var checkQueueInfo = function () {
def.notify({ msg: "正在检测排队信息..." });
var data = {
train_date: new Date(train.date) + '',
train_no: train.id,
stationTrainCode: train.code,
seatType: passenger[0].seat,
fromStationTelecode: train.from.code,
toStationTelecode: train.to.code,
leftTicket: submitData["leftTicketStr"],
purpose_codes: profile.studentTicket === "1" ? "0X00" : "00",
_json_att: ajax.userAtts,
REPEAT_SUBMIT_TOKEN: submitToken
};
if (isCheckOrderInfo)
data.isCheckOrderInfo = isCheckOrderInfo;
ajax.sendPost("confirmPassenger/getQueueCount", page, data, "json", function (json) {
if (!json || !json.status || !json.data) {
def.reject({ msg: (parser.getError(json)|| {message:"未知错误"}).message });
} else if (json.data.isRelogin) {
def.reject({ msg: "登录状态异常,请重新登录。" });
} else if (json.data.op_2 === "true") {
def.reject({ msg: "排队人数过多,不允许提交订单。排队人数=" + json.data.countT });
} else {
submitOrder();
}
}, function () {
def.reject({ msg: "12306不给力啊唉。出现网络错误了请重试.." });
});
};
var submitOrder = function () {
def.notify({ msg: "正在提交订单..." });
var url = resign ? "confirmPassenger/confirmResignForQueue" : "confirmPassenger/confirmSingleForQueue";
var data = {
passengerTicketStr: pas1,
oldPassengerStr: pas2,
randCode: randcode,
purpose_codes: profile.studentTicket === "1" ? "0X00" : "00",
key_check_isChange: submitData["key_check_isChange"],
leftTicketStr: submitData["leftTicketStr"],
train_location: submitData["train_location"],
_json_att: ajax.userAtts,
REPEAT_SUBMIT_TOKEN: submitToken
}
ajax.sendPost(url, page, data, "json", function (json) {
if (!json || !json.status || !json.data) {
def.reject({ msg: parser.getError(json) });
} else if (!json.data.submitStatus) {
def.reject({ msg: json.data.errMsg || "提交订单错误,错误原因未知..." });
} else {
waitQueueToComplete();
}
}, function () {
def.reject({ msg: "12306不给力啊唉。出现网络错误了请重试.." });
});
};
var waitQueueToComplete = function () {
def.notify({ msg: "正在等待订单处理..." });
var url = "confirmPassenger/queryOrderWaitTime?random=" + Math.random() + "&tourFlag=" + (resign ? "dc" : "gc") + "&_json_att=" + ajax.userAtts + "&REPEAT_SUBMIT_TOKEN=" + submitToken;
var callback = function (json) {
if (!json || !json.status || !json.data) {
def.notify({ msg: "检查队列时出现错误,重试中..." });
setTimeout(sendRequest, 2000);
} else if (!json.data.queryOrderWaitTimeStatus) {
def.reject({ msg: (parser.getError(json) || { message: "检查队列时出现错误,请重试..." }).message });
} else if (json.data.waitTime === -1) {
def.resolve({ orderId: json.data.orderId });
} else if (json.data.waitTime < 0) {
def.reject({ msg: json.data.msg || "出票失败..." });
} else {
def.notify({ msg: "等待订单处理(预计 " + formatSeconds(json.data.waitTime) + " 完成,排队 " + json.data.waitCount + " 人)..." });
setTimeout(sendRequest, 2000);
}
};
var sendRequest = function () {
ajax.sendGet(url, page, null, "json", callback, function () {
def.notify({ msg: "检查队列时出现错误,重试中..." });
setTimeout(sendRequest, 2000);
});
};
var formatSeconds = function (num) {
if (num < 60)
return num + "秒";
var str = (num % 60) + "秒";
num = Math.round(num / 60);
str = (num % 60) + "分" + str;
if (num >= 60) {
num = Math.round(num / 60);
str = num + "时" + str;
}
return str;
};
sendRequest();
};
checkOrderInfo();
2014-06-27 22:25:42 +08:00
return def;
};
});