public string GetAdvanceParkingInfoData() { StringBuilder strData = new StringBuilder(); try { string plateNo = string.Empty; if (!string.IsNullOrWhiteSpace(Request.Params["PlateNo"])) { plateNo = Request.Params["PlateNo"].ToString(); } DateTime start = DateTime.Now.AddDays(-1); DateTime?sTime = null; if (!string.IsNullOrWhiteSpace(Request.Params["StartTime"]) && DateTime.TryParse(Request.Params["StartTime"], out start)) { sTime = start; } DateTime end = DateTime.Now; DateTime?eTime = null; if (!string.IsNullOrWhiteSpace(Request.Params["EndTime"]) && DateTime.TryParse(Request.Params["EndTime"], out end)) { eTime = end; } if (string.IsNullOrWhiteSpace(Request.Params["CompanyId"])) { return(strData.ToString()); } string companyId = Request.Params["CompanyId"].ToString(); int page = string.IsNullOrEmpty(Request.Params["page"]) ? 0 : int.Parse(Request.Params["page"]); int rows = string.IsNullOrEmpty(Request.Params["rows"]) ? 0 : int.Parse(Request.Params["rows"]); int total = 0; List <AdvanceParking> result = AdvanceParkingServices.QueryPage(companyId, plateNo, sTime, eTime, page, rows, out total); var models = from p in result select new { ID = p.ID, OrderId = p.OrderId.ToString(), PlateNo = p.PlateNo, StartTime = p.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), EndTime = p.EndTime.ToString("yyyy-MM-dd HH:mm:ss"), Amount = p.Amount, PayTime = p.PayTime != DateTime.MinValue ? p.PayTime.Value.ToString("yyyy-MM-dd HH:mm:ss") : string.Empty, CreateTime = p.CreateTime.ToString("yyyy-MM-dd HH:mm:ss") }; strData.Append("{"); strData.Append("\"total\":" + total + ","); strData.Append("\"rows\":" + JsonHelper.GetJsonString(models) + ","); strData.Append("\"index\":" + page); strData.Append("}"); } catch (Exception ex) { ExceptionsServices.AddExceptions(ex, "获取预停车信息失败"); } return(strData.ToString()); }
public ActionResult AdvanceParkingPayment(decimal orderId) { try { AdvanceParking order = AdvanceParkingServices.QueryByOrderId(orderId); if (order == null) { throw new MyException("支付信息不存在"); } if (order.OrderState != 0) { throw new MyException("支付状态不正确"); } UnifiedPayModel model = UnifiedPayModel.CreateUnifiedModel(order.CompanyID); if (string.IsNullOrWhiteSpace(order.PrepayId)) { string payNotifyAddress = string.Format("{0}{1}", WXApiConfigServices.QueryWXApiConfig(order.CompanyID).Domain, "/WeiXinPayNotify/AdvanceParking"); //预支付 UnifiedPrePayMessage result = PaymentServices.UnifiedPrePay(model.CreatePrePayPackage(order.OrderId.ToString(), ((int)(order.Amount * 100)).ToString(), WeiXinOpenId, "预停车支付", payNotifyAddress)); if (result == null || !result.ReturnSuccess || !result.ResultSuccess || string.IsNullOrEmpty(result.Prepay_Id)) { throw new Exception(string.Format("获取PrepayId 失败,Message:{0}", result.ToXmlString())); } AdvanceParkingServices.UpdatePrepayIdById(result.Prepay_Id, order.OrderId); order.PrepayId = result.Prepay_Id; } WeiXinPaySignModel payModel = new WeiXinPaySignModel() { AppId = model.AppId, Package = string.Format("prepay_id={0}", order.PrepayId), Timestamp = ((DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000).ToString(), Noncestr = Util.CreateNoncestr(), }; Dictionary <string, string> nativeObj = new Dictionary <string, string>(); nativeObj.Add("appId", payModel.AppId); nativeObj.Add("package", payModel.Package); nativeObj.Add("timeStamp", payModel.Timestamp); nativeObj.Add("nonceStr", payModel.Noncestr); nativeObj.Add("signType", payModel.SignType); payModel.PaySign = model.GetCftPackage(nativeObj); //生成JSAPI 支付签名 ViewBag.PayModel = payModel; return(View(order)); } catch (MyException ex) { return(PageAlert("Index", "AdvanceParking", new { RemindUserContent = ex.Message })); } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("WeiXinPayment_Error", string.Format("预停车支付失败 orderId:{0};openId:{1}", orderId, WeiXinOpenId), ex, LogFrom.WeiXin); return(PageAlert("Index", "AdvanceParking", new { RemindUserContent = "支付异常,请重新支付" })); } }
public ActionResult SaveAdvanceParking(string plateNo, DateTime startTime, DateTime endTime, decimal amount) { try { if (string.IsNullOrWhiteSpace(plateNo)) { throw new MyException("获取车牌号失败"); } if (startTime == null || startTime == DateTime.MinValue) { throw new MyException("获取开始时间失败"); } if (endTime == null || endTime == DateTime.MinValue) { throw new MyException("获取结束时间失败"); } if (amount <= 0) { throw new MyException("获取预支付金额失败"); } //BaseCompany company = CompanyServices.QueryByParkingId(model.PKID); //if (company == null) throw new MyException("获取单位信息失败"); //WX_ApiConfig config = WXApiConfigServices.QueryWXApiConfig(company.CPID); //if (config == null) //{ // ExceptionsServices.AddExceptionToDbAndTxt("WeiXinPageError", "获取微信配置信息失败", "单位编号:" + company.CPID, LogFrom.WeiXin); // return RedirectToAction("Index", "ErrorPrompt", new { message = "获取微信配置信息失败!" }); //} //if (!config.Status) //{ // ExceptionsServices.AddExceptionToDbAndTxt("WeiXinPageError", "该车场暂停使用微信支付", "单位编号:" + company.CPID, LogFrom.WeiXin); // return RedirectToAction("Index", "ErrorPrompt", new { message = "该车场暂停使用微信支付!" }); //} //if (config.CompanyID != WeiXinUser.CompanyID) //{ // ExceptionsServices.AddExceptionToDbAndTxt("WeiXinPageError", "微信用户所属公众号和当前公众号不匹配,不能支付", string.Format("支付单位:{0},微信用户单位:{1}", config.CompanyID, WeiXinUser.CompanyID), LogFrom.WeiXin); // return RedirectToAction("Index", "ErrorPrompt", new { message = "微信用户所属公众号和当前公众号不匹配,不能支付!" }); //} //if (CurrLoginWeiXinApiConfig == null || config.CompanyID != CurrLoginWeiXinApiConfig.CompanyID) //{ // string loginCompanyId = CurrLoginWeiXinApiConfig != null ? CurrLoginWeiXinApiConfig.CompanyID : string.Empty; // ExceptionsServices.AddExceptionToDbAndTxt("WeiXinPageError", "车场所属公众号和当前公众号不匹配,不能支付", string.Format("支付单位:{0},微信用户单位:{1}", config.CompanyID, loginCompanyId), LogFrom.WeiXin); // return RedirectToAction("Index", "ErrorPrompt", new { message = "车场所属公众号和当前公众号不匹配,不能支付!" }); //} AdvanceParking model = new AdvanceParking(); model.OrderId = IdGenerator.Instance.GetId(); model.OrderState = 0; model.PlateNo = plateNo; model.StartTime = startTime; model.EndTime = endTime; model.Amount = amount; model.WxOpenId = WeiXinUser.OpenID; model.CompanyID = WeiXinUser.CompanyID; model.CreateTime = DateTime.Now; bool result = AdvanceParkingServices.Add(model); if (!result) { throw new MyException("保存预停车信息失败"); } return(RedirectToAction("AdvanceParkingPayment", "WeiXinPayment", new { orderId = model.OrderId })); } catch (MyException ex) { return(PageAlert("Index", "AdvanceParking", new { RemindUserContent = ex.Message })); } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("WeiXinPageError", "保存预停车信息失败", ex, LogFrom.WeiXin); return(PageAlert("Index", "AdvanceParking", new { RemindUserContent = "保存预停车信息失败" })); } }
public ActionResult PaymentSuccess(decimal orderId) { AdvanceParking order = AdvanceParkingServices.QueryByOrderId(orderId); return(View(order)); }
public void AdvanceParking() { ReturnMessage returnMsg = new ReturnMessage() { Return_Code = "SUCCESS", Return_Msg = "" }; string xmlString = GetXmlString(Request); NotifyMessage message = null; try { TxtLogServices.WriteTxtLogEx("AdvanceParkingPayNotify", xmlString); //此处应记录日志 message = XmlHelper.Deserialize <NotifyMessage>(xmlString); XmlDocument doc = new XmlDocument(); doc.LoadXml(xmlString); Dictionary <string, string> dic = new Dictionary <string, string>(); string sign = string.Empty; foreach (XmlNode node in doc.FirstChild.ChildNodes) { if (node.Name.ToLower() != "sign") { dic.Add(node.Name, node.InnerText); } else { sign = node.InnerText; } } //处理通知 decimal orderId; if (!dic.ContainsKey("out_trade_no") || !decimal.TryParse(dic["out_trade_no"], out orderId)) { throw new MyException("支付回调订单编号格式不正确"); } AdvanceParking order = AdvanceParkingServices.QueryByOrderId(orderId); if (order == null) { throw new MyException("获取预订单失败"); } UnifiedPayModel model = UnifiedPayModel.CreateUnifiedModel(order.CompanyID); if (!model.ValidateMD5Signature(dic, sign)) { throw new Exception("签名未通过!"); } if (!dic.ContainsKey("transaction_id")) { throw new MyException("支付流水号不存在"); } string payTradeNo = dic["transaction_id"]; DateTime payTime = DateTime.Now; if (dic.ContainsKey("time_end") && dic["time_end"].Length == 14) { string strDate = dic["time_end"].Insert(4, "-").Insert(7, "-").Insert(10, " ").Insert(13, ":").Insert(16, ":"); if (!DateTime.TryParse(strDate, out payTime)) { payTime = DateTime.Now; } } AdvanceParkingServices.PaySuccess(orderId, payTradeNo, payTime); } catch (MyException ex) { ExceptionsServices.AddExceptionToDbAndTxt("AdvanceParkingPayNotify", "支付通知出错:" + ex.Message, ex, LogFrom.WeiXin); //此处记录异常日志 returnMsg.Return_Code = "FAIL"; returnMsg.Return_Msg = ex.Message; } catch (Exception ex) { ExceptionsServices.AddExceptionToDbAndTxt("AdvanceParkingPayNotify", "支付通知出错", ex, LogFrom.WeiXin); //此处记录异常日志 returnMsg.Return_Code = "FAIL"; returnMsg.Return_Msg = ex.Message; } Response.Write(returnMsg.ToXmlString()); Response.End(); }