public async Task <(bool ok, string msg, Dictionary <string, string> form)> CreatePayForm(BackupOrderItem order) { var ctx = await Session.NetClient.RunRequestLoopAsync( _ => Session.NetClient.Create <OtnWebResponse <BaseOtnApiResponseWithFlagAndMsg> >( HttpMethod.Post, "afterNateOrder/continuePayNoCompleteMyOrder", data: new { reserve_no = order.ReserveNo }) ); if (!ctx.IsValid() || ctx.Result.Data?.Flag != true) { return(false, ctx.Get12306ErrorMessage(Assets.SR.Error_DefaultServerError), null); } var ctxPay = await Session.NetClient.RunRequestLoopAsync( _ => Session.NetClient.Create( HttpMethod.Post, "afterNatePay/paycheck", result: OtnWebResponse.Create(new { flag = false, payForm = new Dictionary <string, string>() })) ); if (!ctxPay.IsValid() || ctxPay.Result.Data?.flag != true || ctxPay.Result.Data?.payForm == null) { return(false, ctx.Get12306ErrorMessage(Assets.SR.Error_DefaultServerError), null); } return(true, null, ctxPay.Result.Data.payForm); }
/// <summary> /// 取消排队中订单 /// </summary> /// <returns></returns> public async Task <(bool ok, string msg)> CancelWaitingOrderAsync() { var apiUrl = "afterNateOrder/cancelWaitingHOrder"; var ctx = await Session.NetClient.RunRequestLoopAsync( _ => Session.NetClient.Create( HttpMethod.Post, apiUrl, result: OtnWebResponse.Create(new { flag = false, msg = "" }) ) ); var result = ctx.Result; var error = ctx.Get12306ErrorMessage(); if (error != null) { return(false, error); } if (!result.Data.flag) { return(false, result.Data.msg.DefaultForEmpty("哎哟……取消排队失败了……")); } return(true, null); }
public async Task <(bool ok, string msg)> CancelNotCompleteOrder(BackupOrderItem order, Func <double, bool> confirm) { var api = order.StatusCode == 1 ? "afterNateOrder/cancelNotComplete" : "afterNateOrder/reserveReturnCheck"; var data = order.StatusCode == 1 ? (object)new { reserve_no = order.ReserveNo } : new { sequence_no = order.ReserveNo }; var ctx = await Session.NetClient.RunRequestLoopAsync( _ => Session.NetClient.Create( HttpMethod.Post, api, data: data, result: OtnWebResponse.Create(new { flag = false, msg = "", data = 0.0 })) ); if (!ctx.IsValid() || ctx.Result.Data?.flag != true) { return(false, ctx.Get12306ErrorMessage(Assets.SR.Error_DefaultServerError)); } if (order.StatusCode > 1) { //确认退费 if (confirm?.Invoke(ctx.Result.Data.data) == false) { return(false, "已终止取消订单"); } var ctxRet = await Session.NetClient.RunRequestLoopAsync( _ => Session.NetClient.Create( HttpMethod.Post, "afterNateOrder/reserveReturn", data: data, result: OtnWebResponse.Create(new { flag = false, msg = "" })) ); if (!ctxRet.IsValid() || ctxRet.Result.Data?.flag != true) { return(false, ctxRet.Get12306ErrorMessage(Assets.SR.Error_DefaultServerError)); } } return(true, null); }
/// <summary> /// 获得已完成订单 /// </summary> /// <returns></returns> public async Task <(bool ok, string msg, List <BackupOrderItem>)> GetProcessedHbOrderItemsAsync() { var apiUrl = "afterNateOrder/queryProcessedHOrder"; var pageNo = 0; var pageTotal = 1; var resultList = new List <BackupOrderItem>(); while (pageNo < pageTotal) { var ctx = await Session.NetClient.RunRequestLoopAsync( _ => Session.NetClient.Create( HttpMethod.Post, apiUrl, data: new { page_no = pageNo, query_start_date = DateTime.Now.ToString("yyyy-MM-dd"), query_end_date = DateTime.Now.Date.AddDays(22).ToString("yyyy-MM-dd") }, result: OtnWebResponse.Create(new { list = new List <BackupOrderItem>() }) ) ); if (!ctx.IsValid() || !ctx.Result.IsValid() || ctx.Result.Data.list == null) { return(false, ctx.Get12306ErrorMessage(), null); } resultList.AddRange(ctx.Result.Data.list); if (ctx.Result.Data?.list?.Count > 0) { pageTotal = Math.Max(pageTotal, ctx.Result.Data.list[0].TotalPage); } pageNo++; } return(true, null, resultList); }
public async Task <(bool success, string message)> SubmitOrderRequestAsync() { var data = new { secretList = Session.BackupOrderCart.ToSecretList() }; var ctx = await Session.NetClient.RunRequestLoopAsync(_ => Session.NetClient.Create <OtnWebResponse <SubmitBackupOrderResponse> >(HttpMethod.Post, "afterNate/submitOrderRequest", data: data)); var result = ctx.Result; var error = ctx.Get12306ErrorMessage(); if (error != null) { return(false, error); } if (!result.Data.Flag) { if (result.Data.FaceCheck.HasValue) { return(false, GetFaceCheckMsg(result.Data.FaceCheck.Value)); } return(false, result.GetErrorMessages(JsonConvert.SerializeObject(result.Data))); } //测试 1:初始化 var ctxInit = await Session.NetClient.RunRequestLoopAsync(_ => Session.NetClient.Create(HttpMethod.Post, "afterNate/passengerInitApi", result: OtnWebResponse.Create(new { checkcode = 0, if_check_slide_passcode = 0, if_check_slide_passcode_token = "", isLimitTran = "Y", jzdhDateE = "", jzdhDateS = "", jzdhHourE = "", jzdhHourS = "", limitTranStr = new List <string>(), result_code = 0 }))); if (!ctxInit.IsValid() || !ctxInit.Result.Status) { return(false, ctxInit.Get12306ErrorMessage()); } if (ctxInit.Result.Data.result_code != 0) { return(false, $"无效响应:{ctxInit.ResponseContent.RawStringResult}"); } //时间 var initData = ctxInit.Result.Data; var cart = Session.BackupOrderCart; if (!initData.jzdhDateS.IsNullOrEmpty() && !initData.jzdhHourS.IsNullOrEmpty()) { cart.HbStartTime = DateTime.Parse(initData.jzdhDateS).Add(TimeSpan.Parse(initData.jzdhHourS)); } else { cart.HbStartTime = DateTime.Now; } if (!initData.jzdhDateE.IsNullOrEmpty() && !initData.jzdhHourE.IsNullOrEmpty()) { cart.HbEndTime = DateTime.Parse(initData.jzdhDateE).Add(TimeSpan.Parse(initData.jzdhHourE)); } else { cart.HbEndTime = cart.Items.Select(s => s.Train.Date).Min().AddDays(-1).AddHours(19).AddMinutes(30); } //滑动验证 cart.SlideToken = initData.if_check_slide_passcode_token; cart.NeedSlideVc = initData.if_check_slide_passcode == 1; cart.SlideCSessionId = null; cart.SlideSig = null; return(true, null); }
public async Task <(int level, string info)> GetSuccessRateAsync(string submitInfo, char seat) { var data = new { successSecret = $"{submitInfo}#{seat}" }; var ctx = await Session.NetClient.RunRequestLoopAsync(_ => Session.NetClient.Create(HttpMethod.Post, "afterNate/getSuccessRate", data: data, result: OtnWebResponse.Create(new { flag = FSLib.Extension.CollectionUtility.CreateAnymousTypeList(new { level = 0, info = "" }) })) ); var result = ctx.Result; var error = ctx.Get12306ErrorMessage(); if (error != null || !(result.Data?.flag?.Count > 0)) { return(0, "查询候补人数出错"); } return(result.Data.flag[0].level, result.Data.flag[0].info); }