Пример #1
0
        private static bool GetTask(Train train, string date, SeatsType seat, List <Contact> selectContactList)
        {
            ShowMessage(null, new List <Message>()
            {
                new Message("开始抢票...", Color.Yellow)
            });
            var v = _12306Class.GetTask(train, date, seat, selectContactList);

            if (v != null && !v.IsCreate)
            {
                // MessageBox.Show(Program.mainForm, v.Message);
                ShowMessage(null, new List <Message>()
                {
                    new Message("抢票失败..." + v.Message, Color.Red)
                });
            }
            else
            {
                ShowMessage(null, new List <Message>()
                {
                    new Message("抢票  ...", Color.Yellow), new Message(v.Message, Color.Red)
                });
            }
            return(v.IsCreate);
        }
Пример #2
0
        public static void AddSelectSeats(SeatsType type)
        {
            if (!SelectSeats.Contains(type))
            {
                SelectSeats.Add(type);

                if (SelectSeatsChange != null)
                {
                    SelectSeatsChange(null, SelectSeats);
                }
            }
        }
Пример #3
0
        public static void AddSelectSeats(SeatsType type)
        {
            if (!SelectSeats.Contains(type))
            {
                SelectSeats.Add(type);

                if (SelectSeatsChange != null)
                {
                    SelectSeatsChange(null, SelectSeats);
                }
            }
        }
Пример #4
0
        public static Seat Create(SeatsType type, string count)
        {
            var seat = new Seat();

            seat.Name  = type.ToString();
            seat.Count = count;
            switch (type)
            {
            case SeatsType.商务座:
                seat.Id = "9";
                break;

            case SeatsType.特等座:
                seat.Id = "P";
                break;

            case SeatsType.二等座:
                seat.Id = "M";
                break;

            case SeatsType.一等座:
                seat.Id = "O";
                break;

            case SeatsType.硬卧:
                seat.Id = "3";
                break;

            case SeatsType.硬座:
                seat.Id = "1";
                break;

            case SeatsType.软卧:
                seat.Id = "4";
                break;

            case SeatsType.软座:
                seat.Id = "2";
                break;

            case SeatsType.无座:
                seat.Id = "1";
                break;
            }

            return(seat);
        }
Пример #5
0
        public static Seat Create(SeatsType type, string count)
        {
            var seat = new Seat();
            seat.Name = type.ToString();
            seat.Count = count;
            switch (type)
            {
                case SeatsType.商务座:
                    seat.Id = "9";
                    break;
                case SeatsType.特等座:
                    seat.Id = "P";
                    break;
                case SeatsType.二等座:
                    seat.Id = "M";
                    break;
                case SeatsType.一等座:
                    seat.Id = "O";
                    break;
                case SeatsType.硬卧:
                    seat.Id = "3";
                    break;
                case SeatsType.硬座:
                    seat.Id = "1";
                    break;
                case SeatsType.软卧:
                    seat.Id = "4";
                    break;
                case SeatsType.软座:
                    seat.Id = "2";
                    break;
                case SeatsType.无座:
                    seat.Id = "1";
                    break;
            }

            return seat;
        }
Пример #6
0
        private static bool GetTask(Train train, string date, SeatsType seat, List<Contact> selectContactList)
        {
            ShowMessage(null, new List<Message>() { new Message("开始抢票...",Color.Yellow) });
            var v = _12306Class.GetTask(train, date, seat,selectContactList);

            if (v != null && !v.IsCreate)
            {
               // MessageBox.Show(Program.mainForm, v.Message);
                ShowMessage(null,new List<Message>() { new Message("抢票失败..."+v.Message,Color.Red) });
            }
            else
            {
                ShowMessage(null, new List<Message>() { new Message("抢票  ...", Color.Yellow), new Message(v.Message, Color.Red) });
            }
            return v.IsCreate;
        }
Пример #7
0
        public ActionResult Buy(int tripId, int depOrder, int arrOrder, SeatsType seatsType)
        {
            using (var transaction = _context.Database.BeginTransaction())
            {
                try
                {
                    Trip trip          = _context.Trips.First(t => t.TripId == tripId);
                    int  occupiedSeats = trip
                                         .Tickets.Count(ticket => ticket.SeatsType == seatsType &&
                                                        ((ticket.StartStationOrder >= depOrder &&
                                                          ticket.StartStationOrder < arrOrder) ||
                                                         (ticket.EndStationOrder > depOrder &&
                                                          ticket.EndStationOrder <= arrOrder)));
                    int thisTypeTrainCapacity;

                    switch (seatsType)
                    {
                    //еще наверно собрать из имени enum + Capacity,
                    //но где гарантия что при добавлении полей в enum их назовут так же
                    case SeatsType.FirstClass:
                        thisTypeTrainCapacity = trip.Train.FirstClassCapacity;
                        break;

                    case SeatsType.SecondClass:
                        thisTypeTrainCapacity = trip.Train.SecondClassCapacity;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException(nameof(seatsType), seatsType, null);
                    }

                    if (thisTypeTrainCapacity > occupiedSeats)
                    {
                        Ticket ticket = new Ticket()
                        {
                            TripId            = tripId,
                            StartStationOrder = depOrder,
                            EndStationOrder   = arrOrder,
                            UserId            = User.Identity.GetUserId(),
                            SeatsType         = seatsType
                        };
                        _context.Tickets.Add(ticket);
                        _context.SaveChanges();
                        transaction.Commit();

                        // чет не понял как проверить результат транзакции
                        ViewBag.Success  = true;
                        ViewBag.TicketId = ticket.TicketId;
                    }
                    else
                    {
                        transaction.Rollback();
                        ViewBag.Success = false;
                    }
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    ViewBag.Success = false;
                }
            }

            return(View());
        }
Пример #8
0
        public static CreateResponse GetTask(Train train, string date, SeatsType seat, List<Contact> selectContactList)
        {
            string seatType = "";

            switch (seat)
            {
                case SeatsType.商务座:
                    seatType = "9";
                    break;
                case SeatsType.特等座:
                    seatType = "P";
                    break;
                case SeatsType.一等座:
                    seatType = "M";
                    break;
                case SeatsType.二等座:
                    seatType = "O";
                    break;
                case SeatsType.高级软卧:
                    seatType = "5";
                    break;
                case SeatsType.软卧:
                    seatType = "4";
                    break;
                case SeatsType.硬卧:
                    seatType = "3";
                    break;
                case SeatsType.软座:
                    seatType = "2";
                    break;
                case SeatsType.硬座:
                    seatType = "1";
                    break;
                case SeatsType.无座:
                    seatType = "1";
                    break;
            }

            StringBuilder passengerTicketStr = new StringBuilder();
            StringBuilder oldPassengerStr = new StringBuilder();

            foreach (Contact contact in selectContactList)
            {
                passengerTicketStr.AppendFormat("{0},0,1,{1},{2},{3},{4},N_", seatType, contact.Name, contact.IdTypeCode, contact.IdNo, contact.Mobile);
                oldPassengerStr.AppendFormat("{1},{2},{3},1_", seatType, contact.Name, contact.IdTypeCode, contact.IdNo, contact.Mobile);
            }

            Dictionary<string, string> dic = new Dictionary<string, string>();
            dic.Add("secretStr", train.Id);
            dic.Add("train_date", date);
            dic.Add("tour_flag", "dc");
            dic.Add("purpose_codes", "ADULT");
            dic.Add("query_from_station_name", From.Name);
            dic.Add("query_to_station_name", To.Name);
            dic.Add("", "");
            dic.Add("cancel_flag", "2");
            dic.Add("bed_level_order_num", "000000000000000000000000000000");
            dic.Add("passengerTicketStr", passengerTicketStr.ToString().TrimEnd('_'));
            dic.Add("oldPassengerStr", oldPassengerStr.ToString());

            var codeResquest = new HttpHelper2().Post(GetTask_1_GetToken,
                dic, Encoding.UTF8, Encoding.UTF8, Referer: "https://kyfw.12306.cn/otn/leftTicket/init",cookies:Cookies
                , headers: new Dictionary<string, string>() { { "Origin", "https://kyfw.12306.cn" } });

            if (codeResquest == null)
            {
                return new CreateResponse(){IsCreate =  false,Message = "Errorl"};
            }

            var serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
            dynamic data = serializer.Deserialize<object>(codeResquest);

            if (data.status == null || !data.status || data.data == null || data.data.result == null)
            {
                try
                {
                    return new CreateResponse() { IsCreate = false, Message = data.messages != null ? data.messages[0] ?? "未知错误" : "未知错误" };
                }
                catch (Exception)
                {
                    return new CreateResponse() { IsCreate = false, Message = data.errMsg ?? "未知错误"  };
                }
            }

            //Q6#BA6C4F23E49E84F96A07B8ECA37A9FF350DAD2E2F484AD96F61C2046#O007450669M0099501499019950025#1
            Token token = new Token();

            string[] tokens = data.data.result.Split('#');;

            token.Q = tokens[0];
            token.LongToken = tokens[1];
            token.ShortToken = tokens[2];

            dic.Clear();
            dic.Add("train_date",
                (Convert.ToDateTime(date).ToString("ddd MMM dd yyy ", DateTimeFormatInfo.InvariantInfo) +
                 DateTime.Now.ToString("HH:mm:ss").Replace(":", "%3A") + " GMT%2B0800  (China Standard Time)").Replace(' ', '+'));
            dic.Add("train_no", train.TrainNo);
            dic.Add("stationTrainCode", train.StationTrainCode);
            dic.Add("seatType", seatType);
            dic.Add("fromStationTelecode", train.from_station_telecode);
            dic.Add("toStationTelecode", train.end_station_telecode);
            dic.Add("leftTicket", token.ShortToken);
            dic.Add("purpose_codes", "ADULT");
            dic.Add("_json_att", "");

            CookieCollection cookiesTemp = new CookieCollection();

            cookiesTemp.Add(Cookies);

            cookiesTemp.Add(new Cookie("_jc_save_fromStation", escape(From.Name) + "%2C" + From.Code, "/otn") { Domain = "kyfw.12306.cn" });
            cookiesTemp.Add(new Cookie("_jc_save_toStation", escape(To.Name) + "%2C" + To.Code, "/otn") { Domain = "kyfw.12306.cn" });
            cookiesTemp.Add(new Cookie("_jc_save_fromDate", date, "/otn") { Domain = "kyfw.12306.cn" });
            cookiesTemp.Add(new Cookie("_jc_save_toDate", Convert.ToDateTime(date).AddDays(15).ToString("yyyy-MM-dd"), "/otn") { Domain = "kyfw.12306.cn" });
            cookiesTemp.Add(new Cookie("_jc_save_wfdc_flag", "dc", "/otn") { Domain = "kyfw.12306.cn" });

            codeResquest = new HttpHelper2().Post(GetTask_2_GetQueueCount,
                dic, Encoding.UTF8, Encoding.UTF8, cookies: cookiesTemp,
                Referer: "https://kyfw.12306.cn/otn/leftTicket/init"
                ,
                headers:
                    new Dictionary<string, string>()
                    {
                        {"Origin", "https://kyfw.12306.cn"},
                        {"X-Requested-With", "XMLHttpRequest"}
                    });

            serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
            data = serializer.Deserialize<object>(codeResquest);

            if (data.status == null || !data.status || data.data == null || data.data.ticket == null)
            {
                return new CreateResponse() { IsCreate = false, Message = data.messages != null ? data.messages[0] ?? "未知错误" : "未知错误" };
            }

            token.ticket = data.data.ticket;
            string Code = "";
            try
            {
                do
                {
                    var response = HttpHelper.CreateGetHttpResponse(GetTask_3_Image + new Random().NextDouble().ToString(),
                                null, "https://kyfw.12306.cn/otn/leftTicket/init", Cookies);
                    Stream resStream = response.GetResponseStream();//得到验证码数据流
                    Bitmap bmp =  new Bitmap(resStream);//初始化Bitmap图片
                    new Music(2).Play();
                    ImageFrom.GetImageFrom.Show(bmp);
                    Code = ImageFrom.GetImageFrom.Code;
                } while (Code.Length != 4 && Program.mainForm.GetRunStatus());
            }
            catch (Exception)
            {
                return new CreateResponse() { IsCreate = false, Message = data.data.errMsg ?? "未知错误" };
            }

            //dic.Clear();
            //dic.Add("randCode", Code);
            //dic.Add("rand", "sjrand");
            //dic.Add("_json_att", "");

            //codeResquest = new HttpHelper2().Post("https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn",
            //  dic, Encoding.UTF8, Encoding.UTF8, Referer: "https://kyfw.12306.cn/otn/leftTicket/init", cookies: cookiesTemp
            //  , headers:
            //      new Dictionary<string, string>()
            //        {
            //            {"Origin", "https://kyfw.12306.cn"},
            //            {"X-Requested-With", "XMLHttpRequest"}
            //        });

            dic.Clear();
            dic.Add("passengerTicketStr", System.Web.HttpUtility.UrlEncode((passengerTicketStr.ToString().TrimEnd('_'))).ToUpper());
            dic.Add("oldPassengerStr", System.Web.HttpUtility.UrlEncode(oldPassengerStr.ToString()).ToUpper());
            dic.Add("randCode", Code);
            dic.Add("purpose_codes", "ADULT");
            dic.Add("key_check_isChange", token.LongToken);
            dic.Add("leftTicketStr", token.ShortToken);
            dic.Add("train_location", token.Q);
            dic.Add("_json_att", "");

            cookiesTemp = new CookieCollection();

            cookiesTemp.Add(Cookies);

            cookiesTemp.Add(new Cookie("_jc_save_fromStation", escape(From.Name) + "%2C" + From.Code, "/otn") { Domain = "kyfw.12306.cn" });
            cookiesTemp.Add(new Cookie("_jc_save_toStation", escape(To.Name) + "%2C" + To.Code, "/otn") { Domain = "kyfw.12306.cn" });
            cookiesTemp.Add(new Cookie("_jc_save_fromDate", date, "/otn") { Domain = "kyfw.12306.cn" });
            cookiesTemp.Add(new Cookie("_jc_save_toDate", Convert.ToDateTime(date).AddDays(15).ToString("yyyy-MM-dd"), "/otn") { Domain = "kyfw.12306.cn" });
            cookiesTemp.Add(new Cookie("_jc_save_wfdc_flag", "dc", "/otn") { Domain = "kyfw.12306.cn" });

            codeResquest = new HttpHelper2().Post(GetTask_4_SubmitStatus,
                dic, Encoding.UTF8, Encoding.UTF8, Referer: "https://kyfw.12306.cn/otn/leftTicket/init", cookies: cookiesTemp
                , headers:
                    new Dictionary<string, string>()
                    {
                        {"Origin", "https://kyfw.12306.cn"},
                        {"X-Requested-With", "XMLHttpRequest"}
                    });

            if (codeResquest == null)
            {
                return new CreateResponse() { IsCreate = false, Message = "Errorl" };
            }

            serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
            data = serializer.Deserialize<object>(codeResquest);

            if (data.status == null || !data.status || data.data == null || data.data.submitStatus == null)
            {
                try
                {
                    return new CreateResponse() { IsCreate = false, Message = data.messages != null ? data.messages[0] ?? "未知错误" : "未知错误" };
                }
                catch (Exception)
                {
                    return new CreateResponse() { IsCreate = false, Message = data.data.errMsg ?? "未知错误" };
                }
            }
            else if (data.data != null && data.data.submitStatus!=null)
            {
                if (data.data.submitStatus)
                {
                    TickCute.ChangeTickCount(-1);
                    new Music(1).Play();
                    Program.mainForm.SetLinkLabelText("订票成功!登录12306查看!<-");
                    return new CreateResponse() { IsCreate = true, Message = "订票成功!" };
                }
                else
                {
                    return new CreateResponse() { IsCreate = false, Message = "订票失败!" };
                }
            }

            return new CreateResponse() { IsCreate = false, Message = data.messages != null ? data.messages[0] ?? "未知错误" : "未知错误" };
            //else if (data.messages.Count <=0)
            //{
            //    return new LoginResponse() { IsLogined = true, Message = "", type = ErrorType.None, LoginName = userName };

            //}
        }
Пример #9
0
        public static CreateResponse GetTask(Train train, string date, SeatsType seat, List <Contact> selectContactList)
        {
            string seatType = "";

            switch (seat)
            {
            case SeatsType.商务座:
                seatType = "9";
                break;

            case SeatsType.特等座:
                seatType = "P";
                break;

            case SeatsType.一等座:
                seatType = "M";
                break;

            case SeatsType.二等座:
                seatType = "O";
                break;

            case SeatsType.高级软卧:
                seatType = "5";
                break;

            case SeatsType.软卧:
                seatType = "4";
                break;

            case SeatsType.硬卧:
                seatType = "3";
                break;

            case SeatsType.软座:
                seatType = "2";
                break;

            case SeatsType.硬座:
                seatType = "1";
                break;

            case SeatsType.无座:
                seatType = "1";
                break;
            }

            StringBuilder passengerTicketStr = new StringBuilder();
            StringBuilder oldPassengerStr    = new StringBuilder();

            foreach (Contact contact in selectContactList)
            {
                passengerTicketStr.AppendFormat("{0},0,1,{1},{2},{3},{4},N_", seatType, contact.Name, contact.IdTypeCode, contact.IdNo, contact.Mobile);
                oldPassengerStr.AppendFormat("{1},{2},{3},1_", seatType, contact.Name, contact.IdTypeCode, contact.IdNo, contact.Mobile);
            }


            Dictionary <string, string> dic = new Dictionary <string, string>();

            dic.Add("secretStr", train.Id);
            dic.Add("train_date", date);
            dic.Add("tour_flag", "dc");
            dic.Add("purpose_codes", "ADULT");
            dic.Add("query_from_station_name", From.Name);
            dic.Add("query_to_station_name", To.Name);
            dic.Add("", "");
            dic.Add("cancel_flag", "2");
            dic.Add("bed_level_order_num", "000000000000000000000000000000");
            dic.Add("passengerTicketStr", passengerTicketStr.ToString().TrimEnd('_'));
            dic.Add("oldPassengerStr", oldPassengerStr.ToString());

            var codeResquest = new HttpHelper2().Post(GetTask_1_GetToken,
                                                      dic, Encoding.UTF8, Encoding.UTF8, Referer: "https://kyfw.12306.cn/otn/leftTicket/init", cookies: Cookies
                                                      , headers: new Dictionary <string, string>()
            {
                { "Origin", "https://kyfw.12306.cn" }
            });

            if (codeResquest == null)
            {
                return(new CreateResponse()
                {
                    IsCreate = false, Message = "Errorl"
                });
            }

            var serializer = new JavaScriptSerializer();

            serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
            dynamic data = serializer.Deserialize <object>(codeResquest);

            if (data.status == null || !data.status || data.data == null || data.data.result == null)
            {
                try
                {
                    return(new CreateResponse()
                    {
                        IsCreate = false, Message = data.messages != null ? data.messages[0] ?? "未知错误" : "未知错误"
                    });
                }
                catch (Exception)
                {
                    return(new CreateResponse()
                    {
                        IsCreate = false, Message = data.errMsg ?? "未知错误"
                    });
                }
            }

            //Q6#BA6C4F23E49E84F96A07B8ECA37A9FF350DAD2E2F484AD96F61C2046#O007450669M0099501499019950025#1
            Token token = new Token();

            string[] tokens = data.data.result.Split('#');;

            token.Q          = tokens[0];
            token.LongToken  = tokens[1];
            token.ShortToken = tokens[2];


            dic.Clear();
            dic.Add("train_date",
                    (Convert.ToDateTime(date).ToString("ddd MMM dd yyy ", DateTimeFormatInfo.InvariantInfo) +
                     DateTime.Now.ToString("HH:mm:ss").Replace(":", "%3A") + " GMT%2B0800  (China Standard Time)").Replace(' ', '+'));
            dic.Add("train_no", train.TrainNo);
            dic.Add("stationTrainCode", train.StationTrainCode);
            dic.Add("seatType", seatType);
            dic.Add("fromStationTelecode", train.from_station_telecode);
            dic.Add("toStationTelecode", train.end_station_telecode);
            dic.Add("leftTicket", token.ShortToken);
            dic.Add("purpose_codes", "ADULT");
            dic.Add("_json_att", "");


            CookieCollection cookiesTemp = new CookieCollection();

            cookiesTemp.Add(Cookies);

            cookiesTemp.Add(new Cookie("_jc_save_fromStation", escape(From.Name) + "%2C" + From.Code, "/otn")
            {
                Domain = "kyfw.12306.cn"
            });
            cookiesTemp.Add(new Cookie("_jc_save_toStation", escape(To.Name) + "%2C" + To.Code, "/otn")
            {
                Domain = "kyfw.12306.cn"
            });
            cookiesTemp.Add(new Cookie("_jc_save_fromDate", date, "/otn")
            {
                Domain = "kyfw.12306.cn"
            });
            cookiesTemp.Add(new Cookie("_jc_save_toDate", Convert.ToDateTime(date).AddDays(15).ToString("yyyy-MM-dd"), "/otn")
            {
                Domain = "kyfw.12306.cn"
            });
            cookiesTemp.Add(new Cookie("_jc_save_wfdc_flag", "dc", "/otn")
            {
                Domain = "kyfw.12306.cn"
            });

            codeResquest = new HttpHelper2().Post(GetTask_2_GetQueueCount,
                                                  dic, Encoding.UTF8, Encoding.UTF8, cookies: cookiesTemp,
                                                  Referer: "https://kyfw.12306.cn/otn/leftTicket/init"
                                                  ,
                                                  headers:
                                                  new Dictionary <string, string>()
            {
                { "Origin", "https://kyfw.12306.cn" },
                { "X-Requested-With", "XMLHttpRequest" }
            });

            serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
            data = serializer.Deserialize <object>(codeResquest);

            if (data.status == null || !data.status || data.data == null || data.data.ticket == null)
            {
                return(new CreateResponse()
                {
                    IsCreate = false, Message = data.messages != null ? data.messages[0] ?? "未知错误" : "未知错误"
                });
            }

            token.ticket = data.data.ticket;
            string Code = "";

            try
            {
                do
                {
                    var response = HttpHelper.CreateGetHttpResponse(GetTask_3_Image + new Random().NextDouble().ToString(),
                                                                    null, "https://kyfw.12306.cn/otn/leftTicket/init", Cookies);
                    Stream resStream = response.GetResponseStream(); //得到验证码数据流
                    Bitmap bmp       = new Bitmap(resStream);        //初始化Bitmap图片
                    new Music(2).Play();
                    ImageFrom.GetImageFrom.Show(bmp);
                    Code = ImageFrom.GetImageFrom.Code;
                } while (Code.Length != 4 && Program.mainForm.GetRunStatus());
            }
            catch (Exception)
            {
                return(new CreateResponse()
                {
                    IsCreate = false, Message = data.data.errMsg ?? "未知错误"
                });
            }

            //dic.Clear();
            //dic.Add("randCode", Code);
            //dic.Add("rand", "sjrand");
            //dic.Add("_json_att", "");

            //codeResquest = new HttpHelper2().Post("https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn",
            //  dic, Encoding.UTF8, Encoding.UTF8, Referer: "https://kyfw.12306.cn/otn/leftTicket/init", cookies: cookiesTemp
            //  , headers:
            //      new Dictionary<string, string>()
            //        {
            //            {"Origin", "https://kyfw.12306.cn"},
            //            {"X-Requested-With", "XMLHttpRequest"}
            //        });



            dic.Clear();
            dic.Add("passengerTicketStr", System.Web.HttpUtility.UrlEncode((passengerTicketStr.ToString().TrimEnd('_'))).ToUpper());
            dic.Add("oldPassengerStr", System.Web.HttpUtility.UrlEncode(oldPassengerStr.ToString()).ToUpper());
            dic.Add("randCode", Code);
            dic.Add("purpose_codes", "ADULT");
            dic.Add("key_check_isChange", token.LongToken);
            dic.Add("leftTicketStr", token.ShortToken);
            dic.Add("train_location", token.Q);
            dic.Add("_json_att", "");

            cookiesTemp = new CookieCollection();

            cookiesTemp.Add(Cookies);

            cookiesTemp.Add(new Cookie("_jc_save_fromStation", escape(From.Name) + "%2C" + From.Code, "/otn")
            {
                Domain = "kyfw.12306.cn"
            });
            cookiesTemp.Add(new Cookie("_jc_save_toStation", escape(To.Name) + "%2C" + To.Code, "/otn")
            {
                Domain = "kyfw.12306.cn"
            });
            cookiesTemp.Add(new Cookie("_jc_save_fromDate", date, "/otn")
            {
                Domain = "kyfw.12306.cn"
            });
            cookiesTemp.Add(new Cookie("_jc_save_toDate", Convert.ToDateTime(date).AddDays(15).ToString("yyyy-MM-dd"), "/otn")
            {
                Domain = "kyfw.12306.cn"
            });
            cookiesTemp.Add(new Cookie("_jc_save_wfdc_flag", "dc", "/otn")
            {
                Domain = "kyfw.12306.cn"
            });

            codeResquest = new HttpHelper2().Post(GetTask_4_SubmitStatus,
                                                  dic, Encoding.UTF8, Encoding.UTF8, Referer: "https://kyfw.12306.cn/otn/leftTicket/init", cookies: cookiesTemp
                                                  , headers:
                                                  new Dictionary <string, string>()
            {
                { "Origin", "https://kyfw.12306.cn" },
                { "X-Requested-With", "XMLHttpRequest" }
            });


            if (codeResquest == null)
            {
                return(new CreateResponse()
                {
                    IsCreate = false, Message = "Errorl"
                });
            }

            serializer = new JavaScriptSerializer();
            serializer.RegisterConverters(new[] { new DynamicJsonConverter() });
            data = serializer.Deserialize <object>(codeResquest);

            if (data.status == null || !data.status || data.data == null || data.data.submitStatus == null)
            {
                try
                {
                    return(new CreateResponse()
                    {
                        IsCreate = false, Message = data.messages != null ? data.messages[0] ?? "未知错误" : "未知错误"
                    });
                }
                catch (Exception)
                {
                    return(new CreateResponse()
                    {
                        IsCreate = false, Message = data.data.errMsg ?? "未知错误"
                    });
                }
            }
            else if (data.data != null && data.data.submitStatus != null)
            {
                if (data.data.submitStatus)
                {
                    TickCute.ChangeTickCount(-1);
                    new Music(1).Play();
                    Program.mainForm.SetLinkLabelText("订票成功!登录12306查看!<-");
                    return(new CreateResponse()
                    {
                        IsCreate = true, Message = "订票成功!"
                    });
                }
                else
                {
                    return(new CreateResponse()
                    {
                        IsCreate = false, Message = "订票失败!"
                    });
                }
            }


            return(new CreateResponse()
            {
                IsCreate = false, Message = data.messages != null ? data.messages[0] ?? "未知错误" : "未知错误"
            });
            //else if (data.messages.Count <=0)
            //{
            //    return new LoginResponse() { IsLogined = true, Message = "", type = ErrorType.None, LoginName = userName };

            //}
        }
Пример #10
0
        static BusTimeData[] CreateBusTimeData(string jsonString)
        {
            JsonValue json = JsonValue.Parse(jsonString)["Siri"]["ServiceDelivery"]["StopMonitoringDelivery"][0];

            if (json == null)
            {
                Print("NULL RESULT."); return(null);
            }
            Print("Successful Request");

            List <BusTimeData> results = new List <BusTimeData>();

            foreach (JsonValue j in json["MonitoredStopVisit"])
            {
                JsonValue stopVisit = j["MonitoredVehicleJourney"];

                SeatsType occupancy = SeatsType.notAvailable;
                if (stopVisit.ContainsKey("Occupancy"))
                {
                    switch ((string)stopVisit["Occupancy"])
                    {
                    case "full":
                        occupancy = SeatsType.full;
                        break;

                    case "seatsAvailable":
                        occupancy = SeatsType.seatsAvailable;
                        break;

                    case "standingAvailable":
                        occupancy = SeatsType.standingAvailable;
                        break;
                    }
                }

                BusTimeData result = new BusTimeData
                {
                    name            = stopVisit["PublishedLineName"][0].ToString(),
                    destinationName = stopVisit["DestinationName"][0].ToString(),
                    departureTime   = TryGetJsonValue(stopVisit, "OriginAimedDepartureTime"),

                    location = new Location
                    {
                        longitude = stopVisit["VehicleLocation"]["Longitude"],
                        latitude  = stopVisit["VehicleLocation"]["Latitude"],
                        bearing   = stopVisit["Bearing"]
                    },

                    occupancy = occupancy,

                    stopData = new MonitoredCall
                    {
                        distanceFromStop  = stopVisit["MonitoredCall"]["DistanceFromStop"],
                        numberOfStopsAway = stopVisit["MonitoredCall"]["NumberOfStopsAway"],
                        visitNumber       = stopVisit["MonitoredCall"]["VisitNumber"]
                    },

                    monitored  = stopVisit["Monitored"],
                    vehicleRef = stopVisit["VehicleRef"].ToString()
                };
                results.Add(result);
            }
            return(results.ToArray());
        }