Beispiel #1
0
        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());
        }
Beispiel #2
0
        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 = "支付异常,请重新支付" }));
            }
        }
Beispiel #3
0
        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 = "保存预停车信息失败" }));
            }
        }
Beispiel #4
0
        public ActionResult PaymentSuccess(decimal orderId)
        {
            AdvanceParking order = AdvanceParkingServices.QueryByOrderId(orderId);

            return(View(order));
        }
Beispiel #5
0
        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();
        }