[HttpPost]//[AcceptVerbs("Post")] public IActionResult confirmPkg([FromBody] confirmPkgInfo confirm) { try { //要存redis往後帶 string guid = confirm.guid; string confirmStr = JsonConvert.SerializeObject(confirm); RedisHelper.SetRedis(confirmStr, "bid:ec:confirm:" + guid, 30); //confirmStr = ""; //confirm = JsonConvert.DeserializeObject<confirmPkgInfo>(RedisHelper.getProdInfotoRedis("bid:ec:confirm:" + guid)); //金額要再確認.... returnStatus status = new returnStatus(); status.status = "OK"; return(Json(status)); } catch (Exception ex) { Website.Instance.logger.Debug($"product_confirmPkg_err:{ex.ToString()}"); returnStatus status = new returnStatus(); status.status = "Error"; status.msgErr = "資料錯誤,請重新讀取頁";//要改 return(Json(status)); } }
//組出價格別與年齡->前端js判斷calender用 public static CusAgeRange getCusAgeRange(confirmPkgInfo confirm, PkgDetailModel pkgsTemp) { CusAgeRange cus = new CusAgeRange(); cus.price1Qty = 0; cus.price2Qty = 0; cus.price3Qty = 0; cus.price4Qty = 0; if (confirm.price1Qty > 0) { cus.price1Qty = confirm.price1Qty; cus.price1sAge = Convert.ToInt32(pkgsTemp.price1_age_range.Split('~')[0]); cus.price1eAge = Convert.ToInt32(pkgsTemp.price1_age_range.Split('~')[1]); } if (confirm.price2Qty > 0) { cus.price2Qty = confirm.price2Qty; cus.price2sAge = Convert.ToInt32(pkgsTemp.price2_age_range.Split('~')[0]); cus.price2eAge = Convert.ToInt32(pkgsTemp.price2_age_range.Split('~')[1]); } if (confirm.price3Qty > 0) { cus.price3Qty = confirm.price3Qty; cus.price3sAge = Convert.ToInt32(pkgsTemp.price3_age_range.Split('~')[0]); cus.price3eAge = Convert.ToInt32(pkgsTemp.price3_age_range.Split('~')[1]); } if (confirm.price4Qty > 0) { cus.price4Qty = confirm.price4Qty; cus.price4sAge = Convert.ToInt32(pkgsTemp.price4_age_range.Split('~')[0]); cus.price4eAge = Convert.ToInt32(pkgsTemp.price4_age_range.Split('~')[1]); } return(cus); }
public static OrderLst insOrderListTemp(ProductModel prod, PkgDetailModel pkg, confirmPkgInfo confirm, DataModel dataModel, B2dAccount UserData, string priceType, int lstSeqno, int?cusSeqno, int prodQty, DiscountRuleModel discRule) { OrderLst lstTemp = new OrderLst(); //lstTemp.lst_seqno = lstSeqno; //lstTemp.cus_seqno = cusSeqno; lstTemp.prod_no = prod.prod_no.ToString(); lstTemp.prod_amt = Convert.ToDouble(priceType == "price1" ? pkg.price1 : priceType == "price2" ? pkg.price2 : priceType == "price3" ? pkg.price3 : pkg.price4); lstTemp.prod_name = prod.prod_name; lstTemp.prod_b2c_amt = Convert.ToDouble(priceType == "price1" ? pkg.price1_b2c : priceType == "price2" ? pkg.price2_b2c : priceType == "price3" ? pkg.price3_b2c : pkg.price4_b2c); lstTemp.prod_currency = UserData.CURRENCY; lstTemp.prod_cond1 = priceType; lstTemp.prod_cond2 = pkg.unit; lstTemp.events = confirm.pkgEvent; lstTemp.pkg_date = confirm.selDate; //lstTemp.discount_xid = 0; lstTemp.pkg_no = pkg.pkg_no; lstTemp.pkg_name = pkg.pkg_name; lstTemp.prod_qty = prodQty; OrderDiscountRule rule = new OrderDiscountRule(); if (discRule.isRule == true) { double discAmt = 0; if (priceType == "price1") { discAmt = pkg.price1_org - pkg.price1; } if (priceType == "price2") { discAmt = pkg.price2_org - pkg.price2; } if (priceType == "price3") { discAmt = Convert.ToDouble(pkg.price3_org - pkg.price3); } if (priceType == "price4") { discAmt = Convert.ToDouble(pkg.price4_org - pkg.price4); } rule.disc_amt = discAmt; rule.disc_currency = UserData.CURRENCY; rule.disc_name = discRule.disc_name; rule.disc_note = ""; //rule.lst_seqno = lstSeqno; lstTemp.order_discount_rule = rule; } else { lstTemp.order_discount_rule = rule; } return(lstTemp); }
//成立b2d 訂單 public static string insB2dOrder(ProdTitleModel title, ProductModel prod, PkgDetailModel pkg, confirmPkgInfo confirm, DataModel dataModel, B2dAccount UserData, DiscountRuleModel discRule) { try { B2dOrderModel order = new B2dOrderModel(); order.connect_mail = dataModel.contactEmail; order.order_date = DateTime.Now; order.order_type = "B2D"; order.order_status = "NW"; order.order_amt = Convert.ToDouble(dataModel.currPriceTotal); order.order_b2c_amt = Convert.ToDouble(dataModel.currPriceTotal); //要重算 order.connect_name = dataModel.asiaMileMemberLastName + " " + dataModel.contactFirstname; order.connect_tel = dataModel.contactTel; order.order_note = dataModel.note; Source source = new Source(); source.booking_type = "WEB"; source.company_xid = UserData.COMPANY_XID; source.channel_oid = UserData.KKDAY_CHANNEL_OID; source.connect_tel = dataModel.contactTel; source.connect_mail = dataModel.contactEmail; source.connect_name = dataModel.asiaMileMemberLastName + " " + dataModel.contactFirstname; source.order_note = dataModel.note; source.client_ip = "127.0.0.1"; source.crt_time = DateTime.Now; order.source = source; List <OrderCus> cusList = new List <OrderCus>(); List <OrderLst> lstList = new List <OrderLst>(); //NORANK 且 (只有一個代表人 或 不要代表人) ->只塞一筆order_lst //NORANK 且要填所有旅客資料->只塞1~*筆order_lst //RANK 且 (只有一個代表人 或 不要代表人) ->只塞1~*筆order_lst //RANK 且要填所有旅客資料 ->只塞1~*筆order_lst int?cusSeqno = 1; int lstSeqno = 1; string priceType = ""; int ii = 0; //滿足cus foreach (CusDataInfo cus in dataModel.travelerData) { if (ii < confirm.price1Qty) { priceType = "price1"; } else if (ii < (confirm.price1Qty + confirm.price2Qty)) { priceType = "price2"; } else if (ii < (confirm.price1Qty + confirm.price2Qty + confirm.price3Qty)) { priceType = "price3"; } else if (ii < (confirm.price1Qty + confirm.price2Qty + confirm.price3Qty + confirm.price4Qty)) { priceType = "price4"; } OrderCus cusTemp = new OrderCus(); //cusTemp.cus_seqno = Convert.ToInt32(cusSeqno); cusTemp.cus_type = priceType; cusTemp.cus_mail = ""; cusTemp.cus_name_e_first = cus.englishName.firstName; cusTemp.cus_name_e_last = cus.englishName.lastName; cusTemp.cus_sex = cus.gender; cusTemp.cus_tel = ""; cusList.Add(cusTemp); cusSeqno = cusSeqno + 1; ii = ii + 1; } if (dataModel.travelerData.Count == 0) { cusSeqno = null; } else { cusSeqno = 1; } if (dataModel.travelerData.Count == 1) { //依priceTeype寫入 if (confirm.price1Qty > 0) { lstList.Add(insOrderListTemp(prod, pkg, confirm, dataModel, UserData, "price1", lstSeqno, 1, Convert.ToInt32(confirm.price1Qty), discRule)); } lstSeqno = lstSeqno + 1; if (confirm.price2Qty > 0) { lstList.Add(insOrderListTemp(prod, pkg, confirm, dataModel, UserData, "price2", lstSeqno, 1, Convert.ToInt32(confirm.price2Qty), discRule)); } lstSeqno = lstSeqno + 1; if (confirm.price3Qty > 0) { lstList.Add(insOrderListTemp(prod, pkg, confirm, dataModel, UserData, "price3", lstSeqno, 1, Convert.ToInt32(confirm.price3Qty), discRule)); } lstSeqno = lstSeqno + 1; if (confirm.price4Qty > 0) { lstList.Add(insOrderListTemp(prod, pkg, confirm, dataModel, UserData, "price4", lstSeqno, 1, Convert.ToInt32(confirm.price4Qty), discRule)); } } else { //依每一個row寫入 for (ii = 0; ii < dataModel.travelerData.Count; ii++) { if (ii < confirm.price1Qty) { priceType = "price1"; } else if (ii < (confirm.price1Qty + confirm.price2Qty)) { priceType = "price2"; } else if (ii < (confirm.price1Qty + confirm.price2Qty + confirm.price3Qty)) { priceType = "price3"; } else if (ii < (confirm.price1Qty + confirm.price2Qty + confirm.price3Qty + confirm.price4Qty)) { priceType = "price4"; } lstList.Add(insOrderListTemp(prod, pkg, confirm, dataModel, UserData, priceType, lstSeqno, cusSeqno, 1, discRule)); lstSeqno = lstSeqno + 1; cusSeqno = cusSeqno + 1; } } order.order_cus = cusList; order.order_lst = lstList; Website.Instance.logger.Debug($"bookingStep1_insB2dOrder:{ JsonConvert.SerializeObject(order)}"); insB2dOrderResult result = ApiHelper.insB2dOrder(order, title); if (result.result == "0000") { Website.Instance.logger.Debug($"bookingStep1_insB2dOrderResult:{ JsonConvert.SerializeObject(result)}"); return(result.order_no); } else { Website.Instance.logger.Debug($"bookingStep1_insB2dOrderResult:{ JsonConvert.SerializeObject(result)}"); throw new Exception(result.result_msg); } } catch (Exception ex) { Website.Instance.logger.Debug($"bookingStep1_insB2dOrderErr:{ JsonConvert.SerializeObject(ex.ToString())}"); throw new Exception(ex.Message.ToString()); } }
//組出booking 頁右邊顯示的內容 public static BookingShowProdModel setBookingShowProd(ProductModel prod, PkgDetailModel pkg, confirmPkgInfo confirm, string currency, PkgEventsModel pkgEvent, ProdTitleModel prodTitle) { BookingShowProdModel prodShow = new BookingShowProdModel(); prodShow.prodOid = prod.prod_no.ToString(); prodShow.prodName = prod.prod_name; prodShow.currency = currency; prodShow.sDate = DateTimeTool.yyyy_mm_dd(confirm.selDate); prodShow.price1Qty = confirm.price1Qty; prodShow.price2Qty = confirm.price2Qty; prodShow.price3Qty = confirm.price3Qty; prodShow.price4Qty = confirm.price4Qty; prodShow.price1 = pkg.price1; prodShow.price2 = pkg.price2; prodShow.price3 = pkg.price3; prodShow.price4 = pkg.price4; prodShow.eventOid = confirm.pkgEvent; if (prod.img_list.Count > 0) { prodShow.photoUrl = Website.Instance.Configuration["kkUrl:imgUrl"].ToString() + prod.img_list[0].img_kkday_url; } prodShow.isRank = pkg.is_unit_pirce == "RANK" ? true : false; prodShow.pkgOid = pkg.pkg_no; prodShow.pkgName = pkg.pkg_name; prodShow.totoalPrice = (prodShow.price1Qty * prodShow.price1) + (prodShow.price2Qty * prodShow.price2) + (prodShow.price3Qty * prodShow.price3) + (prodShow.price4Qty * prodShow.price4); prodShow.unitText = pkg.unit_txt; if (pkgEvent != null) { var eTemp = pkgEvent.events.Where(x => x.day.Equals(confirm.selDate)); foreach (Event e in eTemp) { string[] times = e.event_times.Split(","); foreach (string s in times) { string id = s.Split("_")[0]; if (id.Equals(confirm.pkgEvent)) { prodShow.eventTime = s.Split("_")[1]; break; } } } } //設定回覆確試時間 if (prod.confirm_order_time == 0) { prodShow.confirm_order_time = prodTitle.common_imm_confirm; } else { prodShow.confirm_order_time = prodTitle.booking_step3_check_confirm_hour.Replace("%d", prod.confirm_order_time.ToString()); } return(prodShow); }
public static DataModel setDefaultBookingInfo(string guid, DataModel data, ProductModel prod, PkgDetailModel pkg, confirmPkgInfo confirm, B2dAccount UserData, Pmgw pmgw) { string memUuid = "051794b8-db2a-4fe7-939f-31ab1ee2c719"; data.productOid = confirm.prodOid; data.packageOid = confirm.pkgOid; data.contactFirstname = UserData.NAME_FIRST; data.contactLastname = UserData.NAME_LAST; data.contactEmail = UserData.EMAIL; data.telCountryCd = UserData.TEL_AREA; data.contactTel = UserData.TEL; data.contactCountryCd = UserData.COUNRTY_CODE; data.lstGoDt = confirm.selDate; if (confirm.pkgEvent != null) { data.eventOid = confirm.pkgEvent; } data.price1Qty = confirm.price1Qty; data.price2Qty = confirm.price2Qty == null ? 0 : confirm.price2Qty; data.price3Qty = confirm.price3Qty == null ? 0 : confirm.price3Qty; data.price4Qty = confirm.price4Qty == null ? 0 : confirm.price4Qty; data.payMethod = pmgw.acctdocReceiveMethod;// "ONLINE_CITI";這個地方接pmch要改 data.hasRank = pkg.is_unit_pirce == "RANK" ? "Y" : "N"; //data.productUrlOid = data.productName = prod.prod_name; string[] citys = new string[prod.countries[0].cities.Count]; int i = 0; foreach (City c in prod.countries[0].cities) { citys[i] = c.id; i++; } data.productCity = citys; data.productCountry = prod.countries[0].id; data.productMainCat = prod.prod_type; data.productOrderHandler = prod.prod_hander; data.payPmchOid = "1"; data.currency = UserData.CURRENCY; //先接直客價!! data.currPriceTotal = ((pkg.price1_b2c * confirm.price1Qty) + (pkg.price2_b2c * confirm.price2Qty) + (pkg.price3_b2c * confirm.price3Qty) + (pkg.price4_b2c * confirm.price4Qty));// 263;// (pkg.price1 * confirm.price1Qty) +(pkg.price2 * confirm.price2Qty) +(pkg.price3 * confirm.price3Qty) + (pkg.price4 * confirm.price4Qty); data.crtDevice = "Macintosh"; data.crtBrowser = "Safari"; data.crtBrowserVersion = "12.0"; data.memberUuid = memUuid; data.deviceId = guid; data.tokenKey = MD5Tool.GetMD5(memUuid + guid + Website.Instance.Configuration["kkdayKey:memuuidToken"].ToString());// "897af29c45ed180451c2e6bfa81333b6"; data.riskStatus = "01"; data.multipricePlatform = "01"; data.sourceCode = "WEB"; data.sourceParam1 = ""; data.allowedCardNumberArray = new string[] { }; //senddata data.modules.sendData.moduleData.receiverTel.telCountryCode = UserData.TEL_AREA; data.modules.sendData.moduleData.receiverTel.telNumber = UserData.TEL; //contact data.modules.contactData.moduleData.contactTel.telCountryCode = UserData.TEL_AREA; //rendCar 寫在 js return(data); }
// GET: /<controller>/ public IActionResult Index(string guid) { try { //B2d分銷商資料 var aesUserData = User.Identities.SelectMany(i => i.Claims.Where(c => c.Type == ClaimTypes.UserData).Select(c => c.Value)).FirstOrDefault(); var UserData = JsonConvert.DeserializeObject <B2dAccount>(AesCryptHelper.aesDecryptBase64(aesUserData, Website.Instance.AesCryptKey)); string ip = httpContextAccessor.HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString().Replace("::1", "127.0.0.1"); //取挖字 Dictionary <string, string> uikey = CommonRepostory.getuiKey(RedisHelper, UserData.LOCALE);// RedisHelper.getuiKey(fakeContact.lang); ProdTitleModel title = JsonConvert.DeserializeObject <ProdTitleModel>(JsonConvert.SerializeObject(uikey)); if (guid == null) { throw new Exception(title.common_data_error); } confirmPkgInfo confirm = JsonConvert.DeserializeObject <confirmPkgInfo>(RedisHelper.getRedis("bid:ec:confirm:" + guid)); if (confirm == null) { throw new Exception(title.common_data_error); } //從 api取 ProductModuleModel module = ProductRepostory.getProdModule(UserData.COMPANY_XID, UserData.COUNRTY_CODE, UserData.LOCALE, UserData.CURRENCY, confirm.prodOid, confirm.pkgOid, title); ProductModel prod = ProductRepostory.getProdDtl(UserData.COMPANY_XID, UserData.COUNRTY_CODE, UserData.LOCALE, UserData.CURRENCY, confirm.prodOid, title); PackageModel pkgs = ProductRepostory.getProdPkg(UserData.COMPANY_XID, UserData.COUNRTY_CODE, UserData.LOCALE, UserData.CURRENCY, confirm.prodOid, title); if (prod.result != "0000") { Website.Instance.logger.Debug($"booking_index_getProdDtl_err:prodOid->{confirm.prodOid} ,msg-> {prod.result_msg}"); throw new Exception(title.result_code_9990); } if (pkgs.result != "0000") { Website.Instance.logger.Debug($"booking_index_getProdPkg_err:prodOid->{confirm.prodOid},pkgOid ->{confirm.pkgOid} ,msg-> {prod.result_msg}"); throw new Exception(title.result_code_9990); } string flightInfoType = ""; string sendInfoType = ""; PkgDetailModel pkg = null; PkgEventsModel pkgEvent = null; CusAgeRange cusAgeRange = null; string isEvent = "N"; string isHl = "N"; var pkgsTemp = pkgs.pkgs.Where(x => x.pkg_no == confirm.pkgOid).ToList(); if (pkgsTemp.Count() > 0) { foreach (PkgDetailModel p in pkgsTemp) { pkg = p; flightInfoType = p.module_setting.flight_info_type.value; sendInfoType = p.module_setting.send_info_type.value; cusAgeRange = BookingRepostory.getCusAgeRange(confirm, p); isEvent = p.is_event; isHl = p.is_hl; } } else { //丟錯誤頁 Website.Instance.logger.Debug($"booking_index_err:商編->{confirm.prodOid}即有pkgs找不到對應的pkgoid->{ confirm.pkgOid}"); throw new Exception(title.common_data_error); } //如果有event 但沒有傳 event id ,就error if (isEvent == "Y" && string.IsNullOrEmpty(confirm.pkgEvent)) { throw new Exception(title.common_data_error); } if (isEvent == "Y") { pkgEvent = ApiHelper.getPkgEvent(UserData.COMPANY_XID, UserData.COUNRTY_CODE, UserData.LOCALE, UserData.CURRENCY, confirm.prodOid, confirm.pkgOid, title); } //pmgw PmchLstResponse pmchRes = ApiHelper.getPaymentListRes(prod.countries, prod.prod_no.ToString(), DateTime.Now.ToString("yyyy-MM-dd"), DateTime.Now.ToString("yyyy-MM-dd"), DateTimeTool.yyyyMMdd2DateTime(confirm.selDate).ToString("yyyy-MM-dd"), DateTimeTool.yyyyMMdd2DateTime(confirm.selDate).ToString("yyyy-MM-dd"), UserData.COUNRTY_CODE, UserData.LOCALE, prod.prod_type, ip, prod.prod_hander, UserData.CURRENCY, title); Pmgw pmgw = null; if (UserData.CURRENCY == "TWD") { pmgw = pmchRes.pmchlist.Where(x => x.acctdocReceiveMethod == "ONLINE_CITI" && x.pmchCode == "B2D_CITI_TWD").FirstOrDefault(); } else { pmgw = pmchRes.pmchlist.Where(x => x.acctdocReceiveMethod == "ONLINE_HK_ADYEN").FirstOrDefault(); } //必須要設定人數 //var cusData = BookingRepostory.getCusDdate(); int totalCus = 0; if (module.module_cust_data != null) { if (module.module_cust_data.is_require == true) { totalCus = (module.module_cust_data.cus_type == "01") ? 1 : Convert.ToInt32(confirm.price1Qty + confirm.price2Qty + confirm.price3Qty + confirm.price4Qty); } } //滿足國家 List <Country> country = prod.countries; string nationName = ""; if (country.Count > 0) { nationName = country[0].name; } //將dataModel原型 以json str 帶到前台的hidden DataModel dm = DataSettingRepostory.getDefaultDataModel(totalCus, guid); dm.guidNo = guid; String dataModelStr = JsonConvert.SerializeObject(dm); //dm.travelerData[0].meal.mealType ViewData["dataModelStr"] = dataModelStr; VenueInfo venue = module.module_venue_info; if (venue == null) { venue = new VenueInfo(); venue.is_require = false; } RentCar rentCar = module.module_rent_car; if (rentCar == null) { rentCar = new RentCar(); rentCar.is_require = false; } ViewData["confirmPkgInfo"] = confirm; ViewData["contactInfo"] = UserData; ViewData["cusData"] = module.module_cust_data; ViewData["guide"] = module.module_guide_lang_list; ViewData["wifi"] = module.module_sim_wifi; ViewData["exchange"] = module.module_exchange_location_list; ViewData["flightInfo"] = module.module_flight_info; ViewData["venue"] = venue; // module.module_venue_info; ViewData["useDate"] = DateTimeTool.yyyy_mm_dd(confirm.selDate); //DateTimeTool.yyyy_mm_dd(); ViewData["rentCar"] = rentCar; // module.module_rent_car; ViewData["carPsgr"] = module.module_car_pasgr; //車輛資料 ViewData["sendData"] = module.module_send_data; ViewData["contactData"] = module.module_contact_data; ViewData["nationName"] = nationName; ViewData["guid"] = guid; ViewData["prodTitle"] = title; ViewData["totalCus"] = totalCus; ViewData["mainCat"] = prod.prod_type; ViewData["flightInfoType"] = flightInfoType; ViewData["sendInfoType"] = sendInfoType; ViewData["CutOfDay"] = prod.before_order_day; ViewData["cusAgeRange"] = cusAgeRange; BookingShowProdModel show = BookingRepostory.setBookingShowProd(prod, pkg, confirm, UserData.CURRENCY, pkgEvent, title); ViewData["prodShow"] = show; ViewData["isEvent"] = isEvent; // ViewData["isHl"] = isHl; //如果是N就不用做 ViewData["pkgCanUseDate"] = (isHl == "Y" && isEvent == "Y") ? BookingRepostory.getPkgEventDate(pkgEvent, confirm.pkgOid, (confirm.price1Qty + confirm.price2Qty + confirm.price3Qty + confirm.price4Qty)) : ""; //要把這個套餐可以用的日期全抓出來 ViewData["pmgw"] = pmgw; //放到session TempData["prod_" + guid] = JsonConvert.SerializeObject(prod); TempData["pkgEvent_" + guid] = (isHl == "Y" && isEvent == "Y") ? JsonConvert.SerializeObject(pkgEvent) : ""; TempData["module_" + guid] = JsonConvert.SerializeObject(module); TempData["confirm_" + guid] = JsonConvert.SerializeObject(confirm); TempData["ProdTitleKeep_" + guid] = JsonConvert.SerializeObject(title); TempData["pkg_" + guid] = JsonConvert.SerializeObject(pkg); TempData["pkgsDiscRule_" + guid] = JsonConvert.SerializeObject(pkgs.discount_rule); TempData["prodShow_" + guid] = JsonConvert.SerializeObject(show); TempData["pmgw_" + guid] = JsonConvert.SerializeObject(pmgw); return(View()); } catch (Exception ex) { ViewData["errMsg"] = ex.Message.ToString(); Website.Instance.logger.Debug($"booking_index_err:{ex.Message.ToString()}"); //導到錯誤頁 return(RedirectToAction("Index", "Error", new ErrorViewModel { ErrorType = ErrorType.Invalid_Common })); } }
public IActionResult bookingStep1([FromBody] DataModel data) { try { string memUuid = Website.Instance.Configuration["kkdayKey:uuid"]; string userAgent = Request.Headers["User-Agent"].ToString(); UserAgent ua = new UserAgent(userAgent); //B2d分銷商資料 var aesUserData = User.Identities.SelectMany(i => i.Claims.Where(c => c.Type == ClaimTypes.UserData).Select(c => c.Value)).FirstOrDefault(); var UserData = JsonConvert.DeserializeObject <B2dAccount>(AesCryptHelper.aesDecryptBase64(aesUserData, Website.Instance.AesCryptKey)); string ip = httpContextAccessor.HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString().Replace("::1", "127.0.0.1"); data = BookingRepostory.setCardEncrypt(data); //log時把卡號移除 DataModel dataTemp = data.Clone(); dataTemp.card = null; Website.Instance.logger.Debug($"bookingStep1_inputdata:{ JsonConvert.SerializeObject(dataTemp)}"); string prodStr = TempData["prod_" + data.guidNo] as string; if (string.IsNullOrEmpty(prodStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } ProductModel prod = JsonConvert.DeserializeObject <ProductModel>(prodStr); string moduleStr = TempData["module_" + data.guidNo] as string; if (string.IsNullOrEmpty(moduleStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } ProductModuleModel module = JsonConvert.DeserializeObject <ProductModuleModel>(moduleStr); string pkgStr = TempData["pkg_" + data.guidNo] as string; if (string.IsNullOrEmpty(pkgStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } PkgDetailModel pkg = JsonConvert.DeserializeObject <PkgDetailModel>(pkgStr); string pkgConfirmStr = TempData["confirm_" + data.guidNo] as string; if (string.IsNullOrEmpty(moduleStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } confirmPkgInfo confirm = JsonConvert.DeserializeObject <confirmPkgInfo>(pkgConfirmStr); string titleStr = TempData["ProdTitleKeep_" + data.guidNo] as string; if (string.IsNullOrEmpty(moduleStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } ProdTitleModel title = JsonConvert.DeserializeObject <ProdTitleModel>(titleStr); string discRuleStr = TempData["pkgsDiscRule_" + data.guidNo] as string; if (string.IsNullOrEmpty(discRuleStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } DiscountRuleModel rule = JsonConvert.DeserializeObject <DiscountRuleModel>(discRuleStr); string pmgwStr = TempData["pmgw_" + data.guidNo] as string; if (string.IsNullOrEmpty(pmgwStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } Pmgw pmgw = JsonConvert.DeserializeObject <Pmgw>(pmgwStr); string showStr = TempData["prodShow_" + data.guidNo] as string; if (string.IsNullOrEmpty(showStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } //BookingShowProdModel show = JsonConvert.DeserializeObject<BookingShowProdModel>(showStr); TempData.Keep(); data = BookingRepostory.setDefaultBookingInfo(memUuid, ua, data, prod, pkg, confirm, UserData, pmgw); //排除餐食 data = BookingRepostory.exculdeFood(prod, data, module); data.company_xid = UserData.COMPANY_XID.ToString(); data.channel_oid = UserData.KKDAY_CHANNEL_OID; data.locale = UserData.LOCALE; data.ip = ip; JObject order = ApiHelper.orderNew(data, title); string orderMid = ""; string orderOid = ""; returnStatus status = new returnStatus(); Website.Instance.logger.Debug($"bookingStep1_ordernewresponse:" + JsonConvert.SerializeObject(order));//要改 //要先判斷是不是result='0000' if (order["result"].ToString() == "0000") { orderMid = order["order_mid"].ToString(); orderOid = order["order_oid"].ToString(); //upd B2bOrder //BookingRepostory.updB2dOrder(UserData.COMPANY_XID, orderOid, orderMid, b2bOrder, title); status.pmchSslRequest = BookingRepostory.setPaymentInfo2(prod, data, orderMid, UserData, pmgw, memUuid, ip); status.status = "OK"; status.url = Website.Instance.Configuration["kkUrl:pmchUrl"].ToString() + pmgw.pmchPayURL; //pmchUrl //要把BookingShowProdModel 帶到訂購final頁 RedisHelper.SetRedis(showStr, "b2d:ec:order:final:prodShow:" + orderMid, 60); RedisHelper.SetRedis(JsonConvert.SerializeObject(data), "b2d:ec:order:final:orderData:" + orderMid, 60); //要存redis 付款主要資訊,最後訂單 upd時要使用,可和下面整合存一個就 BookingRepostory.setPayDtltoRedis(data, orderMid, UserData.UUID, RedisHelper); //要存redis 因為付款後要從這個redis內容再進行payment驗證,可和上面整合存一個就好 //CallJsonPay rdsJson = (CallJsonPay)status.pmchSslRequest.json; CallJsonPay2 rdsJson = (CallJsonPay2)status.pmchSslRequest.json; string callPmchReq = JsonConvert.SerializeObject(status.pmchSslRequest.json); RedisHelper.SetRedis(callPmchReq, "b2d:ec:pmchSslRequest:" + orderMid, 60); } else { status.status = "Error"; status.msgErr = order["content"]["result"].ToString() + order["content"]["msg"].ToString();//要改 } return(Json(status)); //v1/channel/citi/auth //https://pmch.sit.kkday.com/citi/payment/auth //https://payment.kkday.com/v1/channel/adyen/auth } catch (Exception ex) { Website.Instance.logger.Debug($"bookingStep1_err_ordernew失敗:{ex.Message.ToString()}"); ViewData["errMsg"] = ex.Message.ToString(); Website.Instance.logger.Debug($"booking_index_err:{ex.Message.ToString()}"); //導到錯誤頁 return(RedirectToAction("Index", "Error", new ErrorViewModel { ErrorType = ErrorType.Order_Fail, ErrorMessage = ex.Message.ToString() })); } }
public IActionResult getEvent([FromBody] EventQury Eventday) { returnBookingEventStatus status = new returnBookingEventStatus(); try { List <string> dayevent = new List <string>(); string day = Eventday.day.Replace("-", ""); string titleJson = (string)TempData["ProdTitleKeep_" + Eventday.guid]; string pkgEventJson = (string)TempData["pkgEvent_" + Eventday.guid]; string confirmJson = (string)TempData["confirm_" + Eventday.guid]; if (string.IsNullOrEmpty(titleJson)) { throw new Exception("資料錯誤,請重新讀取頁面"); } if (string.IsNullOrEmpty(pkgEventJson)) { throw new Exception("資料錯誤,請重新讀取頁面"); } if (string.IsNullOrEmpty(confirmJson)) { throw new Exception("資料錯誤,請重新讀取頁面"); } ProdTitleModel title = JsonConvert.DeserializeObject <ProdTitleModel>(titleJson); PkgEventsModel pkgEvent = JsonConvert.DeserializeObject <PkgEventsModel>(pkgEventJson); confirmPkgInfo confirm = JsonConvert.DeserializeObject <confirmPkgInfo>(confirmJson); var eTemp = pkgEvent.events.Where(x => x.day.Equals(day)); TempData.Keep(); int?BookingQty = (confirm.price1Qty + confirm.price2Qty + confirm.price3Qty + confirm.price4Qty); if (eTemp.Count() > 0) { foreach (Event e in eTemp) { string[] eventTime = e.event_times.Split(','); foreach (string s in eventTime) { string id = s.Split("_")[0]; int Qty = Convert.ToInt32(s.Split("_")[2]); if (Qty >= BookingQty && ((day != confirm.selDate) || (day == confirm.selDate && confirm.pkgEvent != id))) { dayevent.Add(s); } } } status.status = "OK"; status.msgErr = ""; status.dayevent = dayevent; return(Json(status)); } else { //再補回傳的格式 status.status = "FAIL"; status.msgErr = title.product_index_no_event_avalible; return(Json(status)); } } catch (Exception ex) { Website.Instance.logger.Debug($"bookingStep1_getEventerr:eventTime->{JsonConvert.SerializeObject(Eventday)} ,{ex.ToString()}"); //再補回傳的格式 status.status = "FAIL"; status.msgErr = "資料錯誤,請重新讀取頁面"; return(Json(status)); } }
public IActionResult bookingStep1([FromBody] DataModel data) { try { //B2d分銷商資料 var aesUserData = User.Identities.SelectMany(i => i.Claims.Where(c => c.Type == ClaimTypes.UserData).Select(c => c.Value)).FirstOrDefault(); var UserData = JsonConvert.DeserializeObject <B2dAccount>(AesCryptHelper.aesDecryptBase64(aesUserData, Website.Instance.AesCryptKey)); string ip = httpContextAccessor.HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString().Replace("::1", "127.0.0.1"); data = BookingRepostory.setCardEncrypt(data); //log時把卡號移除 DataModel dataTemp = data.Clone(); dataTemp.card = null; Website.Instance.logger.Debug($"bookingStep1_inputdata:{ JsonConvert.SerializeObject(dataTemp)}"); ApiSetting api = new ApiSetting(); api.apiKey = "kkdayapi"; api.userOid = "1"; api.ver = "1.0.1"; api.locale = UserData.LOCALE; api.currency = UserData.CURRENCY; api.ipaddress = ip; string prodStr = TempData["prod_" + data.guidNo] as string; if (string.IsNullOrEmpty(prodStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } ProductModel prod = JsonConvert.DeserializeObject <ProductModel>(prodStr); string moduleStr = TempData["module_" + data.guidNo] as string; if (string.IsNullOrEmpty(moduleStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } ProductModuleModel module = JsonConvert.DeserializeObject <ProductModuleModel>(moduleStr); string pkgStr = TempData["pkg_" + data.guidNo] as string; if (string.IsNullOrEmpty(pkgStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } PkgDetailModel pkg = JsonConvert.DeserializeObject <PkgDetailModel>(pkgStr); string pkgConfirmStr = TempData["confirm_" + data.guidNo] as string; if (string.IsNullOrEmpty(moduleStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } confirmPkgInfo confirm = JsonConvert.DeserializeObject <confirmPkgInfo>(pkgConfirmStr); string titleStr = TempData["ProdTitleKeep_" + data.guidNo] as string; if (string.IsNullOrEmpty(moduleStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } ProdTitleModel title = JsonConvert.DeserializeObject <ProdTitleModel>(titleStr); string discRuleStr = TempData["pkgsDiscRule_" + data.guidNo] as string; if (string.IsNullOrEmpty(discRuleStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } DiscountRuleModel rule = JsonConvert.DeserializeObject <DiscountRuleModel>(discRuleStr); string pmgwStr = TempData["pmgw_" + data.guidNo] as string; if (string.IsNullOrEmpty(pmgwStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } Pmgw pmgw = JsonConvert.DeserializeObject <Pmgw>(pmgwStr); string showStr = TempData["prodShow_" + data.guidNo] as string; if (string.IsNullOrEmpty(showStr)) { throw new Exception("資料錯誤,請重新讀取頁"); } //BookingShowProdModel show = JsonConvert.DeserializeObject<BookingShowProdModel>(showStr); TempData.Keep(); //排除餐食 data = BookingRepostory.exculdeFood(prod, data, module); string b2bOrder = BookingRepostory.insB2dOrder(title, prod, pkg, confirm, data, UserData, rule); //轉 ordermodel //OrderRepostory res = new OrderRepostory(); //OrderModel ord = res.setOrderModel(data,pmgw,title); //api.json = ord; //string orderModelStr = JsonConvert.SerializeObject(api); //Website.Instance.logger.Debug($"bookingStep1_ordernewdata:{ JsonConvert.SerializeObject(orderModelStr)}"); //KKapiHelper kk = new KKapiHelper(); //JObject order =kk.crtOrder(api); JObject order = ApiHelper.orderNew(data, title); string orderMid = ""; string orderOid = ""; returnStatus status = new returnStatus(); Website.Instance.logger.Debug($"bookingStep1_ordernewresponse:" + JsonConvert.SerializeObject(order));//要改 //要先判斷是不是result='0000' if (order["content"]["result"].ToString() == "0000") { string memUuid = "051794b8-db2a-4fe7-939f-31ab1ee2c719"; orderMid = order["content"]["orderMid"].ToString(); orderOid = order["content"]["orderOid"].ToString(); status.pmchSslRequest = BookingRepostory.setPaymentInfo2(prod, data, orderMid, UserData, pmgw, memUuid); status.status = "OK"; status.url = Website.Instance.Configuration["kkUrl:pmchUrl"].ToString() + pmgw.pmchPayURL; //pmchUrl //要把BookingShowProdModel 帶到訂購final頁 RedisHelper.SetRedis(showStr, "b2d:ec:order:final:prodShow:" + orderMid, 60); RedisHelper.SetRedis(JsonConvert.SerializeObject(data), "b2d:ec:order:final:orderData:" + orderMid, 60); //要存redis 付款主要資訊,最後訂單 upd時要使用,可和下面整合存一個就 BookingRepostory.setPayDtltoRedis(data, orderMid, memUuid, RedisHelper); //要存redis 因為付款後要從這個redis內容再進行payment驗證,可和上面整合存一個就好 //CallJsonPay rdsJson = (CallJsonPay)status.pmchSslRequest.json; CallJsonPay2 rdsJson = (CallJsonPay2)status.pmchSslRequest.json; string callPmchReq = JsonConvert.SerializeObject(status.pmchSslRequest.json); RedisHelper.SetRedis(callPmchReq, "b2d:ec:pmchSslRequest:" + orderMid, 60); } else { status.status = "Error"; status.msgErr = order["content"]["result"].ToString() + order["content"]["msg"].ToString();//要改 } return(Json(status)); //v1/channel/citi/auth //https://pmch.sit.kkday.com/citi/payment/auth //https://payment.kkday.com/v1/channel/adyen/auth } catch (Exception ex) { //error Website.Instance.logger.Debug($"bookingStep1_err_ordernew失敗:{ex.Message.ToString()}"); returnStatus status = new returnStatus(); status.status = "Error"; status.msgErr = ex.Message.ToString(); return(Json(status)); } }