public ActionResult Index(Users Users)
        {
            if (!Users.Id.IsNullOrEmpty())
            {
                Users = Entity.Users.FirstOrNew(n => n.Id == Users.Id);
            }
            ViewBag.Users = Users;
            IList <SysControl> SysControlList = new List <SysControl>();

            if (IsWeiXinBrowser)
            {
                SysControlList = Entity.SysControl.Where(n => n.State == 1 && n.Tag == "WeiXin" && n.LagEntryNum == 0).OrderBy(n => n.Sort).ToList();
            }
            else if (IsAlipayBrowser)
            {
                SysControlList = Entity.SysControl.Where(n => n.State == 1 && n.Tag == "Alipay" && n.LagEntryNum == 0).OrderBy(n => n.Sort).ToList();
            }
            DateTime           Now   = DateTime.Now;
            DateTime           ToDay = DateTime.Parse(Now.ToString("yyyy-MM-dd"));
            IList <SysControl> List  = new List <SysControl>();

            foreach (var p in SysControlList)
            {
                SysControl SC = p.GetState();
                if (SC.State == 1)
                {
                    SC.CName  = p.CName;
                    SC.PayWay = p.PayWay;
                    List.Add(SC);
                }
            }
            ViewBag.SysControlList = List;
            return(View());
        }
        public void Delete(SysControl SysControl, string InfoList, int?IsDel)
        {
            if (string.IsNullOrEmpty(InfoList))
            {
                InfoList = SysControl.Id.ToString();
            }
            int Ret = Entity.MoveToDeleteEntity <SysControl>(InfoList, IsDel, AdminUser.UserName);

            Entity.SaveChanges();
            Response.Write(Ret);
        }
        public void ChangeStatus(SysControl SysControl, string InfoList, string Clomn, string Value)
        {
            if (string.IsNullOrEmpty(InfoList))
            {
                InfoList = SysControl.Id.ToString();
            }
            int Ret = Entity.ChangeEntity <SysControl>(InfoList, Clomn, Value);

            Entity.SaveChanges();
            Response.Write(Ret);
        }
        public ActionResult Index(Users Users)
        {
            if (!Users.Id.IsNullOrEmpty())
            {
                Users = Entity.Users.FirstOrNew(n => n.Id == Users.Id);
            }
            ViewBag.Users = Users;
            IList <SysControl> SysControlList = new List <SysControl>();

            if (IsWeiXinBrowser)
            {
                SysControlList = Entity.SysControl.Where(n => n.State == 1 && n.Tag == "WeiXin").OrderBy(n => n.Sort).ToList();
            }
            else if (IsAlipayBrowser)
            {
                SysControlList = Entity.SysControl.Where(n => n.State == 1 && n.Tag == "Alipay").OrderBy(n => n.Sort).ToList();
            }
            else
            {
                SysControlList = Entity.SysControl.Where(n => n.State == 1 && n.Tag == "RecMoneyMulti").OrderBy(n => n.Sort).ToList();
            }
            DateTime           Now   = DateTime.Now;
            DateTime           ToDay = DateTime.Parse(Now.ToString("yyyy-MM-dd"));
            IList <SysControl> List  = new List <SysControl>();

            foreach (var p in SysControlList)
            {
                SysControl SC = p.GetState();
                if (SC.State == 1)
                {
                    SC.CName  = p.CName;
                    SC.PayWay = p.PayWay;
                    List.Add(SC);
                }
                //if (p.TimeType == 0) {
                //    List.Add(p);
                //}
                //else if (p.TimeType == 1) {
                //    DateTime sTime = p.STime;
                //    DateTime eTime = p.ETime;
                //    DateTime STime = ToDay.AddHours(sTime.Hour).AddMinutes(sTime.Minute).AddSeconds(sTime.Second);
                //    DateTime ETime = ToDay.AddHours(eTime.Hour).AddMinutes(eTime.Minute).AddSeconds(eTime.Second);
                //    if (STime < Now && ETime > Now)
                //    {
                //        List.Add(p);
                //    }
                //}
            }
            ViewBag.SysControlList = List;
            return(View());
        }
Ejemplo n.º 5
0
        public void Execute(IJobExecutionContext context)
        {
            string JobName = "AutoCash";
            string CanRun  = ConfigurationManager.AppSettings["Run" + JobName].ToString();

            if (CanRun == "true")
            {
                if (!IsRun)
                {
                    LokFuEntity Entity = new LokFuEntity();
                    IsRun = true;
                    try
                    {
                        Log.Write(JobName + "任务开始执行!");
                        //-------------------------------------------------------
                        #region 任务主体
                        IList <Users> List       = Entity.Users.Where(n => n.State == 1 && n.AutoCash == 1 && n.Amount >= n.AutoCashMoney).ToList();
                        SysSet        SysSet     = Entity.SysSet.FirstOrDefault();
                        SysControl    SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == "Cash");
                        if (SysControl != null)
                        {
                            foreach (var p in List)
                            {
                                p.AutoCash(Entity, SysSet, SysControl);
                                Log.WriteLog("提现完成:" + p.UserName, JobName);
                            }
                        }
                        #endregion
                        //-------------------------------------------------------
                        Log.Write(JobName + "任务执行结束![共计" + List.Count + "条]");
                    }
                    catch (Exception Ex)
                    {
                        Log.Write(JobName + "任务执行过程出错!", Ex);
                    }
                    IsRun = false;
                }
                else
                {
                    Log.Write(JobName + "任务还在执行中!");
                }
            }
        }
        public ActionResult Edit(SysControl SysControl)
        {
            if (SysControl.Id != 0)
            {
                SysControl = Entity.SysControl.FirstOrDefault(n => n.Id == SysControl.Id);
            }
            if (SysControl == null)
            {
                ViewBag.ErrorMsg = "数据不存在";
                return(View("Error"));
            }
            ViewBag.SysControl = SysControl;
            if (Request.UrlReferrer != null)
            {
                Session["Url"] = Request.UrlReferrer.ToString();
            }
            IList <PayConfig> PayConfigList = Entity.PayConfig.Where(n => n.State == 1).OrderBy(n => n.Sort).ToList();

            ViewBag.PayConfigList = PayConfigList;
            return(View());
        }
        public ActionResult Add(SysControl SysControl, int STimeHH, int STimemm, int ETimeHH, int ETimemm)
        {
            //判断维一
            if (SysControl.PayWay > 0)
            {
                SysControl tempSysControl = Entity.SysControl.FirstOrDefault(n => n.PayWay == SysControl.PayWay);
                if (tempSysControl != null)
                {
                    ViewBag.ErrorMsg = "已经绑定在“" + tempSysControl.CName + "”";
                    return(View("Error"));
                }
            }

            DateTime STime = DateTime.Parse("1990-01-01 " + STimeHH + ":" + STimemm + ":00");
            DateTime ETime = DateTime.Parse("1990-01-01 " + ETimeHH + ":" + ETimemm + ":" + (ETimeHH == 23 && ETimemm == 59 ? "59" : "00"));

            SysControl.STime   = STime;
            SysControl.ETime   = ETime;
            SysControl.AddTime = DateTime.Now;
            Entity.SysControl.AddObject(SysControl);
            Entity.SaveChanges();
            if (SysControl.Tag == "RecMoneyMulti" || SysControl.Tag == "RecMoneyLocal")
            {
                if (SysControl.State == 1 || SysControl.State == 2)
                {
                    if (SysControl.Tag == "RecMoneyMulti")
                    {
                        Entity.ExecuteStoreCommand("Update SysControl Set State=0 Where Tag='RecMoneyLocal'");
                    }
                    if (SysControl.Tag == "RecMoneyLocal")
                    {
                        Entity.ExecuteStoreCommand("Update SysControl Set State=0 Where Tag='RecMoneyMulti'");
                    }
                }
                Entity.SaveChanges();
            }
            BaseRedirect();
            return(View("Succeed"));
        }
        public ActionResult Save(SysControl SysControl, int STimeHH, int STimemm, int ETimeHH, int ETimemm)
        {
            DateTime   STime          = DateTime.Parse("1990-01-01 " + STimeHH + ":" + STimemm + ":00");
            DateTime   ETime          = DateTime.Parse("1990-01-01 " + ETimeHH + ":" + ETimemm + ":" + (ETimeHH == 23 && ETimemm == 59 ? "59" : "00"));
            SysControl baseSysControl = Entity.SysControl.FirstOrDefault(n => n.Id == SysControl.Id);

            if (SysControl.PayWay != baseSysControl.PayWay && SysControl.PayWay > 0)
            {
                //修改了通道
                SysControl tempSysControl = Entity.SysControl.FirstOrDefault(n => n.Id != baseSysControl.Id && n.PayWay == SysControl.PayWay);
                if (tempSysControl != null)
                {
                    ViewBag.ErrorMsg = "已经绑定在“" + tempSysControl.CName + "”";
                    return(View("Error"));
                }
            }
            baseSysControl       = Request.ConvertRequestToModel <SysControl>(baseSysControl, SysControl);
            baseSysControl.STime = STime;
            baseSysControl.ETime = ETime;
            Entity.SaveChanges();
            if (SysControl.Tag == "RecMoneyMulti" || SysControl.Tag == "RecMoneyLocal")
            {
                if (SysControl.State == 1 || SysControl.State == 2)
                {
                    if (SysControl.Tag == "RecMoneyMulti")
                    {
                        Entity.ExecuteStoreCommand("Update SysControl Set State=0 Where Tag='RecMoneyLocal'");
                    }
                    if (SysControl.Tag == "RecMoneyLocal")
                    {
                        Entity.ExecuteStoreCommand("Update SysControl Set State=0 Where Tag='RecMoneyMulti'");
                    }
                }
                Entity.SaveChanges();
            }
            BaseRedirect();
            return(View("Succeed"));
        }
Ejemplo n.º 9
0
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderNFC]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }

            OrderF2F OrderF2F = new OrderF2F();

            OrderF2F = JsonToObject.ConvertJsonToModel(OrderF2F, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            #region 获取并处理用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderF2F.Token);
            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                //DataObj.OutError("2006");
                //return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                //DataObj.OutError("2008");
                //return;
            }
            string NeekName = baseUsers.NeekName;
            if (NeekName.IsNullOrEmpty())
            {
                NeekName = baseUsers.TrueName;
            }
            if (NeekName.IsNullOrEmpty())
            {
                NeekName = "货款";
            }
            #endregion

            if (OrderF2F.Action == "Create")
            {
                //处理交易地点
                if (OrderF2F.X.IsNullOrEmpty() || OrderF2F.Y.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                int PayWay = OrderF2F.PayWay;
                if (PayWay.IsNullOrEmpty())
                {
                    PayWay = 7;//兼容老版本
                }

                //获取系统支付配置
                PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == PayWay && n.State == 1);
                if (PayConfig == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                if (PayConfig.GroupType != "NFC")
                {
                    DataObj.OutError("1000");
                    return;
                }
                int InType = 0;
                if (!OrderF2F.InType.IsNullOrEmpty())
                {
                    InType = 1;
                }
                SysControl SysControl = new SysControl();
                #region 版本比较 升级之后比较长时间后可以考滤删除版本判断代码
                bool IsNew     = true;
                var  vSysAgent = this.Entity.SysAgent.FirstOrDefault(o => o.Id == baseUsers.Agent);
                if (vSysAgent == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                IsNew = BizExt.NewOrOldVersion(vSysAgent, Equipment, this.Entity);
                #endregion
                if (IsNew)//新版
                {
                    if (InType == 1)
                    {
                        SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == "NFC" && n.PayWay == PayWay && n.LagEntryDay > 0);
                    }
                    else
                    {
                        SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == "NFC" && n.PayWay == PayWay && n.LagEntryDay == 0);
                    }
                }
                else//旧版
                {
                    SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == "NFC" && n.PayWay == PayWay);
                }

                //获取系统支付配置
                if (SysControl == null)
                {
                    DataObj.OutError("1005");
                    return;
                }
                SysControl syscontrol = SysControl.ChkState();
                if (syscontrol.State != 1)
                {
                    DataObj.OutError("1005");
                    return;
                }

                #region 创建交易
                OrderF2F.PayWay  = PayWay;
                OrderF2F.PayType = 0;
                OrderF2F.PayId   = PayConfig.DllName;
                OrderF2F.OType   = 9; //NFC

                //开始处理参数 PayId扣款码,OType通道,7支付宝,8微信
                if (OrderF2F.Amoney.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                OrderF2F.Amoney = OrderF2F.Amoney.FormatMoney();

                //获取用户支付配置
                UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PId == PayConfig.Id);
                if (UserPay == null)
                {
                    DataObj.OutError("1000");
                    return;
                }

                //获取分支机构信息
                SysAgent SysAgent = new SysAgent();
                if (!baseUsers.Agent.IsNullOrEmpty())
                {
                    SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
                }


                //获取系统配置
                SysSet SysSet = Entity.SysSet.FirstOrDefault();
                if (InType == 1)
                {//客户端传来T+N但是系统没开启时无效
                    if (SysSet.LagEntry == 0)
                    {
                        InType = 0;
                    }
                }
                if (InType == 1)
                {
                    //手续费
                    OrderF2F.Poundage = 0;
                    //商户费率
                    OrderF2F.UserRate = 0;
                    //T+n时,代理佣金为 交易金额*费率
                    decimal AgentPayGet = OrderF2F.Amoney * SysSet.AgentGet;
                    OrderF2F.AgentPayGet = (Double)AgentPayGet;
                    //佣金舍位
                    OrderF2F.AgentPayGet = OrderF2F.AgentPayGet.Floor();
                }
                else
                {
                    //手续费
                    OrderF2F.Poundage = OrderF2F.Amoney * (decimal)UserPay.Cost;
                    //手续费取进
                    OrderF2F.Poundage = OrderF2F.Poundage.Ceiling();
                    //商户费率
                    OrderF2F.UserRate = UserPay.Cost;
                    //分支机构佣金设置为0,待分润计算后再写入
                    OrderF2F.AgentPayGet = 0;
                }

                OrderF2F.UId = baseUsers.Id;

                //到帐金额=支付金额-手续费
                OrderF2F.PayMoney = OrderF2F.Amoney - OrderF2F.Poundage;
                //第三方支付通道率
                OrderF2F.SysRate = (double)PayConfig.Cost;
                //这里是利润计算==========
                //利润=总金额-到帐-支付手续费
                decimal GetAll = OrderF2F.Amoney - OrderF2F.PayMoney - OrderF2F.Amoney * (decimal)OrderF2F.SysRate;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderF2F.AIdPayGet = (double)GetAll;

                OrderF2F.Agent      = SysAgent.Id;//分支机构Id
                OrderF2F.AId        = baseUsers.AId;
                OrderF2F.FId        = 0;
                OrderF2F.OrderState = 1;
                OrderF2F.PayState   = 0;
                OrderF2F.AgentState = 0;
                OrderF2F.AddTime    = DateTime.Now;

                //写入前,判断交易金额限制
                if (OrderF2F.Amoney < syscontrol.SNum || OrderF2F.Amoney > syscontrol.ENum)
                {
                    DataObj.OutError("1006");
                    return;
                }

                //写入订单总表
                Orders Orders = new Orders();
                Orders.UId   = OrderF2F.UId;
                Orders.TName = NeekName;

                Orders.PayType = OrderF2F.PayType;
                Orders.PayName = "NFC";

                Orders.RUId     = 0;
                Orders.RName    = string.Empty;
                Orders.TType    = OrderF2F.OType;
                Orders.TState   = 1;
                Orders.Amoney   = OrderF2F.Amoney;
                Orders.Poundage = OrderF2F.Poundage;
                Orders.AddTime  = DateTime.Now;
                Orders.PayState = 0;
                Orders.PayWay   = PayConfig.Id;

                Orders.Agent      = OrderF2F.Agent;
                Orders.AgentState = 0;
                Orders.AId        = OrderF2F.AId;
                Orders.FId        = 0;

                string OrderAddress = OrderF2F.OrderAddress;
                if (OrderAddress.IsNullOrEmpty())
                {
                    OrderAddress = Utils.GetAddressByGPS(OrderF2F.X, OrderF2F.Y);
                }
                Orders.OrderAddress = OrderAddress;
                Orders.X            = OrderF2F.X;
                Orders.Y            = OrderF2F.Y;

                if (InType == 1)
                {
                    if (IsNew)//新版
                    {
                        Orders.LagEntryDay = SysControl.LagEntryDay;
                        Orders.LagEntryNum = SysControl.LagEntryNum;
                    }
                    else
                    {
                        Orders.LagEntryDay = SysSet.LagEntryDay;
                        Orders.LagEntryNum = SysSet.LagEntryNum;
                    }
                }
                else
                {
                    Orders.LagEntryDay = 0;
                    Orders.LagEntryNum = 0;
                }

                Entity.Orders.AddObject(Orders);
                Entity.SaveChanges();
                Entity.Refresh(RefreshMode.StoreWins, Orders);

                OrderF2F.OId = Orders.TNum;
                Entity.OrderF2F.AddObject(OrderF2F);
                Entity.SaveChanges();

                //=======================================
                UserTrack.ENo        = DataObj.ENo;
                UserTrack.OPType     = Orders.PayName;
                UserTrack.UserName   = Orders.TNum;
                UserTrack.GPSAddress = Orders.OrderAddress;
                UserTrack.GPSX       = Orders.X;
                UserTrack.GPSY       = Orders.Y;
                Orders.SeavGPSLog(UserTrack, Entity);
                //=======================================

                if (PayConfig.DllName == "NFC")
                {
                    string[] PayConfigArr = PayConfig.QueryArray.Split(',');
                    if (PayConfigArr.Length != 2)
                    {
                        DataObj.OutError("1000");
                        return;
                    }

                    string NoticeUrl = NoticePath + "/PayCenter/NFC/Notice.html";

                    NFCObj NFCObj = new NFCObj();
                    NFCObj.merchantCode    = PayConfigArr[0];                           //      商户编码
                    NFCObj.outOrderId      = Orders.TNum;                               //		订单号
                    NFCObj.outUserId       = Orders.UId.ToString();                     //		用户编号
                    NFCObj.orderCreateTime = Orders.AddTime.ToString("yyyyMMddHHmmss"); //		订单生成时间20140423112324
                    NFCObj.nonceStr        = Utils.RandomSMSCode(10);                   //		随机字符串
                    NFCObj.goodName        = Orders.TName;                              //		商品名称
                    NFCObj.goodsExplain    = Orders.TNum;;                              //		商品详情
                    NFCObj.totalAmount     = (Orders.Amoney * 100).ToString("F0");      //		订单金额	100
                    NFCObj.payNotifyUrl    = NoticeUrl;                                 //		支付通知地址
                    NFCObj.sign            = PayConfigArr[1];
                    NFCObj.lastPayTime     = "";
                    //===================================
                    JavaScriptSerializer jss = new JavaScriptSerializer();
                    string jsonString        = jss.Serialize(NFCObj);
                    try
                    {
                        json = (JObject)JsonConvert.DeserializeObject(jsonString);
                    }
                    catch (Exception Ex)
                    {
                        Log.Write("[OrderNFC_My]:", "【jsonString】" + jsonString, Ex);
                    }
                    Orders.Json = json;
                }
                else if (PayConfig.DllName == "HFNFC")
                {
                    string NoticeUrl = NoticePath + "/PayCenter/HFNFC/Notice.html";

                    string[] PayConfigArr = PayConfig.QueryArray.Split(',');
                    if (PayConfigArr.Length != 3)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    //提交结算中心
                    string merId    = PayConfigArr[0]; //商户号
                    string merKey   = PayConfigArr[1]; //商户密钥
                    string JsPayWay = PayConfigArr[2]; //绑定通道

                    string  orderId    = Orders.TNum;  //商户流水号
                    decimal money      = Orders.Amoney * 100;
                    long    intmoney   = Int64.Parse(money.ToString("F0"));
                    string  OrderMoney = intmoney.ToString();//金额,以分为单

                    string PostJson = "{\"action\":\"getOrder\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"payway\":\"" + JsPayWay + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\"}";

                    string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                    string Sign       = (DataBase64 + merKey).GetMD5();

                    DataBase64 = HttpUtility.UrlEncode(DataBase64);
                    string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);

                    string HFNFC_Url = "https://api.zhifujiekou.com/api/nfcgateway";

                    string Ret = Utils.PostRequest(HFNFC_Url, PostData, "utf-8");

                    JObject JS = new JObject();
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception Ex)
                    {
                        Log.Write("[OrderNFC_HF]:", "【Ret】" + Ret, Ex);
                    }
                    if (JS == null)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    string resp = JS["resp"].ToString();
                    Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception Ex)
                    {
                        Log.Write("[OrderNFC_HF]:", "【Ret2】" + Ret, Ex);
                    }
                    if (JS == null)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    string respcode = JS["respcode"].ToString();
                    if (respcode != "00")
                    {
                        string respmsg = JS["respmsg"].ToString();
                        DataObj.OutError("1000");
                        Utils.WriteLog("[OrderNFC_HF_Err]:【" + respcode + "】" + respmsg, "orderface");
                        return;
                    }
                    JObject Json = (JObject)JS["webform"];
                    Orders.Json = Json;
                }
                Orders.Cols  = Orders.Cols + ",Json";
                DataObj.Data = Orders.OutJson();
                DataObj.Code = "0000";
                DataObj.OutString();
                #endregion
            }
            if (OrderF2F.Action == "GET")//获取订交易信息
            {
                //开始处理参数
                if (OrderF2F.OId.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == OrderF2F.OId && n.UId == baseUsers.Id);
                if (Orders == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                OrderF2F  Orderf2f  = Entity.OrderF2F.FirstOrDefault(n => n.OId == OrderF2F.OId && n.UId == baseUsers.Id);
                PayConfig PayConfig = Entity.PayConfig.FirstOrNew(n => n.Id == Orders.PayWay);
                if (Orders.TState == 1 && Orders.PayState == 0)
                {
                    if (PayConfig.DllName == "NFC")
                    {
                        //1000000951,f38e989d-900f-4768-8a01-f6667a21f7d3
                        string[] QueryArr = PayConfig.QueryArray.Split(',');
                        if (QueryArr.Length == 2)
                        {
                            string merchantCode = QueryArr[0];
                            string Key          = QueryArr[1];
                            string outOrderId   = Orders.TNum;
                            string dataStr      = "merchantCode=" + merchantCode + "&outOrderId=" + outOrderId;
                            string signStr      = dataStr + "&KEY=" + Key;
                            string sign         = signStr.GetMD5().ToUpper();
                            string dataJson     = "{\"merchantCode\":\"" + merchantCode + "\",\"outOrderId\":\"" + outOrderId + "\",\"sign\":\"" + sign + "\"}";
                            string postData     = "{\"param\":" + dataJson + ",\"project_id\":\"WEPAYPLUGIN_PAY\"}";
                            string postUrl      = "https://payment.kklpay.com/query/queryOrder.do";
                            string Ret          = Utils.GetPostJson(postUrl, postData);
                            //"{"code":"00","data":{"amount":1,"instructCode":"11001998044","merchantCode":"1000000951","outOrderId":"201511170900077","replyCode":"00","sign":"EA778C87B5ACDCBC7735BB78C15CAC72","transTime":"20151117174726","transType":"00200"},"msg":"成功"}"
                            JObject JS = new JObject();
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception Ex)
                            {
                                Utils.WriteLog("[OrderNFC]:JSON[" + Ret + "]" + Ex.ToString(), "orderface");
                            }
                            if (JS != null)
                            {
                                string code = JS["code"].ToString();//返回状态--
                                if (code == "00")
                                {
                                    JObject JSD = (JObject)JS["data"];
                                    if (JSD != null)
                                    {
                                        string amount        = JSD["amount"].ToString();       //交易金额 单位分
                                        string instructCode  = JSD["instructCode"].ToString(); //交易单号
                                        string merchantCodeR = JSD["merchantCode"].ToString(); //商户号
                                        string outOrderIdR   = JSD["outOrderId"].ToString();   //订单号
                                        string replyCode     = JSD["replyCode"].ToString();    //交易状态
                                        string transTime     = JSD["transTime"].ToString();    //交易时间
                                        string transType     = JSD["transType"].ToString();    //交易类型
                                        string signR         = JSD["sign"].ToString();
                                        //================================================
                                        PayLog PayLog = new PayLog();
                                        PayLog.PId     = PayConfig.Id;
                                        PayLog.OId     = outOrderId;
                                        PayLog.TId     = instructCode;
                                        PayLog.Amount  = decimal.Parse(amount) / 100;
                                        PayLog.Way     = "GET";
                                        PayLog.AddTime = DateTime.Now;
                                        PayLog.Data    = Ret;
                                        PayLog.State   = 1;
                                        Entity.PayLog.AddObject(PayLog);
                                        Entity.SaveChanges();
                                        //================================================
                                        if (replyCode == "00")
                                        {
                                            if (merchantCodeR == merchantCode)
                                            {
                                                int factmoney = int.Parse(amount);
                                                if (((int)(Orders.Amoney * 100)) == factmoney)
                                                {
                                                    //Orders.PayState = 1;//此处不保存支付状态,由通知返回再操作
                                                    Orders = Orders.PaySuccess(Entity);
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        //PaySuccess
                    }
                    else if (PayConfig.DllName == "HFNFC")
                    {
                        string[] QueryArr = PayConfig.QueryArray.Split(',');
                        if (QueryArr.Length == 3)
                        {
                            //提交结算中心
                            string merId      = QueryArr[0]; //商户号
                            string merKey     = QueryArr[1]; //商户密钥
                            string orderId    = Orders.TNum; //商户流水号
                            string PostJson   = "{\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\"}";
                            string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                            string Sign       = (DataBase64 + merKey).GetMD5();
                            DataBase64 = HttpUtility.UrlEncode(DataBase64);
                            string PostData  = string.Format("req={0}&sign={1}", DataBase64, Sign);
                            string HFNFC_Url = "https://api.zhifujiekou.com/api/query";
                            string Ret       = Utils.PostRequest(HFNFC_Url, PostData, "utf-8");

                            JObject JS = new JObject();
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception Ex)
                            {
                                Log.Write("[OrderNFC_HFQuery]:", "【Ret】" + Ret, Ex);
                            }
                            if (JS == null)
                            {
                                DataObj.OutError("1000");
                                return;
                            }
                            string resp = JS["resp"].ToString();
                            Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception Ex)
                            {
                                Log.Write("[OrderNFC_HFQuery]:", "【Ret2】" + Ret, Ex);
                            }
                            if (JS == null)
                            {
                                DataObj.OutError("1000");
                                return;
                            }
                            string respcode = JS["respcode"].ToString();
                            if (respcode != "00")
                            {
                                string respmsg = JS["respmsg"].ToString();
                                DataObj.OutError("1000");
                                Utils.WriteLog("[OrderNFC_HFQuery_Err]:【" + respcode + "】" + respmsg, "orderface");
                                return;
                            }
                            string resultcode = JS["resultcode"].ToString();
                            if (resultcode == "0000" || resultcode == "1002" || resultcode == "1004")
                            {
                                string txnamt    = JS["txnamt"].ToString();
                                int    factmoney = int.Parse(txnamt);
                                if (((int)(Orders.Amoney * 100)) == factmoney)
                                {
                                    //Orders.PayState = 1;//此处不保存支付状态,由通知返回再操作
                                    Orders = Orders.PaySuccess(Entity);
                                }
                            }
                        }
                        //PaySuccess
                    }
                }
                DataObj.Data = Orders.OutJson();
                DataObj.Code = "0000";
                DataObj.OutString();
            }
        }
        private ActionResult WeiXinPay(Users Users, decimal Amount, PayConfig PayConfig, SysControl SysControl)
        {
            if (Users.Token.IsNullOrEmpty())
            {
                Users.Token = DateTime.Now.ToString().GetMD5();
                Entity.SaveChanges();
            }

            int InType = 0;

            if (SysControl.LagEntryNum > 0)
            {
                InType = 1;
            }

            #region 微信支付
            string PostJson = "{amoney:" + Amount.ToString("F2") + ",token:\"" + Users.Token + "\",payid:\"shop\",otype:8,action:\"Create\",x:\"0\",y:\"0\",intype:\"" + InType + "\",payway:\"" + PayConfig.Id + "\",orderaddress:\"网店收银台,IP:" + Utils.GetAddressAndIp() + "\",ip:\"" + Utils.GetIP() + "\"}";
            //提交数据
            string PostData = LokFuEncode.LokFuAPIEncode(PostJson, Shop_Keys);
            PostData = HttpUtility.UrlEncode(PostData);
            //Post参数
            string PostString = "eno=" + Shop_ENO + "&data=" + PostData + "&code=0000";
            //AppPath = "http://localhost:2610";
            string  url       = AppPath + "/API/OrderQC/";
            string  RetString = Utils.PostRequest(url, PostString, "utf-8");
            JObject json      = new JObject();
            try
            {
                json = (JObject)JsonConvert.DeserializeObject(RetString);
            }
            catch (Exception)
            {
                ViewBag.ErrorMsg = "接口数据有误![01]";
                return(View("Error"));
            }
            if (json == null)
            {
                ViewBag.ErrorMsg = "接口数据有误![02]";
                return(View("Error"));
            }
            string code = "";
            string data = "";
            try
            {
                code = json["code"].ToString();
                data = json["data"].ToString();
            }
            catch (Exception)
            {
                ViewBag.ErrorMsg = "接口数据有误![03]";
                return(View("Error"));
            }
            if (code != "0000")
            {
                ViewBag.ErrorMsg = "交易有误![" + code + "]";
                return(View("Error"));
            }
            //解密
            string  RetData = LokFuEncode.LokFuAPIDecode(data, Shop_Keys);
            JObject Json    = new JObject();
            try
            {
                Json = (JObject)JsonConvert.DeserializeObject(RetData);
            }
            catch (Exception)
            {
                ViewBag.ErrorMsg = "数据解析有误![01]";
                return(View("Error"));
            }
            if (Json == null)
            {
                ViewBag.ErrorMsg = "数据解析有误![02]";
                return(View("Error"));
            }
            Orders Orders = new Orders();
            Orders = JsonToObject.ConvertJsonToModel(Orders, Json);
            if (Orders.PayId.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "订单信息有误";
                return(View("Error"));
            }
            string   PayId        = Orders.PayId;
            string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });
            if (PayConfig.DllName == "WeiXin")
            {
                string AppId  = PayConfigArr[0];
                string AppKey = PayConfigArr[2];

                WxPayData jsApiParam = new WxPayData();
                jsApiParam.SetValue("appId", AppId);
                jsApiParam.SetValue("timeStamp", WxPayApi.GenerateTimeStamp());
                jsApiParam.SetValue("nonceStr", WxPayApi.GenerateNonceStr());
                jsApiParam.SetValue("package", "prepay_id=" + PayId);
                jsApiParam.SetValue("signType", "MD5");
                jsApiParam.SetValue("paySign", jsApiParam.MakeSign(AppKey));
                string Parameters = jsApiParam.ToJson();
                ViewBag.Parameters = Parameters;
                Orders             = Entity.Orders.FirstOrNew(n => n.TNum == Orders.TNum);
                ViewBag.Orders     = Orders;
                return(View("WeiXinPay"));
            }
            else if (PayConfig.DllName == "HFWeiXin")
            {
                //提交结算中心
                string merId      = PayConfigArr[0]; //商户号
                string merKey     = PayConfigArr[1]; //商户密钥
                string orderId    = Orders.TNum;     //商户流水号
                string myData     = "{\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\",\"code\":\"" + PayId + "\"}";
                string DataBase64 = LokFuEncode.Base64Encode(myData, "utf-8");
                string Sign       = (DataBase64 + merKey).GetMD5();
                DataBase64 = HttpUtility.UrlEncode(DataBase64);
                string myUrl = string.Format("req={0}&sign={1}", DataBase64, Sign);
                string Url   = "https://api.zhifujiekou.com/wxjsapi/gopay.html?" + myUrl;
                //Response.Redirect(Url);
                return(this.Redirect(Url));
            }
            else
            {
                return(View("Null"));
            }
            //return View("Null");
            #endregion
        }
        public ActionResult GoPay(int shopid = 0, decimal Amount = 0, byte payway = 0)
        {
            if (shopid.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "商户信息有误,请核实!";
                return(View("Error"));
            }
            if (Amount.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "付款金额有误,请核实!";
                return(View("Error"));
            }
            Users Users = Entity.Users.FirstOrNew(n => n.Id == shopid && n.State == 1 && n.CardStae == 2);

            if (Users.Id.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "商户信息有误,请核实!";
                return(View("Error"));
            }
            if (Amount <= 0)
            {
                ViewBag.ErrorMsg = "付款金额有误![00]";
                return(View("Error"));
            }
            string Tag = string.Empty;

            if (IsWeiXinBrowser)
            {
                Tag = "WeiXin";
            }
            else if (IsAlipayBrowser)
            {
                Tag = "Alipay";
            }
            else
            {
                Tag = "RecMoneyMulti";
            }
            SysControl SysControl = Entity.SysControl.FirstOrNew(n => n.Tag == Tag && n.Id == payway);
            SysControl syscontrol = SysControl.ChkState();

            if (syscontrol.State != 1)
            {
                ViewBag.ErrorMsg = "支付接口维护中,请使用其它支付通道!";
                return(View("Error"));
            }
            int SNum = syscontrol.SNum;
            int ENum = syscontrol.ENum;

            if (SysControl.Tag == "RecMoneyMulti")
            {
                if (ENum > BasicSet.CtrlMoney1)
                {
                    ENum = (int)BasicSet.CtrlMoney1;
                }
            }
            if (Amount < SNum || Amount > ENum)
            {
                ViewBag.ErrorMsg = "收款金额范围:" + SNum + "~" + ENum + "元!";
                return(View("Error"));
            }
            var PayConfig = Entity.PayConfig.FirstOrDefault(o => o.Id == SysControl.PayWay);

            if (PayConfig == null)
            {
                ViewBag.ErrorMsg = "支付配置不存在";
                return(View("Error"));
            }
            //业务开始
            switch (PayConfig.DllName)
            {
            case "Transfer":    //钱包接口
                OrderTransfer OrderTransfer = new OrderTransfer();
                OrderTransfer.Amoney  = Amount;
                OrderTransfer.Remark  = Users.UserName;
                ViewBag.OrderTransfer = OrderTransfer;
                SysAgent SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == Users.Agent && n.State == 1 && n.IsTeiPai == 1);
                ViewBag.SysAgent = SysAgent;
                return(View("Transfer"));

            case "HFAliPay":    //不管直联还是结算中心,由API处理
            case "Alipay":
                return(AliPay(Users, Amount, PayConfig, SysControl));

            case "HFWeiXin":    //不管直联还是结算中心,由API处理
            case "WeiXin":
                return(WeiXinPay(Users, Amount, PayConfig, SysControl));

            case "Unionpay": //走银联接口
            case "HFPay":    //走银联接口
                return(BankPay(Users, Amount, PayConfig, SysControl));

            default:
                return(View());
            }
        }
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderCash]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            //System.Threading.Thread.Sleep(60000 * 60 * 24);
            OrderCash OrderCash = new OrderCash();

            OrderCash = JsonToObject.ConvertJsonToModel(OrderCash, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            if (OrderCash.TrunType.IsNullOrEmpty())
            {
                OrderCash.TrunType = 0;
            }
            if (OrderCash.TrunType != 0)
            {
                OrderCash.TrunType = 1;
            }

            string Tag = "Cash";

            if (OrderCash.TrunType == 0)
            {
                Tag = "CashT0";
            }
            if (OrderCash.TrunType == 1)
            {
                Tag = "CashT1";
            }
            SysControl SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag);
            SysControl syscontrol = SysControl.ChkState();

            if (syscontrol.State != 1)
            {
                DataObj.OutError("1005");
                return;
            }

            if (OrderCash.PayPwd.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderCash.PayPwd.Length < 6)//6位及以上
            {
                DataObj.OutError("1000");
                return;
            }
            //获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderCash.Token);

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }
            if (baseUsers.PayLock == 1)//密码错误太多次锁定
            {
                DataObj.OutError("2050");
                return;
            }
            if (baseUsers.StopPayState == 2)//禁止支付
            {
                DataObj.OutError("6060");
                return;
            }

            //获取系统配置
            SysSet SysSet = Entity.SysSet.FirstOrDefault();

            //这里是执行指纹解锁
            bool IfCheckOk = true;

            if (OrderCash.PayPwd.Substring(0, 3) == "HF_")
            {
                string PassWord = OrderCash.PayPwd;
                PassWord = PassWord.Replace("HF_", "");
                string Token = baseUsers.Token;
                Token = Token + "GoodPay";
                string Md5Token = Token.GetMD5().ToUpper();
                string Pass     = Md5Token.Substring(0, 4) + Md5Token.Substring(Md5Token.Length - 4, 4);
                if (Pass != PassWord)
                {
                    IfCheckOk = false;
                }
            }
            else if (baseUsers.PayPwd != OrderCash.PayPwd.GetPayMD5())
            {
                //原支付密码错误
                IfCheckOk = false;
            }
            if (!IfCheckOk)
            {
                //付密码错误
                baseUsers.PayErr++;
                if (baseUsers.PayErr >= SysSet.PayLock)
                {
                    baseUsers.PayLock = 1;
                }
                Entity.SaveChanges();
                Users Out = new Users();
                Out.PayErr   = SysSet.PayLock - baseUsers.PayErr;
                Out.Cols     = "PayErr";
                DataObj.Data = Out.OutJson();
                //DataObj.Code = "2010";
                DataObj.Code = "2002";
                if (Out.PayErr == 0)
                {
                    DataObj.Msg = "用户支付密码不正确,请明日再试或取回支付密码";
                }
                else
                {
                    DataObj.Msg = "用户支付密码不正确,您还可以尝试" + Out.PayErr + "次";
                }
                DataObj.OutString();
                return;
            }

            baseUsers.PayErr = 0;
            Entity.SaveChanges();

            //开始处理参数
            if (OrderCash.Amoney.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            OrderCash.Amoney = OrderCash.Amoney.FormatMoney();
            //提现金额大于余额
            if (OrderCash.Amoney > baseUsers.Amount)
            {
                DataObj.OutError("6001");
                return;
            }
            //冻结金额小于0不能提现
            if (baseUsers.Frozen < 0)
            {
                DataObj.OutError("6001");
                return;
            }
            if (OrderCash.X.IsNullOrEmpty() || OrderCash.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderCash.Owner.IsNullOrEmpty() || OrderCash.Bank.IsNullOrEmpty() || OrderCash.CardNum.IsNullOrEmpty() || OrderCash.Deposit.IsNullOrEmpty() || OrderCash.Mobile.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            UserBlackList UserBlackList = Entity.UserBlackList.FirstOrDefault(UBL => UBL.CardNumber == OrderCash.CardNum && UBL.State == 3);

            if (UserBlackList != null)
            {
                //提示暂不支持该卡提现
                DataObj.OutError("2017");
                return;
            }
            //获取分支机构信息
            SysAgent SysAgent = new SysAgent();

            if (!baseUsers.Agent.IsNullOrEmpty())
            {
                SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
            }
            if (SysAgent.Id.IsNullOrEmpty())
            {
                SysAgent.Cash0Times = 0;
                SysAgent.Cash1Times = 0;
            }

            decimal Peier = 0;

            if (OrderCash.TrunType == 0)
            {
                if (baseUsers.HasT0 != 1)
                {
                    //T0黑名单
                    DataObj.OutError("6020");
                    return;
                }

                //验证是否满足T0
                int     Day        = (DateTime.Now - baseUsers.AddTime).Days;
                int     OrderCount = Entity.Orders.Count(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == baseUsers.Id);
                decimal?OrderMoney = Entity.Orders.Where(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == baseUsers.Id).Sum(n => (decimal?)n.Amoney);
                if (OrderMoney.IsNullOrEmpty())
                {
                    OrderMoney = 0;
                }
                if (Day >= SysSet.CashDay && OrderCount >= SysSet.CashNum && OrderMoney >= SysSet.CashMoney)
                {
                }
                else
                {
                    DataObj.OutError("6020");
                    return;
                }
                //验证是否在快速提现时段内
                TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.STime <= DateTime.Now && n.ETime >= DateTime.Now && n.TId == 1);
                if (TaskTimeSet == null)
                {
                    DataObj.OutError("6018");
                    return;
                }
                Peier = TaskTimeSet.AllMoney - TaskTimeSet.UsedMoney;
            }

            OrderCash.UId = baseUsers.Id;
            if (OrderCash.TrunType == 0)//加急提现
            {
                if (baseUsers.T0Times < SysAgent.Cash0Times)
                {
                    //用户提现服务费
                    OrderCash.UserRate = 0;
                    //加急费用
                    OrderCash.Cash = 0;
                    //提现服务费
                    OrderCash.ECash = 0;
                }
                else
                {
                    //用户提现服务费=提现金额*加急费率+提现服务费
                    OrderCash.UserRate = (double)(OrderCash.Amoney * baseUsers.Cash0 + baseUsers.ECash0);
                    //提现服务费进位
                    OrderCash.UserRate = OrderCash.UserRate.Ceiling();
                    //加急费用
                    OrderCash.Cash = baseUsers.Cash0;
                    //提现服务费
                    OrderCash.ECash = baseUsers.ECash0;
                }
                //系统提现费成本
                OrderCash.CashRate = OrderCash.Amoney * SysSet.SysCash0 + SysSet.SysECash0;
                //系统手续费进位
                OrderCash.CashRate = OrderCash.CashRate.Ceiling();

                //这里是利润计算==========
                //代理商分润
                double GetAgent = OrderCash.UserRate - (double)(OrderCash.Amoney * SysSet.AgentCash0 + SysSet.AgentECash0);
                if (GetAgent < 0)
                {
                    GetAgent = 0;
                }
                //利润=收取用户手续费-系统支出手续费
                double GetAll = OrderCash.UserRate - (double)OrderCash.CashRate - GetAgent;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderCash.AIdCashGet = (double)GetAll;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderCash.AgentCashGet = GetAgent;
            }
            else
            {
                if (baseUsers.T1Times < SysAgent.Cash1Times)
                {
                    //用户提现服务费
                    OrderCash.UserRate = 0;
                    //加急费用
                    OrderCash.Cash = 0;
                    //提现服务费
                    OrderCash.ECash = 0;
                }
                else
                {
                    //用户提现服务费=提现金额*加急费率+提现服务费
                    OrderCash.UserRate = (double)(OrderCash.Amoney * baseUsers.Cash1 + baseUsers.ECash1);
                    //提现服务费进位
                    OrderCash.UserRate = OrderCash.UserRate.Ceiling();
                    //加急费用
                    OrderCash.Cash = baseUsers.Cash1;
                    //提现服务费
                    OrderCash.ECash = baseUsers.ECash1;
                }

                //系统提现费成本
                OrderCash.CashRate = OrderCash.Amoney * SysSet.SysCash1 + SysSet.SysECash1;
                //系统手续费进位
                OrderCash.CashRate = OrderCash.CashRate.Ceiling();

                //这里是利润计算==========
                //代理商分润
                double GetAgent = OrderCash.UserRate - (double)(OrderCash.Amoney * SysSet.AgentCash1 + SysSet.AgentECash1);
                if (GetAgent < 0)
                {
                    GetAgent = 0;
                }
                //利润=收取用户手续费-系统支出手续费
                double GetAll = OrderCash.UserRate - (double)OrderCash.CashRate - GetAgent;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderCash.AIdCashGet = (double)GetAll;
                //分支机构佣金
                OrderCash.AgentCashGet = GetAgent;
            }
            decimal Money = OrderCash.Amoney - (decimal)OrderCash.UserRate;

            if (Money < 0)
            {
                DataObj.OutError("1006");
                return;
            }
            if (OrderCash.TrunType == 0)//T0时才验证
            {
                //付款金额

                //验证是否配额充足
                if (Peier < Money)
                {
                    DataObj.OutError("6019");
                    return;
                }
            }

            OrderCash.Agent      = SysAgent.Id;//分支机构Id
            OrderCash.AId        = baseUsers.AId;
            OrderCash.FId        = 0;
            OrderCash.OrderState = 1;
            OrderCash.PayState   = 1;
            OrderCash.AgentState = 0;
            OrderCash.FState     = 0;
            OrderCash.AddTime    = DateTime.Now;

            //写入前,判断交易金额限制
            if (OrderCash.Amoney < syscontrol.SNum || OrderCash.Amoney > syscontrol.ENum)
            {
                DataObj.OutError("1006");
                return;
            }
            //写入订单总表
            Orders Orders = new Orders();

            Orders.UId   = OrderCash.UId;
            Orders.TName = baseUsers.TrueName;

            Orders.PayType = 0;
            Orders.PayName = "提现";

            Orders.RUId     = 0;
            Orders.RName    = string.Empty;
            Orders.TType    = 2;
            Orders.TState   = 1;
            Orders.Amoney   = OrderCash.Amoney;
            Orders.Poundage = (decimal)OrderCash.UserRate;
            Orders.AddTime  = DateTime.Now;
            Orders.PayState = 1;//提现为余额支付的一种特殊形式。
            Orders.PayWay   = 4;
            Orders.PayTime  = DateTime.Now;

            Orders.Agent      = OrderCash.Agent;
            Orders.AgentState = 0;
            Orders.AId        = OrderCash.AId;
            Orders.FId        = 0;

            Orders.UserCardId = baseUsers.CardId;

            string OrderAddress = OrderCash.OrderAddress;

            if (OrderAddress.IsNullOrEmpty())
            {
                OrderAddress = Utils.GetAddressByGPS(OrderCash.X, OrderCash.Y);
            }
            Orders.OrderAddress = OrderAddress;
            Orders.X            = OrderCash.X;
            Orders.Y            = OrderCash.Y;

            Orders.TrunType = OrderCash.TrunType;

            Entity.Orders.AddObject(Orders);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, Orders);

            OrderCash.OId = Orders.TNum;

            Entity.OrderCash.AddObject(OrderCash);
            Entity.SaveChanges();

            //帐户变动记录
            int     USERSID  = baseUsers.Id;
            string  TNUM     = OrderCash.OId;
            decimal PAYMONEY = Orders.Amoney;
            string  SP_Ret   = Entity.SP_UsersMoney(USERSID, TNUM, PAYMONEY, 3, "");

            if (SP_Ret != "3")
            {
                Utils.WriteLog(string.Format("U{0},O{1},T{2}:{3}【{4}】", USERSID, TNUM, 3, PAYMONEY, SP_Ret), "SP_UsersMoney");
                Orders.TState        = 0;
                Orders.PayState      = 0;
                OrderCash.OrderState = 0;
                OrderCash.PayState   = 0;
                Entity.SaveChanges();
                DataObj.OutError("8888");
                return;
            }

            if (OrderCash.TrunType == 0)//T0时减少配额
            {
                DateTime    Today       = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
                TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.ODate == Today);
                if (TaskTimeSet != null)
                {
                    TaskTimeSet.UsedMoney += Money;
                    Entity.SaveChanges();
                }
                baseUsers.T0Times = baseUsers.T0Times + 1;
            }
            else
            {
                baseUsers.T1Times = baseUsers.T1Times + 1;
            }
            if (SysSet.CashChecked == 1)
            {
                bool IsAuto = true;
                if (SysSet.EveryDayMaxCash > 0)//超出规定额度,变成人工审核。规定是0刚不执行
                {
                    DateTime Today      = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));
                    var      todaymoney = this.Entity.OrderCash.Where(o => (o.OrderState == 2 || o.OrderState == 1) && o.AddTime > Today && (o.PayState == 1 || o.PayState == 2) && o.UId == baseUsers.Id).Sum(o => (decimal?)o.Amoney) ?? 0m;
                    if (todaymoney > SysSet.EveryDayMaxCash)//当天累加提现 > 规定额度
                    {
                        IsAuto = false;
                    }
                }
                if (IsAuto)
                {
                    //帐户变动记录
                    string SP_Ret2 = Entity.SP_UsersMoney(USERSID, TNUM, PAYMONEY, 4, "");
                    if (SP_Ret2 != "3")
                    {
                        Utils.WriteLog(string.Format("U{0},O{1},T{2}:{3}【{4}】", USERSID, TNUM, 4, PAYMONEY, SP_Ret2), "SP_UsersMoney");
                        DataObj.OutError("8888");
                        return;
                    }
                    else
                    {
                        //自动审核
                        Orders.TState        = 2;
                        OrderCash.OrderState = 2;
                        OrderCash.AuditTime  = DateTime.Now;
                        Entity.SaveChanges();
                    }
                    if (SysSet.CashPayWay == 1)      //开启自动结算时执行
                    {
                        if (OrderCash.TrunType == 0) //T0时自动出款
                        {
                            if (OrderCash.Amoney <= SysSet.QCash0)
                            {
                                Utils.WriteLog("[S]" + Orders.TNum, "CashAuto");
                                OrderCash.PayCash(Orders, Entity);//去付款
                                Utils.WriteLog("[E]" + Orders.TNum, "CashAuto");
                            }
                            else
                            {
                                Utils.WriteLog("结算金额超出自动出款金额" + OrderCash.OId + ":提现金额[" + OrderCash.Amoney + "]自动出款金额[" + SysSet.QCash0 + "]", "OrderCash");
                            }
                        }
                        //else
                        //{
                        //    Utils.WriteLog("T0时自动出款没开启" + OrderCash.OId, "OrderCash");
                        //}
                    }
                    else
                    {
                        Utils.WriteLog("自动结算没开启" + OrderCash.OId, "OrderCash");
                    }
                }
                else
                {
                    Utils.WriteLog("单卡超过限定金额" + OrderCash.OId, "OrderCash");
                }
            }
            else
            {
                Utils.WriteLog("自动审核没开启" + OrderCash.OId, "OrderCash");
            }
            Entity.Refresh(RefreshMode.StoreWins, Orders);
            //=======================================
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = Orders.PayName;
            UserTrack.UserName   = Orders.TNum;
            UserTrack.GPSAddress = Orders.OrderAddress;
            UserTrack.GPSX       = Orders.X;
            UserTrack.GPSY       = Orders.Y;
            Orders.SeavGPSLog(UserTrack, Entity);
            //=======================================

            Orders.SendMsg(Entity);//发送消息类

            if (Orders.PayState == 3 && Orders.Remark == "本银行卡今日提交超过限额!")
            {
                DataObj.OutError("1016");
                return;
            }
            //超过单日单卡(10W)到账限额
            DataObj.Data = Orders.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
Ejemplo n.º 13
0
        /// <summary>
        /// 上传操作
        /// </summary>
        /// <param name="dirPath">目录路径</param>
        /// <param name="fileTypes">文件类型</param>
        /// <param name="maxFileSize">最大文件大小,默认10M</param>
        /// <returns></returns>
        protected Task <UploadResult> Upload(string dirPath, string fileTypes, long maxFileSize = 10000000)
        {
            if (!Request.Content.IsMimeMultipartContent("form-data"))
            {
                throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
            }
            string dirTempPath = SysControl.GetPhysicalPath(dirPath);

            if (!Directory.Exists(dirTempPath))
            {
                Directory.CreateDirectory(dirTempPath);
            }
            // 设置上传目录
            var provider = new MultipartFormDataStreamProvider(dirTempPath);
            var task     = Request.Content.ReadAsMultipartAsync(provider).ContinueWith <UploadResult>(o =>
            {
                FileInfo fileInfo = null;
                try
                {
                    UploadResult result = new UploadResult();
                    // 判断文件数据
                    if (!(provider.FileData.Count > 0))
                    {
                        throw new Exception("上传失败,文件数据不存在!");
                    }
                    if (o.IsFaulted || o.IsCanceled)
                    {
                        throw new Exception("上传失败!");
                    }

                    var file           = provider.FileData[0];
                    string oldFileName = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');
                    fileInfo           = new FileInfo(file.LocalFileName);
                    result.Length      = fileInfo.Length;

                    if (fileInfo.Length <= 0)
                    {
                        throw new Exception("请选择上传文件!");
                    }
                    if (fileInfo.Length > maxFileSize)
                    {
                        throw new Exception("上传文件大小超过限制!");
                    }

                    var fileExt = oldFileName.Substring(oldFileName.LastIndexOf('.'));
                    if (fileExt == null ||
                        Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1)
                    {
                        throw new Exception("不支持上传文件类型!");
                    }

                    string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo);
                    string filePath    = Path.Combine(dirPath, newFileName + fileExt);

                    fileInfo.CopyTo(Path.Combine(dirTempPath, newFileName + fileExt), true);

                    result.FileName = newFileName;
                    result.FilePath = filePath;
                    result.FileId   = newFileName;
                    result.Type     = FileControl.GetContentType(fileExt);
                    return(result);
                }
                catch (Exception ex)
                {
                    throw new Exception("上传失败!");
                }
                finally
                {
                    if (fileInfo != null)
                    {
                        fileInfo.Delete();
                    }
                }
            });

            return(task);
        }
Ejemplo n.º 14
0
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderPayConfig]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            PayConfigOrder PayConfigOrder = new PayConfigOrder();

            PayConfigOrder = JsonToObject.ConvertJsonToModel(PayConfigOrder, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            if (PayConfigOrder.PCCId.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (PayConfigOrder.X.IsNullOrEmpty() || PayConfigOrder.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            //获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == PayConfigOrder.Token);

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }

            //获取分支机构信息
            SysAgent SysAgent = new SysAgent();

            if (!baseUsers.Agent.IsNullOrEmpty())
            {
                SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
            }
            //获取系统配置
            //SysSet SysSet = Entity.SysSet.FirstOrDefault();

            PayConfigChange PCC = Entity.PayConfigChange.FirstOrDefault(n => n.Id == PayConfigOrder.PCCId);

            if (PCC == null)
            {
                DataObj.OutError("1001");
                return;
            }

            PayConfigOrder.UId    = baseUsers.Id;
            PayConfigOrder.Agent  = baseUsers.Agent;
            PayConfigOrder.AId    = baseUsers.AId;
            PayConfigOrder.Amoney = PCC.BPrice.GetValueOrDefault();

            PayConfigOrder.OrderState = 1;
            PayConfigOrder.PayState   = 0;
            PayConfigOrder.AddTime    = DateTime.Now;
            //这里是利润计算==========
            //分支机构提成=产品价格-代理商价格
            decimal GetAll = PCC.BPrice.GetValueOrDefault() - PCC.CPrice.GetValueOrDefault();

            //利润舍位
            GetAll = GetAll.Floor();
            //总利润
            PayConfigOrder.AIdGet = (double)GetAll;
            //分支机构佣金设置为0,待分润计算后再写入
            PayConfigOrder.AgentGet = 0;

            PayConfigOrder.AgentState = 0;

            //这里暂时写0,等后面支付再重新计算
            PayConfigOrder.SysRate  = 0;
            PayConfigOrder.Poundage = PayConfigOrder.Amoney * (decimal)PayConfigOrder.SysRate;

            //写入订单总表
            Orders Orders = new Orders();

            Orders.UId   = PayConfigOrder.UId;
            Orders.TName = PCC.Title;

            Orders.PayType = 0;
            Orders.PayName = "升级费率";

            Orders.RUId     = 0;
            Orders.RName    = string.Empty;
            Orders.TType    = 6;
            Orders.TState   = 1;
            Orders.Amoney   = PayConfigOrder.Amoney;
            Orders.Poundage = PayConfigOrder.Poundage;
            Orders.AddTime  = DateTime.Now;
            Orders.PayState = 0;
            Orders.PayWay   = 0;

            Orders.Agent      = PayConfigOrder.Agent;
            Orders.AgentState = 0;
            Orders.AId        = PayConfigOrder.AId;
            Orders.FId        = 0;

            string OrderAddress = PayConfigOrder.OrderAddress;

            if (OrderAddress.IsNullOrEmpty())
            {
                OrderAddress = Utils.GetAddressByGPS(PayConfigOrder.X, PayConfigOrder.Y);
            }
            Orders.OrderAddress = OrderAddress;
            Orders.X            = PayConfigOrder.X;
            Orders.Y            = PayConfigOrder.Y;

            Entity.Orders.AddObject(Orders);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, Orders);

            PayConfigOrder.OId = Orders.TNum;
            Entity.PayConfigOrder.AddObject(PayConfigOrder);
            Entity.SaveChanges();

            //=======================================
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = Orders.PayName;
            UserTrack.UserName   = Orders.TNum;
            UserTrack.GPSAddress = Orders.OrderAddress;
            UserTrack.GPSX       = Orders.X;
            UserTrack.GPSY       = Orders.Y;
            Orders.SeavGPSLog(UserTrack, Entity);
            //=======================================
            Orders.SendMsg(Entity);//发送消息类
            //=======================================
            Orders.Cols = "TNum,PayId,Amount,PayState";
            string TNum = Orders.TNum;
            string Sign = (TNum + "NewPay").GetMD5().Substring(8, 8);

            Orders.PayId = PayPath + "/pay/" + TNum + ".html?sign=" + Sign;
            //=======================================

            //获取最佳支付通道
            IList <PayConfig>  PayConfigList  = Entity.PayConfig.Where(n => n.State == 1).OrderBy(n => n.Cost).ToList();
            IList <SysControl> SysControlList = Entity.SysControl.OrderBy(n => n.Sort).ToList();//SysControl
            IList <SysControl> SCList         = new List <SysControl>();
            IList <PayConfig>  PCList         = new List <PayConfig>();

            foreach (var p in SysControlList)
            {
                SysControl T = p.ChkState();
                if (T.State == 1)
                {
                    SCList.Add(p);
                }
            }
            foreach (var p in PayConfigList)
            {
                SysControl T = SCList.FirstOrDefault(n => n.PayWay == p.Id);
                if (T != null)
                {
                    if (PayConfigOrder.Amoney >= (decimal)T.SNum && PayConfigOrder.Amoney <= (decimal)T.ENum)
                    {
                        PCList.Add(p);
                    }
                }
            }
            IList <PayConfig> CashList = PCList.Where(n => n.GroupType == "Cash").OrderBy(n => n.Cost).ToList();
            IList <PayConfig> BankList = PCList.Where(n => n.GroupType == "Bank").OrderBy(n => n.Cost).ToList();
            IList <PayConfig> WxList   = PCList.Where(n => n.GroupType == "WeiXin").OrderBy(n => n.Cost).ToList();
            IList <PayConfig> AliList  = PCList.Where(n => n.GroupType == "AliPay").OrderBy(n => n.Cost).ToList();

            IList <PayConfig> List = new List <PayConfig>();

            if (CashList.Count > 0)
            {
                PayConfig Cash = new PayConfig();
                Cash.GroupType = "Cash";
                Cash.Name      = "余额支付";
                Cash.State     = 1;
                Cash.Cols      = "Name,GroupType,State";
                List.Add(Cash);
            }
            if (BankList.Count > 0)
            {
                PayConfig Bank = new PayConfig();
                Bank.GroupType = "Bank";
                Bank.Name      = "银联支付";
                Bank.State     = 1;
                Bank.Cols      = "Name,GroupType,State";
                List.Add(Bank);
            }
            //if (WxList.Count > 0)
            //{
            //    PayConfig Wx = new PayConfig();
            //    Wx.GroupType = "WeiXin";
            //    Wx.Name = "微信支付";
            //    Wx.State = 0;
            //    Wx.Cols = "Name,GroupType,State";
            //    List.Add(Wx);
            //}
            if (AliList.Count > 0)
            {
                PayConfig Ali = new PayConfig();
                Ali.GroupType = "AliPay";
                Ali.Name      = "支付宝支付";
                Ali.State     = 1;
                Ali.Cols      = "Name,GroupType,State";
                List.Add(Ali);
            }
            string PCString = List.EntityToJson();
            JArray PCJson   = (JArray)JsonConvert.DeserializeObject(PCString);

            Orders.PayConfig = PCJson;

            Orders.Cols += ",PayConfig";

            //Orders.paycon
            DataObj.Data = Orders.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
Ejemplo n.º 15
0
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderQC]:", "【Data】" + Data, Ex);
                json = null;
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            OrderF2F OrderF2F = new OrderF2F();

            OrderF2F = JsonToObject.ConvertJsonToModel(OrderF2F, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            #region 获取并处理用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderF2F.Token);
            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                //DataObj.OutError("2006");
                //return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                //DataObj.OutError("2008");
                //return;
            }
            string NeekName = baseUsers.NeekName;
            if (NeekName.IsNullOrEmpty())
            {
                NeekName = baseUsers.TrueName;
            }
            if (NeekName.IsNullOrEmpty())
            {
                NeekName = "货款";
            }
            #endregion
            #region 创建交易
            if (OrderF2F.Action == "Create")
            {
                #region 处理选择通道
                int PayWay = OrderF2F.PayWay;

                string Tag     = "";
                byte   PayType = 1;
                string PayName = "";
                string OpenId  = ""; //微信JSAPI专用
                if (OrderF2F.OType == 7)
                {                    //支付宝
                    Tag = "AliPay";
                }
                if (OrderF2F.OType == 8)
                {//微信
                    Tag = "WeiXin";
                }

                if (PayWay.IsNullOrEmpty())
                {
                    if (Tag == "AliPay")
                    {
                        PayWay = 5;//兼容老版本
                    }
                    if (Tag == "WeiXin")
                    {
                        PayWay = 6;//兼容老版本
                    }
                }

                PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == PayWay && n.State == 1);
                //获取系统支付配置
                if (PayConfig == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                if (PayConfig.GroupType != Tag)
                {
                    DataObj.OutError("1000");
                    return;
                }
                PayName = "扫码付-" + PayConfig.Name;
                byte ComeWay = 1;
                if (!OrderF2F.PayId.IsNullOrEmpty())
                {
                    if (OrderF2F.PayId == "shop")
                    {
                        ComeWay = 2;
                    }
                    PayName = "收银台-" + PayConfig.Name;
                    if (OrderF2F.OType == 7)
                    {
                        if (OrderF2F.PayId == "shop")
                        {
                            OrderF2F.PayId = string.Empty;
                            PayType        = 2;
                        }
                    }
                    if (OrderF2F.OType == 8)
                    {
                        OpenId         = OrderF2F.PayId;
                        OrderF2F.PayId = string.Empty;
                        PayType        = 2;
                    }
                }
                int InType = 0;
                if (!OrderF2F.InType.IsNullOrEmpty())
                {
                    InType = 1;
                }
                SysControl SysControl = new SysControl();
                bool       IsNew      = true;
                if (OrderF2F.Id.IsNullOrEmpty())
                {
                    //这是旧逻辑,有一些旧版还在用
                    #region 版本比较 升级之后比较长时间后可以考滤删除版本判断代码
                    var vSysAgent = this.Entity.SysAgent.FirstOrDefault(o => o.Id == baseUsers.Agent);
                    if (vSysAgent == null)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    IsNew = BizExt.NewOrOldVersion(vSysAgent, Equipment, this.Entity);
                    #endregion
                    if (IsNew)//新版
                    {
                        if (InType == 1)
                        {
                            SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag && n.PayWay == PayWay && n.LagEntryDay > 0);
                        }
                        else
                        {
                            SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag && n.PayWay == PayWay && n.LagEntryDay == 0);
                        }
                    }
                    else//旧版
                    {
                        SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag && n.PayWay == PayWay);
                    }
                }
                else
                {
                    SysControl = Entity.SysControl.FirstOrDefault(n => n.Id == OrderF2F.Id);
                    if (SysControl.LagEntryDay > 0)
                    {
                        InType = 1;
                    }
                    else
                    {
                        InType = 0;
                    }
                }
                //获取系统支付配置
                if (SysControl == null)
                {
                    DataObj.OutError("1005");
                    return;
                }
                if (InType == 1 && (SysControl.LagEntryDay.IsNullOrEmpty() || SysControl.LagEntryNum.IsNullOrEmpty()))
                {
                    DataObj.Msg = "请升级到最新版再发起Tn到帐交易!";
                    DataObj.OutError("1005");
                    return;
                }
                SysControl syscontrol = SysControl.ChkState();
                if (syscontrol.State != 1)
                {
                    DataObj.OutError("1005");
                    return;
                }
                #endregion

                #region 订单生成
                //处理交易地点
                if (OrderF2F.X.IsNullOrEmpty() || OrderF2F.Y.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                //开始处理参数 OType通道,7支付宝,8微信
                if (OrderF2F.Amoney.IsNullOrEmpty() || OrderF2F.OType.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                OrderF2F.Amoney = OrderF2F.Amoney.FormatMoney();

                //获取用户支付配置
                UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PId == PayWay);
                if (UserPay == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                //获取分支机构信息
                SysAgent SysAgent = new SysAgent();
                if (!baseUsers.Agent.IsNullOrEmpty())
                {
                    SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
                }

                OrderF2F.PayWay = PayWay;

                //获取系统配置
                SysSet SysSet = Entity.SysSet.FirstOrDefault();
                if (InType == 1)
                {//客户端传来T+N但是系统没开启时无效
                    if (SysSet.LagEntry == 0)
                    {
                        InType = 0;
                    }
                }
                if (InType == 1)
                {
                    //手续费
                    OrderF2F.Poundage = 0;
                    //商户费率
                    OrderF2F.UserRate = 0;
                    //T+n时,代理佣金为 交易金额*费率
                    decimal AgentPayGet = OrderF2F.Amoney * SysSet.AgentGet;
                    OrderF2F.AgentPayGet = (Double)AgentPayGet;
                    //佣金舍位
                    OrderF2F.AgentPayGet = OrderF2F.AgentPayGet.Floor();
                }
                else
                {
                    //手续费
                    OrderF2F.Poundage = OrderF2F.Amoney * (decimal)UserPay.Cost;
                    //手续费取进
                    OrderF2F.Poundage = OrderF2F.Poundage.Ceiling();
                    //商户费率
                    OrderF2F.UserRate = UserPay.Cost;
                    //分支机构佣金设置为0,待分润计算后再写入
                    OrderF2F.AgentPayGet = 0;
                }

                OrderF2F.UId = baseUsers.Id;
                //到帐金额=支付金额-手续费
                OrderF2F.PayMoney = OrderF2F.Amoney - OrderF2F.Poundage;
                //第三方支付通道率
                OrderF2F.SysRate = (double)PayConfig.Cost;
                //这里是利润计算==========
                //利润=总金额-到帐-支付手续费
                decimal GetAll = OrderF2F.Amoney - OrderF2F.PayMoney - OrderF2F.Amoney * (decimal)OrderF2F.SysRate;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderF2F.AIdPayGet = (double)GetAll;


                OrderF2F.Agent      = SysAgent.Id;//分支机构Id
                OrderF2F.AId        = baseUsers.AId;
                OrderF2F.FId        = 0;
                OrderF2F.OrderState = 1;
                OrderF2F.PayState   = 0;
                OrderF2F.AgentState = 0;
                OrderF2F.AddTime    = DateTime.Now;
                OrderF2F.PayId      = string.Empty;
                OrderF2F.PayType    = PayType;

                //写入前,判断交易金额限制
                if (OrderF2F.Amoney < syscontrol.SNum || OrderF2F.Amoney > syscontrol.ENum)
                {
                    DataObj.OutError("1006");
                    return;
                }
                //写入订单总表
                Orders Orders = new Orders();
                Orders.UId   = OrderF2F.UId;
                Orders.TName = NeekName;

                Orders.PayType = PayType;
                Orders.PayName = PayName;

                Orders.RUId     = 0;
                Orders.RName    = string.Empty;
                Orders.TType    = OrderF2F.OType;
                Orders.TState   = 1;
                Orders.Amoney   = OrderF2F.Amoney;
                Orders.Poundage = OrderF2F.Poundage;
                Orders.AddTime  = DateTime.Now;
                Orders.PayState = 0;
                Orders.PayWay   = PayConfig.Id;

                Orders.Agent      = OrderF2F.Agent;
                Orders.AgentState = 0;
                Orders.AId        = OrderF2F.AId;
                Orders.FId        = 0;
                Orders.ComeWay    = ComeWay;
                string OrderAddress = OrderF2F.OrderAddress;
                if (OrderAddress.IsNullOrEmpty())
                {
                    OrderAddress = Utils.GetAddressByGPS(OrderF2F.X, OrderF2F.Y);
                }
                Orders.OrderAddress = OrderAddress;
                Orders.X            = OrderF2F.X;
                Orders.Y            = OrderF2F.Y;

                if (InType == 1)
                {
                    if (IsNew)//新版
                    {
                        Orders.LagEntryDay = SysControl.LagEntryDay;
                        Orders.LagEntryNum = SysControl.LagEntryNum;
                    }
                    else
                    {
                        Orders.LagEntryDay = SysSet.LagEntryDay;
                        Orders.LagEntryNum = SysSet.LagEntryNum;
                    }
                }
                else
                {
                    Orders.LagEntryDay = 0;
                    Orders.LagEntryNum = 0;
                }

                Entity.Orders.AddObject(Orders);
                Entity.SaveChanges();
                Entity.Refresh(RefreshMode.StoreWins, Orders);

                OrderF2F.OId = Orders.TNum;
                Entity.OrderF2F.AddObject(OrderF2F);
                Entity.SaveChanges();

                //=======================================
                UserTrack.ENo        = DataObj.ENo;
                UserTrack.OPType     = Orders.PayName;
                UserTrack.UserName   = Orders.TNum;
                UserTrack.GPSAddress = Orders.OrderAddress;
                UserTrack.GPSX       = Orders.X;
                UserTrack.GPSY       = Orders.Y;
                if (!OrderF2F.IP.IsNullOrEmpty())
                {
                    UserTrack.IP = OrderF2F.IP;
                }
                Orders.SeavGPSLog(UserTrack, Entity);
                //=======================================

                #endregion

                if (PayConfig.DllName == "AliPay")
                {
                    #region 提交支付宝
                    string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });    //接口信息 商户号,密钥,支付宝号
                    if (PayConfigArr.Length != 3)
                    {
                        DataObj.OutError("9999");
                        return;
                    }
                    if (AlipayVer == "1.0")
                    {
                        #region 1.0老接口
                        Submit Submit = new Submit();
                        Submit.pid = PayConfigArr[0];
                        Submit.key = PayConfigArr[1];
                        //卖家支付宝帐户
                        string seller_email = PayConfigArr[2];

                        //订单业务类型
                        string product_code = "QR_CODE_OFFLINE";
                        //SOUNDWAVE_PAY_OFFLINE:声波支付,FINGERPRINT_FAST_PAY:指纹支付,BARCODE_PAY_OFFLINE:条码支付

                        ////////////////////////////////////////////////////////////////////////////////////////////////
                        //把请求参数打包成数组
                        SortedDictionary <string, string> sParaTemp = new SortedDictionary <string, string>();
                        sParaTemp.Add("partner", Submit.pid);
                        sParaTemp.Add("_input_charset", "utf-8");
                        sParaTemp.Add("service", "alipay.acquire.precreate");

                        sParaTemp.Add("out_trade_no", OrderF2F.OId);
                        sParaTemp.Add("subject", Orders.TName + ":" + OrderF2F.OId);
                        sParaTemp.Add("product_code", product_code);
                        sParaTemp.Add("total_fee", OrderF2F.Amoney.ToString("F2"));
                        sParaTemp.Add("seller_email", seller_email);

                        sParaTemp.Add("notify_url", NoticePath + "/PayCenter/AliPay/Notice.html");
                        //建立请求
                        string sHtmlText = Submit.BuildRequest(sParaTemp);
                        Utils.WriteLog(sHtmlText, "orderface");
                        try
                        {
                            XmlDocument xmlDoc = new XmlDocument();
                            xmlDoc.LoadXml(sHtmlText);
                            string is_success = xmlDoc.SelectSingleNode("/alipay/is_success").InnerText;
                            if (is_success == "T")
                            {
                                string result_code = xmlDoc.SelectSingleNode("/alipay/response/alipay/result_code").InnerText;
                                if (result_code == "SUCCESS")
                                {
                                    //成功
                                    string qr_code = xmlDoc.SelectSingleNode("/alipay/response/alipay/qr_code").InnerText;

                                    /*
                                     * voucher_type 凭证类型
                                     * qr_code 二维码码串
                                     * pic_url 二维码图片地址
                                     * small_pic_ur 二维码小图地址
                                     */
                                    OrderF2F.PayId = qr_code;
                                    Entity.SaveChanges();
                                    Orders.PayId = qr_code;
                                }
                                else
                                {
                                    Orders.TState       = 0;
                                    OrderF2F.OrderState = 0;
                                    Entity.SaveChanges();
                                }
                            }
                            else
                            {
                                Orders.TState       = 0;
                                OrderF2F.OrderState = 0;
                                Entity.SaveChanges();
                            }
                        }
                        catch (Exception)
                        {
                            //Utils.WriteLog(Ex.ToString());
                            Orders.TState       = 0;
                            OrderF2F.OrderState = 0;
                            Entity.SaveChanges();
                        }
                        #endregion
                    }
                    if (AlipayVer == "2.0")
                    {
                        #region 2.0新接口

                        ALF2FPAY ALF2FPAY = new ALF2FPAY();
                        ALF2FPAY.pid   = PayConfigArr[0];
                        ALF2FPAY.appId = PayConfigArr[2];
                        IAopClient    client = new DefaultAopClient(ALF2FPAY.serverUrl, ALF2FPAY.appId, ALF2FPAY.merchant_private_key, "json", ALF2FPAY.version, ALF2FPAY.sign_type, ALF2FPAY.alipay_public_key, ALF2FPAY.charset);
                        StringBuilder sb     = new StringBuilder();
                        sb.Append("{");
                        sb.Append("\"out_trade_no\":\"" + OrderF2F.OId + "\",");
                        sb.Append("\"total_amount\":\"" + OrderF2F.Amoney.ToMoney() + "\",");
                        sb.Append("\"timeout_express\":\"30m\",");
                        sb.Append("\"subject\":\"" + OrderF2F.OId + "\"");
                        sb.Append("}");
                        AlipayTradePrecreateRequest payRequst = new AlipayTradePrecreateRequest();

                        string notify_url = NoticePath + "/PayCenter/AliPay/Notice.html";
                        payRequst.SetNotifyUrl(notify_url);

                        payRequst.BizContent = sb.ToString();

                        Dictionary <string, string>  paramsDict  = (Dictionary <string, string>)payRequst.GetParameters();
                        AlipayTradePrecreateResponse payResponse = client.Execute(payRequst);

                        if (payResponse != null)
                        {
                            payResponse.SaveLog(Entity);    //保存记录
                            if (payResponse.Code == "10000")
                            {
                                OrderF2F.PayId = payResponse.QrCode;
                                Entity.SaveChanges();
                                Orders.PayId = payResponse.QrCode;
                            }
                            else
                            {
                                Orders.TState       = 0;
                                OrderF2F.OrderState = 0;
                                Entity.SaveChanges();
                            }
                        }
                        else
                        {
                            Orders.TState       = 0;
                            OrderF2F.OrderState = 0;
                            Entity.SaveChanges();
                        }
                        #endregion
                    }
                    #endregion
                }
                if (PayConfig.DllName == "WeiXin")
                {
                    #region 提交微信
                    //初始化支付配置
                    WxPayConfig WxPayConfig  = new WxPayConfig();
                    string[]    PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 appid,mchid,key,appsecret
                    if (PayConfigArr.Length != 4 && PayConfigArr.Length != 5)
                    {
                        DataObj.OutError("9999");
                        return;
                    }
                    string ServerIp     = ConfigurationManager.AppSettings["ServerIp"].ToString();
                    string Wx_Cert_Path = ConfigurationManager.AppSettings["Wx_Cert_Path"].ToString();
                    string Wx_Cert_PWD  = ConfigurationManager.AppSettings["Wx_Cert_PWD"].ToString();
                    WxPayConfig.IP        = ServerIp;
                    WxPayConfig.APPID     = PayConfigArr[0];
                    WxPayConfig.MCHID     = PayConfigArr[1];
                    WxPayConfig.KEY       = PayConfigArr[2];
                    WxPayConfig.APPSECRET = PayConfigArr[3];
                    if (PayConfigArr.Length == 5)
                    {
                        WxPayConfig.SubMCHID = PayConfigArr[4];
                    }
                    WxPayConfig.SSLCERT_PATH     = Wx_Cert_Path;
                    WxPayConfig.SSLCERT_PASSWORD = Wx_Cert_PWD;
                    //支付配置结束

                    WxPayData data = new WxPayData();
                    //data.SetValue("auth_code", OrderF2F.PayId);//授权码
                    data.SetValue("body", Orders.TName + ":" + OrderF2F.OId); //商品描述
                    string total_fee = (OrderF2F.Amoney * 100).ToString("F0");
                    data.SetValue("total_fee", total_fee);                    //总金额
                    data.SetValue("out_trade_no", OrderF2F.OId);              //产生随机的商户订单号
                    if (PayType == 2)
                    {
                        data.SetValue("trade_type", "JSAPI");    //交易类型
                        if (PayConfigArr.Length == 5)
                        {                                        //子商户模式
                            data.SetValue("sub_openid", OpenId); //用户OpenId
                        }
                        else
                        {
                            data.SetValue("openid", OpenId);    //用户OpenId
                        }
                    }
                    else
                    {
                        data.SetValue("trade_type", "NATIVE");    //交易类型
                    }

                    data.SetValue("notify_url", NoticePath + "/PayCenter/WeiXinPay/Notice.html"); //异步通知地址
                    WxPayData result = WxPayApi.UnifiedOrder(data, WxPayConfig, 10);              //调用统一下单接口
                    result.SaveLog(Entity);

                    if (!result.IsSet("return_code") || result.GetValue("return_code").ToString() == "FAIL")
                    {    //支付失败
                        Orders.TState       = 0;
                        OrderF2F.OrderState = 0;
                        Entity.SaveChanges();
                    }
                    else
                    {
                        if (!result.CheckSign(WxPayConfig.KEY))
                        {    //签名失败,取消订单
                            Orders.TState       = 0;
                            OrderF2F.OrderState = 0;
                            Entity.SaveChanges();
                        }
                        else
                        {
                            if (result.GetValue("return_code").ToString() == "SUCCESS" && result.GetValue("result_code").ToString() == "SUCCESS")
                            {
                                //获取支付字符串
                                if (PayType == 2)    //JSAPI
                                {
                                    string PayId = result.GetValue("prepay_id").ToString();
                                    OrderF2F.PayId = PayId;
                                }
                                else
                                {
                                    string PayId = result.GetValue("code_url").ToString();
                                    OrderF2F.PayId = PayId;
                                }
                                Entity.SaveChanges();
                                Orders.PayId = OrderF2F.PayId;
                            }
                            else
                            {
                                //业务明确失败
                                Orders.TState       = 0;
                                OrderF2F.OrderState = 0;
                                Entity.SaveChanges();
                            }
                        }
                    }
                    #endregion
                }


                #region 提交好付
                if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin")
                {
                    string NoticeUrl = "";
                    string Action    = "";
                    if (PayConfig.DllName == "HFAliPay")
                    {
                        NoticeUrl = NoticePath + "/PayCenter/HFAliPay/Notice.html";
                        Action    = "AliSao";
                    }
                    if (PayConfig.DllName == "HFWeiXin")
                    {
                        NoticeUrl = NoticePath + "/PayCenter/HFWeiXin/Notice.html";
                        if (PayType == 2)
                        {
                            Action = "WxJsApi";
                        }
                        else
                        {
                            Action = "WxSao";
                        }
                    }
                    string[] PayConfigArr = PayConfig.QueryArray.Split(',');
                    if (PayConfigArr.Length != 3)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    //提交结算中心
                    string merId    = PayConfigArr[0]; //商户号
                    string merKey   = PayConfigArr[1]; //商户密钥
                    string JsPayWay = PayConfigArr[2]; //绑定通道

                    string  orderId    = Orders.TNum;  //商户流水号
                    decimal money      = Orders.Amoney * 100;
                    long    intmoney   = Int64.Parse(money.ToString("F0"));
                    string  OrderMoney = intmoney.ToString();//金额,以分为单

                    string OpenIdStr = "";
                    if (PayConfig.Id == 13)
                    {
                        //特殊处理通道
                        Action = "WxJsApi";
                        OpenId = "OpenId";
                    }
                    if (Action == "WxJsApi")
                    {
                        OpenIdStr = ",\"openid\":\"" + OpenId + "\"";
                    }

                    string PostJson = "{\"action\":\"" + Action + "\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"payway\":\"" + JsPayWay + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\"" + OpenIdStr + "}";

                    string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                    string Sign       = (DataBase64 + merKey).GetMD5();

                    DataBase64 = HttpUtility.UrlEncode(DataBase64);
                    string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);

                    string HF_Url = "https://api.zhifujiekou.com/api/mpgateway";

                    string Ret = Utils.PostRequest(HF_Url, PostData, "utf-8");

                    JObject JS = new JObject();
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception Ex)
                    {
                        Log.Write("[Order_HF]:", "【PostData】" + PostData + "\n【Ret】" + Ret, Ex);
                        json = null;
                    }
                    if (JS == null)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    string resp = JS["resp"].ToString();
                    Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception Ex)
                    {
                        Log.Write("[Order_HF]:", "【Ret2】" + Ret, Ex);
                        JS = null;
                    }
                    if (JS == null)
                    {
                        DataObj.OutError("1000");
                        return;
                    }
                    string respcode = JS["respcode"].ToString();
                    if (respcode != "00")
                    {
                        string respmsg = JS["respmsg"].ToString();
                        DataObj.OutError("1000");
                        Utils.WriteLog("[Order_HF_Err]:【" + respcode + "】" + respmsg, "orderface");
                        return;
                    }
                    if (JS["formaction"] == null)
                    {
                        Utils.WriteLog("[Order_HF_Err]:【formaction NULL】" + Ret, "orderface");
                        DataObj.OutError("2096");
                        return;
                    }
                    Orders.PayId = JS["formaction"].ToString();
                    if (PayConfig.Id == 13)
                    {
                        string myData = "{\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\",\"code\":\"" + Orders.PayId + "\"}";
                        DataBase64 = LokFuEncode.Base64Encode(myData, "utf-8");
                        Sign       = (DataBase64 + merKey).GetMD5();
                        DataBase64 = HttpUtility.UrlEncode(DataBase64);
                        string myUrl = string.Format("req={0}&sign={1}", DataBase64, Sign);
                        string Url   = "https://api.zhifujiekou.com/wxjsapi/gopay.html?" + myUrl;

                        OrderF2F.PayId = Url;
                        Entity.SaveChanges();
                        Orders.PayId = "http://api.kkapay.com/home/jump?tnum=" + Orders.TNum;
                    }
                }
                #endregion
                Orders.Cols  = "Id,TNum,PayId";
                DataObj.Data = Orders.OutJson();
                DataObj.Code = "0000";
                DataObj.OutString();
            }
            #endregion
            if (OrderF2F.Action == "GET")//获取订交易信息
            {
                //开始处理参数
                if (OrderF2F.OId.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == OrderF2F.OId && n.UId == baseUsers.Id);
                if (Orders == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                OrderF2F Orderf2f = Entity.OrderF2F.FirstOrDefault(n => n.OId == OrderF2F.OId && n.UId == baseUsers.Id);
                if (Orders.TState == 1 && Orders.PayState == 0)
                {
                    PayConfig PayConfig = Entity.PayConfig.FirstOrNew(n => n.Id == Orders.PayWay);
                    if (PayConfig.DllName == "AliPay")
                    {
                        #region 支付宝处理
                        string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });    //接口信息 商户号,密钥,支付宝号
                        if (PayConfigArr.Length != 3)
                        {
                            DataObj.OutError("9999");
                            return;
                        }
                        if (AlipayVer == "1.0")
                        {
                            #region 1.0老接口
                            string pid = PayConfigArr[0];
                            string key = PayConfigArr[1];

                            int queryTimes = 10;    //查询次数计数器
                            int Run        = 0;
                            while (queryTimes > 0 && Run != 1)
                            {
                                AliPayApi Api        = new AliPayApi();
                                int       succResult = Api.AliPayQuery(Orderf2f.OId, pid, key);
                                //如果需要继续查询,则等待2s后继续
                                if (succResult == 2)
                                {
                                    //Thread.Sleep(5000);
                                    //continue;
                                    Run = 1;    //跳出循环,20160420
                                }
                                //查询成功,返回订单查询接口返回的数据
                                else if (succResult == 1)
                                {
                                    //Orders.PayState = 1;//此处不保存支付状态,由通知返回再操作
                                    Orders = Orders.PaySuccess(Entity);
                                    Run    = 1;
                                }
                                //订单交易失败
                                else
                                {
                                    Orders.TState       = 0;
                                    Orderf2f.OrderState = 0;
                                    Entity.SaveChanges();
                                }
                                queryTimes--;
                            }
                            #endregion
                        }
                        if (AlipayVer == "2.0")
                        {
                            #region 2.0新接口
                            ALF2FPAY ALF2FPAY = new ALF2FPAY();
                            ALF2FPAY.pid   = PayConfigArr[0];
                            ALF2FPAY.appId = PayConfigArr[2];

                            IAopClient client = new DefaultAopClient(ALF2FPAY.serverUrl, ALF2FPAY.appId, ALF2FPAY.merchant_private_key, "json", ALF2FPAY.version, ALF2FPAY.sign_type, ALF2FPAY.alipay_public_key, ALF2FPAY.charset);

                            string      QueryStr = "{\"out_trade_no\":\"" + Orders.TNum + "\"}";
                            ALF2FPAYObj ObjQuery = new ALF2FPAYObj();
                            ObjQuery.BizCode = QueryStr;
                            ObjQuery.Client  = client;
                            ObjQuery.Entity  = Entity;
                            AliPayApi Api = new AliPayApi();
                            AlipayTradeQueryResponse queryResponse = Api.LoopAlipayQuery(ObjQuery, 1);
                            if (queryResponse != null)
                            {
                                if (queryResponse.Code == "10000")
                                {
                                    if (queryResponse.TradeStatus == "TRADE_FINISHED" || queryResponse.TradeStatus == "TRADE_SUCCESS")
                                    {
                                        //Orders.PayState = 1;//此处不保存支付状态,由通知返回再操作
                                        Orders = Orders.PaySuccess(Entity);
                                    }
                                }
                            }
                            #endregion
                        }
                        #endregion
                    }
                    if (PayConfig.DllName == "WeiXin")
                    {
                        #region 微信处理
                        //初始化支付配置
                        WxPayConfig WxPayConfig  = new WxPayConfig();
                        string[]    PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' }); //接口信息 appid,mchid,key,appsecret
                        if (PayConfigArr.Length != 4 && PayConfigArr.Length != 5)
                        {
                            DataObj.OutError("9999");
                            return;
                        }
                        string ServerIp     = ConfigurationManager.AppSettings["ServerIp"].ToString();
                        string Wx_Cert_Path = ConfigurationManager.AppSettings["Wx_Cert_Path"].ToString();
                        string Wx_Cert_PWD  = ConfigurationManager.AppSettings["Wx_Cert_PWD"].ToString();
                        WxPayConfig.IP        = ServerIp;
                        WxPayConfig.APPID     = PayConfigArr[0];
                        WxPayConfig.MCHID     = PayConfigArr[1];
                        WxPayConfig.KEY       = PayConfigArr[2];
                        WxPayConfig.APPSECRET = PayConfigArr[3];
                        if (PayConfigArr.Length == 5)
                        {
                            WxPayConfig.SubMCHID = PayConfigArr[4];
                        }
                        WxPayConfig.SSLCERT_PATH     = Wx_Cert_Path;
                        WxPayConfig.SSLCERT_PASSWORD = Wx_Cert_PWD;
                        //支付配置结束
                        int queryTimes = 10;    //查询次数计数器
                        int Run        = 0;
                        while (queryTimes > 0 && Run != 1)
                        {
                            int       succResult  = 0;//查询结果
                            MicroPay  MicroPay    = new MicroPay();
                            WxPayData queryResult = MicroPay.WXQuery(Orderf2f.OId, WxPayConfig, Entity, out succResult);
                            //如果需要继续查询,则等待2s后继续
                            if (succResult == 2)
                            {
                                //Thread.Sleep(5000);
                                //continue;
                                Run = 1;    //跳出循环,20160420
                            }
                            //查询成功,返回订单查询接口返回的数据
                            else if (succResult == 1)
                            {
                                Orderf2f.Trade_no = queryResult.GetValue("transaction_id").ToString();
                                int ret = Entity.SaveChanges();
                                //Orders.PayState = 1;//此处不保存支付状态,由通知返回再操作
                                Orders = Orders.PaySuccess(Entity);
                                Run    = 1;
                            }
                            //订单交易失败
                            else
                            {
                                Orders.TState       = 0;
                                Orderf2f.OrderState = 0;
                                Entity.SaveChanges();
                            }
                            queryTimes--;
                        }
                        #endregion
                    }
                    if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin")
                    {
                        #region 好付处理
                        string[] QueryArr = PayConfig.QueryArray.Split(',');
                        if (QueryArr.Length == 3)
                        {
                            //提交结算中心
                            string merId      = QueryArr[0]; //商户号
                            string merKey     = QueryArr[1]; //商户密钥
                            string orderId    = Orders.TNum; //商户流水号
                            string PostJson   = "{\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\"}";
                            string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                            string Sign       = (DataBase64 + merKey).GetMD5();
                            DataBase64 = HttpUtility.UrlEncode(DataBase64);
                            string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);
                            string HF_Url   = "https://api.zhifujiekou.com/api/query";
                            string Ret      = Utils.PostRequest(HF_Url, PostData, "utf-8");

                            JObject JS = new JObject();
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception Ex)
                            {
                                Log.Write("[Order_HFQuery]:", "【PostData】" + PostData + "\n【Ret】" + Ret, Ex);
                                JS = null;
                            }
                            if (JS == null)
                            {
                                DataObj.OutError("1000");
                                return;
                            }
                            if (JS["resp"] == null)
                            {
                                Utils.WriteLog("【Ret】" + Ret, "OrderQC_HFQuery");
                                DataObj.OutError("1000");
                                return;
                            }
                            string resp = JS["resp"].ToString();
                            Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception Ex)
                            {
                                Log.Write("[Order_HFQuery]:", "【Ret2】" + Ret, Ex);
                                JS = null;
                            }
                            if (JS == null)
                            {
                                DataObj.OutError("1000");
                                return;
                            }
                            string respcode = JS["respcode"].ToString();
                            if (respcode != "00")
                            {
                                string respmsg = JS["respmsg"].ToString();
                                DataObj.OutError("1000");
                                Utils.WriteLog("[Order_HFQuery_Err]:【" + respcode + "】" + respmsg, "orderface");
                                return;
                            }
                            string resultcode = JS["resultcode"].ToString();
                            if (resultcode == "0000" || resultcode == "1002" || resultcode == "1004")
                            {
                                string txnamt    = JS["txnamt"].ToString();
                                int    factmoney = int.Parse(txnamt);
                                if (((int)(Orders.Amoney * 100)) == factmoney)
                                {
                                    //Orders.PayState = 1;//此处不保存支付状态,由通知返回再操作
                                    Orders = Orders.PaySuccess(Entity);
                                }
                            }
                        }
                        #endregion
                    }
                }
                DataObj.Data = Orders.OutJson();
                DataObj.Code = "0000";
                DataObj.OutString();
            }
        }
        private ActionResult BankPay(Users Users, decimal Amount, PayConfig PayConfig, SysControl SysControl)
        {
            if (Users.Token.IsNullOrEmpty())
            {
                Users.Token = DateTime.Now.ToString().GetMD5();
                Entity.SaveChanges();
            }

            int InType = 0;

            if (SysControl.LagEntryNum > 0)
            {
                InType = 1;
            }

            string PostJson = "{amoney:" + Amount.ToString("F2") + ",token:\"" + Users.Token + "\",aid:2,paytype:4,x:\"0\",y:\"0\",intype:\"" + InType + "\",payway:\"" + PayConfig.Id + "\",orderaddress:\"网店收银台,IP:" + Utils.GetAddressAndIp() + "\"}";
            //提交数据
            string PostData = LokFuEncode.LokFuAPIEncode(PostJson, Shop_Keys);

            PostData = HttpUtility.UrlEncode(PostData);
            //Post参数
            string  PostString = "eno=" + Shop_ENO + "&data=" + PostData + "&code=0000";
            string  url        = AppPath + "/API/OrderRecharge/";
            string  RetString  = Utils.PostRequest(url, PostString, "utf-8");
            JObject json       = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(RetString);
            }
            catch (Exception)
            {
                ViewBag.ErrorMsg = "接口数据有误![01]";
                return(View("Error"));
            }
            if (json == null)
            {
                ViewBag.ErrorMsg = "接口数据有误![02]";
                return(View("Error"));
            }
            string code = "";
            string data = "";

            try
            {
                code = json["code"].ToString();
                data = json["data"].ToString();
            }
            catch (Exception)
            {
                ViewBag.ErrorMsg = "接口数据有误![03]";
                return(View("Error"));
            }
            if (code != "0000")
            {
                ViewBag.ErrorMsg = "交易有误![" + code + "]";
                return(View("Error"));
            }
            //解密
            string  RetData = LokFuEncode.LokFuAPIDecode(data, Shop_Keys);
            JObject Json    = new JObject();

            try
            {
                Json = (JObject)JsonConvert.DeserializeObject(RetData);
            }
            catch (Exception)
            {
                ViewBag.ErrorMsg = "数据解析有误![01]";
                return(View("Error"));
            }
            if (Json == null)
            {
                ViewBag.ErrorMsg = "数据解析有误![02]";
                return(View("Error"));
            }
            Orders Orders = new Orders();

            Orders = JsonToObject.ConvertJsonToModel(Orders, Json);
            if (Orders.TNum.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "订单信息有误";
                return(View("Error"));
            }
            string payJson  = "{tnum:\"" + Orders.TNum + "\",token:\"" + Users.Token + "\"}";
            string JumpData = LokFuEncode.LokFuAPIEncode(payJson, Shop_Keys);

            JumpData = HttpUtility.UrlEncode(JumpData);
            string JumpString = "eno=" + Shop_ENO + "&data=" + JumpData + "&code=0000";
            string Url        = "/PayCenter/Pay/index.html?" + JumpString;

            return(this.Redirect(Url));
            //Response.Redirect(Url);
            //return View("GoPay");
        }
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderRecharge]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }

            OrderRecharge OrderRecharge = new OrderRecharge();

            OrderRecharge = JsonToObject.ConvertJsonToModel(OrderRecharge, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);
            int PayWay = OrderRecharge.PayWay;

            if (PayWay.IsNullOrEmpty())
            {
                PayWay = OrderRecharge.AId;
            }
            if (PayWay.IsNullOrEmpty())
            {
                //支付方式,用于取出支付费率信息,计算各接口金额
                DataObj.OutError("1000");
                return;
            }
            if (OrderRecharge.PayType.IsNullOrEmpty())
            {
                OrderRecharge.PayType = 0;
            }
            //获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderRecharge.Token);

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }

            int InType = 0;

            if (!OrderRecharge.InType.IsNullOrEmpty())
            {
                InType = 1;
            }
            SysControl SysControl = new SysControl();
            bool       IsNew      = true;

            if (OrderRecharge.Id.IsNullOrEmpty())
            {
                //这是旧逻辑,有一些旧版还在用
                #region 版本比较 升级之后比较长时间后可以考滤删除版本判断代码
                SysAgent vSysAgent = Entity.SysAgent.FirstOrDefault(o => o.Id == baseUsers.Agent);
                if (vSysAgent == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                IsNew = BizExt.NewOrOldVersion(vSysAgent, Equipment, this.Entity);
                #endregion
                if (IsNew)//新版
                {
                    if (InType == 1)
                    {
                        SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == "RecMoneyLocal" && n.PayWay == PayWay && n.LagEntryDay > 0);
                    }
                    else
                    {
                        SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == "RecMoneyLocal" && n.PayWay == PayWay && n.LagEntryDay == 0);
                    }
                }
                else//旧版
                {
                    SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == "RecMoneyLocal" && n.PayWay == PayWay);
                }
            }
            else
            {
                SysControl = Entity.SysControl.FirstOrDefault(n => n.Id == OrderRecharge.Id);
                PayWay     = SysControl.PayWay;
                if (SysControl.LagEntryDay > 0)
                {
                    InType = 1;
                }
                else
                {
                    InType = 0;
                }
            }
            //获取系统支付配置
            if (SysControl == null)
            {
                DataObj.OutError("1005");
                return;
            }
            if (InType == 1 && (SysControl.LagEntryDay.IsNullOrEmpty() || SysControl.LagEntryNum.IsNullOrEmpty()))
            {
                DataObj.Msg = "请升级到最新版再发起Tn到帐交易!";
                DataObj.OutError("1005");
                return;
            }
            SysControl syscontrol = SysControl.ChkState();
            if (syscontrol.State != 1)
            {
                DataObj.OutError("1005");
                return;
            }

            //开始处理参数
            if (OrderRecharge.Amoney.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            OrderRecharge.Amoney = OrderRecharge.Amoney.FormatMoney();

            if (OrderRecharge.X.IsNullOrEmpty() || OrderRecharge.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }

            //获取用户支付配置
            UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PId == PayWay);
            if (UserPay == null)
            {
                DataObj.Msg = "你当前版本不支持该交易,请等待新版本发布及升级!";
                DataObj.OutError("1000");
                return;
            }
            //获取系统支付配置
            PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == PayWay && n.State == 1);
            if (PayConfig == null)
            {
                DataObj.OutError("1000");
                return;
            }
            if (PayConfig.GroupType != "Bank")
            {
                DataObj.OutError("1000");
                return;
            }
            //获取分支机构信息
            SysAgent SysAgent = new SysAgent();
            if (!baseUsers.Agent.IsNullOrEmpty())
            {
                SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
            }
            //获取系统配置
            SysSet SysSet = Entity.SysSet.FirstOrDefault();
            if (InType == 1)
            {//客户端传来T+N但是系统没开启时无效
                if (SysSet.LagEntry == 0)
                {
                    InType = 0;
                }
            }
            //本算法在当系统费用为0时有问题,系统费用为0的T5会导致代理分不到钱。
            if (InType == 1)
            {
                //T+N免手续费
                OrderRecharge.Poundage = 0;
                //商户费率
                OrderRecharge.UserRate = 0;
                //T+n时,代理佣金为 交易金额*费率

                decimal AgentPayGet = OrderRecharge.Amoney * SysSet.AgentGet;
                OrderRecharge.AgentPayGet = (Double)AgentPayGet;
                //佣金舍位
                OrderRecharge.AgentPayGet = OrderRecharge.AgentPayGet.Floor();
            }
            else
            {
                //手续费
                OrderRecharge.Poundage = OrderRecharge.Amoney * (decimal)UserPay.Cost;
                //手续费取进
                OrderRecharge.Poundage = OrderRecharge.Poundage.Ceiling();
                //商户费率
                OrderRecharge.UserRate = UserPay.Cost;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderRecharge.AgentPayGet = 0;
            }

            OrderRecharge.UId = baseUsers.Id;

            //到帐金额=支付金额-手续费
            OrderRecharge.PayMoney = OrderRecharge.Amoney - OrderRecharge.Poundage;
            //第三方支付通道率
            OrderRecharge.SysRate = (double)PayConfig.Cost;

            //这里是利润计算==========
            //利润=总金额-到帐-支付手续费
            decimal GetAll = OrderRecharge.Amoney - OrderRecharge.PayMoney - OrderRecharge.Amoney * (decimal)OrderRecharge.SysRate;
            //利润舍位
            GetAll = GetAll.Floor();
            //总利润
            OrderRecharge.AIdPayGet  = (double)GetAll;
            OrderRecharge.PayWay     = PayWay;
            OrderRecharge.Agent      = SysAgent.Id;//分支机构Id
            OrderRecharge.AId        = baseUsers.AId;
            OrderRecharge.FId        = 0;
            OrderRecharge.OrderState = 1;
            OrderRecharge.PayState   = 0;
            OrderRecharge.AgentState = 0;
            OrderRecharge.AddTime    = DateTime.Now;

            //写入前,判断交易金额限制
            if (OrderRecharge.Amoney < syscontrol.SNum || OrderRecharge.Amoney > syscontrol.ENum)
            {
                DataObj.OutError("1006");
                return;
            }

            //写入订单总表
            Orders Orders = new Orders();
            Orders.UId   = OrderRecharge.UId;
            Orders.TName = baseUsers.TrueName;

            Orders.PayType = OrderRecharge.PayType;
            switch (Orders.PayType)
            {
            case 0:
                Orders.ComeWay = 1;
                Orders.PayName = "充值-" + PayConfig.Name;
                break;

            case 1:
                Orders.ComeWay = 1;
                Orders.PayName = "短信收款-" + PayConfig.Name;
                break;

            case 2:
                Orders.ComeWay = 1;
                Orders.PayName = "本地收款-" + PayConfig.Name;
                break;

            case 3:
                Orders.ComeWay = 1;
                Orders.PayName = "当面付-" + PayConfig.Name;
                break;

            case 4:
                Orders.ComeWay = 2;
                Orders.PayName = "收银台-" + PayConfig.Name;
                break;
            }

            Orders.RUId     = 0;
            Orders.RName    = string.Empty;
            Orders.TType    = 1;
            Orders.TState   = 1;
            Orders.Amoney   = OrderRecharge.Amoney;
            Orders.Poundage = OrderRecharge.Poundage;
            Orders.AddTime  = DateTime.Now;
            Orders.PayState = 0;
            Orders.PayWay   = PayConfig.Id;

            Orders.Agent      = OrderRecharge.Agent;
            Orders.AgentState = 0;
            Orders.AId        = OrderRecharge.AId;
            Orders.FId        = 0;
            //Orders.ComeWay = 1;

            string OrderAddress = OrderRecharge.OrderAddress;
            if (OrderAddress.IsNullOrEmpty())
            {
                OrderAddress = Utils.GetAddressByGPS(OrderRecharge.X, OrderRecharge.Y);
            }
            Orders.OrderAddress = OrderAddress;
            Orders.X            = OrderRecharge.X;
            Orders.Y            = OrderRecharge.Y;

            if (InType == 1)
            {
                if (IsNew)//新版
                {
                    Orders.LagEntryDay = SysControl.LagEntryDay;
                    Orders.LagEntryNum = SysControl.LagEntryNum;
                }
                else
                {
                    Orders.LagEntryDay = SysSet.LagEntryDay;
                    Orders.LagEntryNum = SysSet.LagEntryNum;
                }
            }
            else
            {
                Orders.LagEntryDay = 0;
                Orders.LagEntryNum = 0;
            }

            Entity.Orders.AddObject(Orders);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, Orders);

            OrderRecharge.OId = Orders.TNum;
            Entity.OrderRecharge.AddObject(OrderRecharge);
            Entity.SaveChanges();

            //=======================================
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = Orders.PayName;
            UserTrack.UserName   = Orders.TNum;
            UserTrack.GPSAddress = Orders.OrderAddress;
            UserTrack.GPSX       = Orders.X;
            UserTrack.GPSY       = Orders.Y;
            Orders.SeavGPSLog(UserTrack, Entity);
            //=======================================
            Orders.SendMsg(Entity);//发送消息类
            //=======================================
            Orders.Cols = "Id,TNum,PayId";
            string TNum = Orders.TNum;
            string Sign = (TNum + "NewPay").GetMD5().Substring(8, 8);
            Orders.PayId = PayPath + "/pay/" + TNum + ".html?sign=" + Sign;
            //=======================================
            DataObj.Data = Orders.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
Ejemplo n.º 18
0
 /// <summary>
 /// 获取成员名
 /// </summary>
 /// <typeparam name="T">枚举</typeparam>
 /// <param name="member">成员名、值、实例均可,范例:Enum1枚举有成员A=0,则传入Enum1.A或0,获取成员名"A"</param>
 /// <returns></returns>
 public static string GetName <T>(object member)
 {
     return(GetName(SysControl.GetType <T>(), member));
 }
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderHouse]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }

            OrderHouse OrderHouse = new OrderHouse();

            OrderHouse = JsonToObject.ConvertJsonToModel(OrderHouse, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            string     Tag        = "House";
            SysControl SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag);
            SysControl syscontrol = SysControl.ChkState();

            if (syscontrol.State != 1)
            {
                DataObj.OutError("1005");
                return;
            }

            //获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderHouse.Token);

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }
            //开始处理参数
            if (OrderHouse.HouseOwner.IsNullOrEmpty() || OrderHouse.Bank.IsNullOrEmpty() || OrderHouse.Deposit.IsNullOrEmpty() || OrderHouse.CardNum.IsNullOrEmpty() || OrderHouse.Mobile.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderHouse.MonthRent.IsNullOrEmpty() || OrderHouse.PayMonth.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderHouse.X.IsNullOrEmpty() || OrderHouse.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderHouse.AId.IsNullOrEmpty())
            {//支付方式,用于取出支付费率信息,计算各接口金额
                DataObj.OutError("1000");
                return;
            }
            if (OrderHouse.AId == 4)
            {//支付方式,用于取出支付费率信息,计算各接口金额
                DataObj.OutError("6022");
                return;
            }
            if (OrderHouse.SecurityMoney.IsNullOrEmpty())
            {
                OrderHouse.SecurityMoney = 0;
            }
            //获取用户支付配置
            //UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PId == OrderHouse.AId);
            //if (UserPay == null) {
            //    DataObj.OutError("1000");
            //    return;
            //}

            OrderHouse.SecurityMoney = OrderHouse.SecurityMoney.FormatMoney();
            OrderHouse.MonthRent     = OrderHouse.MonthRent.FormatMoney();

            //获取系统支付配置
            PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == OrderHouse.AId && n.State == 1);

            if (PayConfig == null)
            {
                DataObj.OutError("1000");
                return;
            }
            //获取分支机构信息
            SysAgent SysAgent = new SysAgent();

            if (!baseUsers.Agent.IsNullOrEmpty())
            {
                SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
            }
            //获取系统配置
            SysSet SysSet = Entity.SysSet.FirstOrDefault();

            if (OrderHouse.TrunType.IsNullOrEmpty())
            {
                OrderHouse.TrunType = 0;
            }
            if (OrderHouse.TrunType != 0)
            {
                OrderHouse.TrunType = 1;
            }
            decimal Peier = 0;

            if (OrderHouse.TrunType == 0)
            {
                if (baseUsers.HasT0 != 1)
                {
                    //T0黑名单
                    DataObj.OutError("6020");
                    return;
                }
                //验证是否满足T0
                int     Day        = (DateTime.Now - baseUsers.AddTime).Days;
                int     OrderCount = Entity.Orders.Count(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == baseUsers.Id);
                decimal?OrderMoney = Entity.Orders.Where(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == baseUsers.Id).Sum(n => (decimal?)n.Amoney);
                if (OrderMoney.IsNullOrEmpty())
                {
                    OrderMoney = 0;
                }
                if (Day >= SysSet.CashDay && OrderCount >= SysSet.CashNum && OrderMoney >= SysSet.CashMoney)
                {
                }
                else
                {
                    DataObj.OutError("6020");
                    return;
                }
                //验证是否在快速提现时段内
                TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.STime <= DateTime.Now && n.ETime >= DateTime.Now && n.TId == 1);
                if (TaskTimeSet == null)
                {
                    DataObj.OutError("6018");
                    return;
                }
                Peier = TaskTimeSet.AllMoney - TaskTimeSet.UsedMoney;
            }

            OrderHouse.UId = baseUsers.Id;
            double House = SysSet.House;
            double Cost  = (double)PayConfig.Cost;

            //余额支付不收手续费
            if (PayConfig.DllName == "Cash")
            {
                House = 0;
                Cost  = 0;
            }
            if (OrderHouse.TrunType == 0)
            {
                //总房租=月租金*月数+压金
                OrderHouse.PayMoney = OrderHouse.MonthRent * OrderHouse.PayMonth + OrderHouse.SecurityMoney;
                //手续费=总房租*(付房租系统费率+加急费率)+提现服务费
                OrderHouse.Poundage = OrderHouse.PayMoney * ((decimal)House + baseUsers.Cash0) + baseUsers.ECash0;
                //手续费进位
                OrderHouse.Poundage = OrderHouse.Poundage.Ceiling();
                //总付款金额=房租+手续费
                OrderHouse.Amoney = OrderHouse.PayMoney + OrderHouse.Poundage;
                //第三方支付通道率
                OrderHouse.SysRate = Cost;
                //商户费率
                OrderHouse.UserRate = House;
                //提现费率
                OrderHouse.CashRate = OrderHouse.PayMoney * SysSet.Cash0 + SysSet.ECash0;
                //这里是利润计算==========
                //利润=总支付金额-房租-支付手续费-提现服务费
                decimal GetAll = OrderHouse.Poundage - OrderHouse.PayMoney * ((decimal)Cost + SysSet.Cash0) - baseUsers.ECash0;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderHouse.AIdPayGet = (double)GetAll;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderHouse.AgentPayGet = 0;
            }
            else
            {
                //总房租=月租金*月数+压金
                OrderHouse.PayMoney = OrderHouse.MonthRent * OrderHouse.PayMonth + OrderHouse.SecurityMoney;
                //手续费=总房租*付房租系统费率
                OrderHouse.Poundage = OrderHouse.PayMoney * ((decimal)House + baseUsers.Cash1) + baseUsers.ECash1;
                //总付款金额=房租+手续费
                OrderHouse.Amoney = OrderHouse.PayMoney + OrderHouse.Poundage;
                //第三方支付通道率
                OrderHouse.SysRate = Cost;
                //商户费率
                OrderHouse.UserRate = House;
                //提现服务费--T+1无手续费
                OrderHouse.CashRate = OrderHouse.PayMoney * SysSet.Cash1 + SysSet.ECash1;
                //这里是利润计算==========
                //利润=总支付金额-房租-支付手续费
                decimal GetAll = OrderHouse.Poundage - OrderHouse.Amoney * ((decimal)Cost + SysSet.Cash1) - baseUsers.ECash1;
                //总利润
                OrderHouse.AIdPayGet = (double)GetAll;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderHouse.AgentPayGet = 0;
            }
            if (OrderHouse.TrunType == 0)//T0时才验证
            {
                //需要支付房东金额
                decimal TotalPrice = OrderHouse.PayMoney;
                //验证是否配额充足
                if (Peier < TotalPrice)
                {
                    DataObj.OutError("6019");
                    return;
                }
            }

            OrderHouse.Agent      = SysAgent.Id;//分支机构Id
            OrderHouse.AId        = baseUsers.AId;
            OrderHouse.FId        = 0;
            OrderHouse.OrderState = 1;
            OrderHouse.PayState   = 0;
            OrderHouse.AgentState = 0;
            OrderHouse.FState     = 0;
            OrderHouse.AddTime    = DateTime.Now;

            //写入前,判断交易金额限制
            if (OrderHouse.Amoney < syscontrol.SNum || OrderHouse.Amoney > syscontrol.ENum)
            {
                DataObj.OutError("1006");
                return;
            }
            //写入订单总表
            Orders Orders = new Orders();

            Orders.Remark = OrderHouse.Remark;
            Orders.UId    = OrderHouse.UId;
            Orders.TName  = OrderHouse.HouseOwner + "的房租";

            Orders.PayType = 0;
            Orders.PayName = "房租";

            Orders.RUId     = 0;
            Orders.RName    = string.Empty;
            Orders.TType    = 5;
            Orders.TState   = 1;
            Orders.Amoney   = OrderHouse.Amoney;
            Orders.Poundage = OrderHouse.Poundage;
            Orders.AddTime  = DateTime.Now;
            Orders.PayState = 0;
            Orders.PayWay   = PayConfig.Id;

            Orders.Agent      = OrderHouse.Agent;
            Orders.AgentState = 0;
            Orders.AId        = OrderHouse.AId;
            Orders.FId        = 0;

            string OrderAddress = OrderHouse.OrderAddress;

            if (OrderAddress.IsNullOrEmpty())
            {
                OrderAddress = Utils.GetAddressByGPS(OrderHouse.X, OrderHouse.Y);
            }
            Orders.OrderAddress = OrderAddress;
            Orders.X            = OrderHouse.X;
            Orders.Y            = OrderHouse.Y;

            Orders.TrunType = OrderHouse.TrunType;

            Entity.Orders.AddObject(Orders);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, Orders);

            OrderHouse.OId = Orders.TNum;
            Entity.OrderHouse.AddObject(OrderHouse);
            Entity.SaveChanges();

            //=======================================
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = Orders.PayName;
            UserTrack.UserName   = Orders.TNum;
            UserTrack.GPSAddress = Orders.OrderAddress;
            UserTrack.GPSX       = Orders.X;
            UserTrack.GPSY       = Orders.Y;
            Orders.SeavGPSLog(UserTrack, Entity);
            //=======================================

            Orders.SendMsg(Entity);//发送消息类
            DataObj.Data = Orders.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
Ejemplo n.º 20
0
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[IPay]:", "【Data】" + Data, Ex);
                json = null;
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            Orders Orders = new Orders();

            Orders = JsonToObject.ConvertJsonToModel(Orders, json);
            if (Orders.TNum.IsNullOrEmpty() || Orders.Token.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            #region 处理用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == Orders.Token);
            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            #endregion
            Orders BaseOrders = Entity.Orders.FirstOrDefault(n => n.TNum == Orders.TNum);
            if (BaseOrders == null)
            {
                DataObj.OutError("1001");
                return;
            }
            if (baseUsers.Id != BaseOrders.UId)//禁止代付
            {
                DataObj.OutError("6021");
                return;
            }
            if (BaseOrders.TType != 6 && BaseOrders.TType != 10)
            {
                DataObj.OutError("6022");
                return;
            }
            if (BaseOrders.TState != 1)
            {
                DataObj.OutError("6024");
                return;
            }
            if (BaseOrders.PayState != 0)
            {
                //已支付
                DataObj.OutError("6025");
                return;
            }
            #region 处理选择通道
            PayConfig PayConfig = null;
            if (!BaseOrders.PayWay.IsNullOrEmpty())
            {
                PayConfig = Entity.PayConfig.FirstOrDefault(n => n.State == 1 && n.Id == BaseOrders.PayWay);
                if (Orders.PayName != PayConfig.GroupType)
                {
                    DataObj.OutError("1008");
                    return;
                }
            }
            else
            {
                if (Orders.PayName.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                //获取最佳支付通道
                IList <PayConfig>  PayConfigList  = Entity.PayConfig.Where(n => n.State == 1 && n.GroupType == Orders.PayName).ToList();
                IList <SysControl> SysControlList = Entity.SysControl.OrderBy(n => n.Sort).ToList();//SysControl
                IList <SysControl> SCList         = new List <SysControl>();
                IList <PayConfig>  PCList         = new List <PayConfig>();
                foreach (var p in SysControlList)
                {
                    SysControl T = p.ChkState();
                    if (T.State == 1)
                    {
                        SCList.Add(p);
                    }
                }
                foreach (var p in PayConfigList)
                {
                    SysControl T = SCList.FirstOrDefault(n => n.PayWay == p.Id);
                    if (T != null)
                    {
                        if (BaseOrders.Amoney >= (decimal)T.SNum && BaseOrders.Amoney <= (decimal)T.ENum)
                        {
                            PCList.Add(p);
                        }
                    }
                }
                PayConfig = PCList.OrderBy(n => n.Cost).FirstOrDefault();
                if (PayConfig == null)
                {
                    DataObj.OutError("1000");
                    return;;
                }
                if (BaseOrders.TType == 6)
                {
                    //PayConfigOrder PayConfigOrder = Entity.PayConfigOrder.FirstOrDefault(n => n.OId == BaseOrders.TNum);
                    //PayConfigOrder.SysRate = 0;
                    //PayConfigOrder.Poundage = PayConfigOrder.Amoney * (decimal)PayConfigOrder.SysRate;
                    //BaseOrders.Poundage = PayConfigOrder.Poundage;
                    BaseOrders.PayWay = PayConfig.Id;
                }
                else if (BaseOrders.TType == 10)
                {
                    BaseOrders.PayWay = PayConfig.Id;
                }
                Entity.SaveChanges();
            }
            if (PayConfig == null)
            {
                DataObj.OutError("1000");
                return;
            }
            if (PayConfig.GroupType != "AliPay" && PayConfig.GroupType != "WeiXin")
            {
                DataObj.OutError("1007");
                return;
            }
            #endregion
            string DataRet = "", Trade = "";
            #region 提交好付
            if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin")
            {
                string NoticeUrl = NoticePath + "/PayCenter/HFPay/Notice.html";;
                string Action    = "";
                if (PayConfig.DllName == "HFAliPay")
                {
                    Action = "AliSao";
                }
                if (PayConfig.DllName == "HFWeiXin")
                {
                    Action = "WxSao";
                }
                string[] PayConfigArr = PayConfig.QueryArray.Split(',');
                if (PayConfigArr.Length != 3)
                {
                    DataObj.OutError("1000");
                    return;
                }
                //提交结算中心
                string merId    = PayConfigArr[0];    //商户号
                string merKey   = PayConfigArr[1];    //商户密钥
                string JsPayWay = PayConfigArr[2];    //绑定通道

                string  orderId    = BaseOrders.TNum; //商户流水号
                decimal money      = BaseOrders.Amoney * 100;
                long    intmoney   = Int64.Parse(money.ToString("F0"));
                string  OrderMoney = intmoney.ToString();//金额,以分为单

                string PostJson = "{\"action\":\"" + Action + "\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"payway\":\"" + JsPayWay + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\"}";

                string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                string Sign       = (DataBase64 + merKey).GetMD5();

                DataBase64 = HttpUtility.UrlEncode(DataBase64);
                string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);

                string HF_Url = "https://api.zhifujiekou.com/api/mpgateway";

                DataRet = Utils.PostRequest(HF_Url, PostData, "utf-8");

                JObject JS = new JObject();
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(DataRet);
                }
                catch (Exception Ex)
                {
                    Log.Write("[Order_HF]:", "【PostData】" + PostData + "\n【DataRet】" + DataRet, Ex);
                    json = null;
                }
                if (JS == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                string resp = JS["resp"].ToString();
                DataRet = LokFuEncode.Base64Decode(resp, "utf-8");
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(DataRet);
                }
                catch (Exception Ex)
                {
                    Log.Write("[Order_HF]:", "【DataRet2】" + DataRet, Ex);
                    JS = null;
                }
                if (JS == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                string respcode = JS["respcode"].ToString();
                if (respcode != "00")
                {
                    string respmsg = JS["respmsg"].ToString();
                    DataObj.OutError("1000");
                    Utils.WriteLog("[Order_HF_Err]:【" + respcode + "】" + respmsg, "orderface");
                    return;
                }
                if (JS["formaction"] == null)
                {
                    Utils.WriteLog("[Order_HF_Err]:【formaction NULL】" + DataRet, "orderface");
                    DataObj.OutError("2096");
                    return;
                }
                BaseOrders.PayId = JS["formaction"].ToString();
                Trade            = JS["queryid"].ToString();
            }
            #endregion
            //================================================
            //这里记录日志
            PayLog PayLog = new PayLog();
            PayLog.PId     = PayConfig.Id;
            PayLog.OId     = BaseOrders.TNum;
            PayLog.TId     = Trade;
            PayLog.Amount  = BaseOrders.Amoney;
            PayLog.Way     = "GET";
            PayLog.AddTime = DateTime.Now;
            PayLog.Data    = Data;
            PayLog.State   = 1;
            Entity.PayLog.AddObject(PayLog);
            Entity.SaveChanges();
            //================================================
            BaseOrders.Cols = "TNum,PayId,Amount,PayState";
            DataObj.Data    = BaseOrders.OutJson();
            DataObj.Code    = "0000";
            DataObj.OutString();
        }
Ejemplo n.º 21
0
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[OrderTransfer]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            OrderTransfer OrderTransfer = new OrderTransfer();

            OrderTransfer = JsonToObject.ConvertJsonToModel(OrderTransfer, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            string     Tag        = "Transfer";
            SysControl SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == Tag);
            SysControl syscontrol = SysControl.ChkState();

            if (syscontrol.State != 1)
            {
                DataObj.OutError("1005");
                return;
            }

            //获取用户信息
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == OrderTransfer.Token);

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }

            if (baseUsers.UserName == OrderTransfer.ToUserName)//不能给自己转帐
            {
                DataObj.OutError("6031");
                return;
            }
            if (baseUsers.Amount < OrderTransfer.PayMoney)//余额不足
            {
                DataObj.OutError("6001");
                return;
            }

            //获取收款用户信息
            Users ToUsers = Entity.Users.FirstOrDefault(n => n.UserName == OrderTransfer.ToUserName);

            if (ToUsers == null)//用户不存在
            {
                DataObj.OutError("6004");
                return;
            }
            if (ToUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("6003");
                return;
            }
            //if (ToUsers.CardStae != 2)//未实名认证
            //{
            //    DataObj.OutError("6006");
            //    return;
            //}

            //开始处理参数
            if (OrderTransfer.PayMoney.IsNullOrEmpty())//转帐金额
            {
                DataObj.OutError("1000");
                return;
            }
            OrderTransfer.PayMoney = OrderTransfer.PayMoney.FormatMoney();
            if (OrderTransfer.PayType.IsNullOrEmpty())
            {
                OrderTransfer.PayType = 0;
            }
            if (OrderTransfer.X.IsNullOrEmpty() || OrderTransfer.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (OrderTransfer.AId.IsNullOrEmpty())
            {
                //支付方式,用于取出支付费率信息,计算各接口金额
                DataObj.OutError("1000");
                return;
            }

            //获取系统支付配置
            PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == OrderTransfer.AId && n.State == 1);

            if (PayConfig == null)
            {
                DataObj.OutError("1000");
                return;
            }
            //转帐目前只支持余额
            if (PayConfig.DllName != "Cash")
            {
                DataObj.OutError("1000");
                return;
            }
            //获取分支机构信息
            SysAgent SysAgent = new SysAgent();

            //获取系统配置
            //SysSet SysSet = Entity.SysSet.FirstOrDefault();

            OrderTransfer.UId  = baseUsers.Id;
            OrderTransfer.RUId = ToUsers.Id;

            if (OrderTransfer.IsMe == 1)//付方出手续费
            {
                //获取付方支付配置
                UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PId == OrderTransfer.AId);
                if (UserPay == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                //获取付方机构信息
                if (!baseUsers.Agent.IsNullOrEmpty())
                {
                    SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
                }

                //手续费
                OrderTransfer.Poundage = OrderTransfer.PayMoney * (decimal)UserPay.Cost;
                //手续费进位
                OrderTransfer.Poundage = OrderTransfer.Poundage.Ceiling();
                //总金额=转帐金额+手续费
                OrderTransfer.Amoney = OrderTransfer.PayMoney + OrderTransfer.Poundage;
                //第三方支付通道率
                OrderTransfer.SysRate = (double)PayConfig.Cost;
                //商户费率
                OrderTransfer.UserRate = UserPay.Cost;
                //这里是利润计算==========
                //利润=总金额-转到帐-支付手续费
                decimal GetAll = OrderTransfer.Amoney - OrderTransfer.PayMoney - OrderTransfer.Amoney * (decimal)OrderTransfer.SysRate;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderTransfer.AIdPayGet = (double)GetAll;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderTransfer.AgentPayGet = 0;
            }
            else  //收方出手续费
                  //获取收方支付配置
            {
                UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == ToUsers.Id && n.PId == OrderTransfer.AId);
                if (UserPay == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                //获取收方机构信息
                if (!ToUsers.Agent.IsNullOrEmpty())
                {
                    SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == ToUsers.Agent);
                }
                //总金额=转帐金额+手续费
                OrderTransfer.Amoney = OrderTransfer.PayMoney;
                //手续费
                OrderTransfer.Poundage = OrderTransfer.Amoney * (decimal)UserPay.Cost;
                //手续费进位
                OrderTransfer.Poundage = OrderTransfer.Poundage.Ceiling();
                //到帐金额
                OrderTransfer.PayMoney = OrderTransfer.Amoney - OrderTransfer.Poundage;
                //第三方支付通道率
                OrderTransfer.SysRate = (double)PayConfig.Cost;
                //商户费率
                OrderTransfer.UserRate = UserPay.Cost;
                //这里是利润计算==========
                //利润=总金额-转到帐-支付手续费
                decimal GetAll = OrderTransfer.Amoney - OrderTransfer.PayMoney - OrderTransfer.Amoney * (decimal)OrderTransfer.SysRate;
                //利润舍位
                GetAll = GetAll.Floor();
                //总利润
                OrderTransfer.AIdPayGet = (double)GetAll;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderTransfer.AgentPayGet = 0;
            }

            OrderTransfer.Agent      = SysAgent.Id;//分支机构Id
            OrderTransfer.AId        = baseUsers.AId;
            OrderTransfer.FId        = 0;
            OrderTransfer.OrderState = 1;
            OrderTransfer.PayState   = 0;
            OrderTransfer.AgentState = 0;
            OrderTransfer.AddTime    = DateTime.Now;

            //写入前,判断交易金额限制
            if (OrderTransfer.Amoney < syscontrol.SNum || OrderTransfer.Amoney > syscontrol.ENum)
            {
                DataObj.OutError("1006");
                return;
            }
            //写入订单总表
            Orders Orders = new Orders();

            Orders.UId   = OrderTransfer.UId;
            Orders.TName = "自 " + baseUsers.TrueName + " To " + ToUsers.TrueName;

            Orders.PayType = OrderTransfer.PayType;
            switch (Orders.PayType)
            {
            case 0:
                Orders.PayName = "转帐";
                break;

            case 1:
                Orders.PayName = "当面付";
                break;

            case 2:
                Orders.PayName = "收银台-钱包";
                break;
            }

            Orders.RUId     = ToUsers.Id;
            Orders.RName    = ToUsers.TrueName;
            Orders.TType    = 3;
            Orders.TState   = 1;
            Orders.Amoney   = OrderTransfer.Amoney;
            Orders.Poundage = OrderTransfer.Poundage;
            Orders.AddTime  = DateTime.Now;
            Orders.PayState = 0;
            Orders.PayWay   = PayConfig.Id;

            Orders.Agent      = OrderTransfer.Agent;
            Orders.AgentState = 0;
            Orders.AId        = OrderTransfer.AId;
            Orders.FId        = 0;

            string OrderAddress = OrderTransfer.OrderAddress;

            if (OrderAddress.IsNullOrEmpty())
            {
                OrderAddress = Utils.GetAddressByGPS(OrderTransfer.X, OrderTransfer.Y);
            }
            Orders.OrderAddress = OrderAddress;
            Orders.X            = OrderTransfer.X;
            Orders.Y            = OrderTransfer.Y;

            Orders.Remark = OrderTransfer.Remark;

            Entity.Orders.AddObject(Orders);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, Orders);

            OrderTransfer.OId = Orders.TNum;
            Entity.OrderTransfer.AddObject(OrderTransfer);
            Entity.SaveChanges();

            //=======================================
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = Orders.PayName;
            UserTrack.UserName   = Orders.TNum;
            UserTrack.GPSAddress = Orders.OrderAddress;
            UserTrack.GPSX       = Orders.X;
            UserTrack.GPSY       = Orders.Y;
            Orders.SeavGPSLog(UserTrack, Entity);
            //=======================================

            Orders.SendMsg(Entity);//发送消息类

            DataObj.Data = Orders.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="shopid"></param>
        /// <param name="Amount"></param>
        /// <param name="payway">这里payway是SysConfig的ID</param>
        /// <returns></returns>
        public ActionResult GoPay(int shopid = 0, decimal Amount = 0, byte payway = 0)
        {
            if (shopid.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "商户信息有误,请核实!";
                return(View("Error"));
            }
            if (Amount.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "付款金额有误,请核实!";
                return(View("Error"));
            }
            Users baseUsers = Entity.Users.FirstOrNew(n => n.Id == shopid && n.State == 1 && n.CardStae == 2);

            if (baseUsers.Id.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "商户信息有误,请核实!";
                return(View("Error"));
            }
            if (Amount <= 0)
            {
                ViewBag.ErrorMsg = "付款金额有误![00]";
                return(View("Error"));
            }
            Amount = Amount.FormatMoney();

            #region 处理选择通道
            string Tag     = string.Empty;
            byte   PayType = 0;//订单类型
            if (IsWeiXinBrowser)
            {
                Tag = "WeiXin";
            }
            else if (IsAlipayBrowser)
            {
                Tag = "Alipay";
            }
            #region 获取系统支付配置
            SysControl SysControl = Entity.SysControl.FirstOrDefault(n => n.Id == payway);
            if (SysControl == null)
            {
                ViewBag.ErrorMsg = "接口维护中";
                return(View("Error"));
            }
            SysControl syscontrol = SysControl.ChkState();
            if (syscontrol.State != 1)
            {
                ViewBag.ErrorMsg = "接口维护中";
                return(View("Error"));
            }

            if (Amount < SysControl.SNum || Amount > SysControl.ENum)
            {
                ViewBag.ErrorMsg = "本付款方式限定金额为" + SysControl.SNum.ToString("f2") + "-" + SysControl.ENum.ToString("f2");
                return(View("Error"));
            }

            if (SysControl.Tag != Tag)//接口对应的"操作应用程序"
            {
                string tagname = "";
                if (SysControl.Tag == "WeiXin")
                {
                    tagname = "微信";
                }
                else if (SysControl.Tag == "Alipay")
                {
                    tagname = "支付宝";
                }
                else
                {
                    tagname = "银联";
                }
                ViewBag.ErrorMsg = "请使用" + tagname + "操作";
                return(View("Error"));
            }
            PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(o => o.Id == SysControl.PayWay && o.State == 1);
            if (PayConfig == null)
            {
                ViewBag.ErrorMsg = "支付接口维护中,请使用其它支付通道!";
                return(View("Error"));
            }
            switch (PayConfig.GroupType)//从这里获取订单类型
            {
            case "AliPay":
                PayType = 7;
                break;

            case "WeiXin":
                PayType = 8;
                break;
            }
            if (PayType == 0)
            {
                ViewBag.ErrorMsg = "没有对应的支付配置";
                return(View("Error"));
            }
            #endregion
            #endregion

            #region 订单生成
            //获取用户支付配置
            UserPay UserPay = Entity.UserPay.FirstOrDefault(n => n.UId == baseUsers.Id && n.PId == SysControl.PayWay);
            if (UserPay == null)
            {
                ViewBag.ErrorMsg = "用户支付配置错误";
                return(View("Error"));
            }
            //获取分支机构信息
            SysAgent SysAgent = new SysAgent();
            if (!baseUsers.Agent.IsNullOrEmpty())
            {
                SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == baseUsers.Agent);
            }
            //获取系统配置
            SysSet SysSet = Entity.SysSet.FirstOrDefault();

            //TN判断
            int InType = SysControl.LagEntryNum > 0 ? 1 : 0;
            if (InType == 1)
            {
                //客户端传来T+N但是系统没开启时无效
                if (SysSet.LagEntry == 0)
                {
                    InType = 0;
                }
            }
            var OrderF2F = new OrderF2F()
            {
                PayWay  = SysControl.PayWay,
                AddTime = DateTime.Now,
                OType   = PayType,
                Amoney  = Amount,
            };
            if (InType == 1)
            {
                //手续费
                OrderF2F.Poundage = 0;
                //商户费率
                OrderF2F.UserRate = 0;
                //T+n时,代理佣金为 交易金额*费率
                decimal AgentPayGet = OrderF2F.Amoney * SysSet.AgentGet;
                OrderF2F.AgentPayGet = (Double)AgentPayGet;
                //佣金舍位
                OrderF2F.AgentPayGet = OrderF2F.AgentPayGet.Floor();
            }
            else
            {
                //手续费
                OrderF2F.Poundage = OrderF2F.Amoney * (decimal)UserPay.Cost;
                //手续费取进
                OrderF2F.Poundage = OrderF2F.Poundage.Ceiling();
                //商户费率
                OrderF2F.UserRate = UserPay.Cost;
                //分支机构佣金设置为0,待分润计算后再写入
                OrderF2F.AgentPayGet = 0;
            }
            OrderF2F.UId = baseUsers.Id;
            //到帐金额=支付金额-手续费
            OrderF2F.PayMoney = OrderF2F.Amoney - OrderF2F.Poundage;
            //第三方支付通道率
            OrderF2F.SysRate = (double)PayConfig.Cost;
            //这里是利润计算==========
            //利润=总金额-到帐-支付手续费
            decimal GetAll = OrderF2F.Amoney - OrderF2F.PayMoney - OrderF2F.Amoney * (decimal)OrderF2F.SysRate;
            //利润舍位
            GetAll = GetAll.Floor();
            //总利润
            OrderF2F.AIdPayGet = (double)GetAll;

            OrderF2F.Agent      = SysAgent.Id;//分支机构Id
            OrderF2F.AId        = baseUsers.AId;
            OrderF2F.FId        = 0;
            OrderF2F.OrderState = 1;
            OrderF2F.PayState   = 0;
            OrderF2F.AgentState = 0;
            OrderF2F.AddTime    = DateTime.Now;
            OrderF2F.PayId      = string.Empty;
            OrderF2F.PayType    = PayType;

            //写入订单总表
            Orders Orders = new Orders();
            Orders.UId   = OrderF2F.UId;
            Orders.TName = baseUsers.NeekName;

            Orders.PayType = PayType;
            Orders.PayName = "收银台-" + PayConfig.Name;;

            Orders.RUId     = 0;
            Orders.RName    = string.Empty;
            Orders.TType    = OrderF2F.OType;
            Orders.TState   = 1;
            Orders.Amoney   = OrderF2F.Amoney;
            Orders.Poundage = OrderF2F.Poundage;
            Orders.AddTime  = DateTime.Now;
            Orders.PayState = 0;
            Orders.PayWay   = SysControl.PayWay;

            Orders.Agent      = OrderF2F.Agent;
            Orders.AgentState = 0;
            Orders.AId        = OrderF2F.AId;
            Orders.FId        = 0;
            Orders.ComeWay    = 2;//收银台订单的标识 1:APP订单 2:收银台订单

            if (InType == 1)
            {
                Orders.LagEntryDay = SysControl.LagEntryDay;
                Orders.LagEntryNum = SysControl.LagEntryNum;
            }
            else
            {
                Orders.LagEntryDay = 0;
                Orders.LagEntryNum = 0;
            }

            Entity.Orders.AddObject(Orders);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, Orders);

            OrderF2F.OId = Orders.TNum;
            Entity.OrderF2F.AddObject(OrderF2F);
            Entity.SaveChanges();

            //=======================================
            UserTrack UserTrack = new UserTrack();
            UserTrack.ENo        = baseUsers.ENo;
            UserTrack.OPType     = Orders.PayName;
            UserTrack.UserName   = Orders.TNum;
            UserTrack.GPSAddress = "";
            UserTrack.GPSX       = "";
            UserTrack.GPSY       = "";
            UserTrack.IP         = Utils.GetIP();
            Orders.SeavGPSLog(UserTrack, Entity);
            //=======================================

            #endregion

            #region 提交结算中心
            if (PayConfig.DllName == "HFAliPay" || PayConfig.DllName == "HFWeiXin")
            {
                string NoticeUrl = "";
                string Action    = "";
                if (PayConfig.DllName == "HFAliPay")
                {
                    NoticeUrl = NoticePath + "/PayCenter/HFAliPay/Notice.html";
                    Action    = "AliSao";
                }
                if (PayConfig.DllName == "HFWeiXin")
                {
                    NoticeUrl = NoticePath + "/PayCenter/HFWeiXin/Notice.html";
                    Action    = "WxJsApi";
                }
                string[] PayConfigArr = PayConfig.QueryArray.Split(',');
                if (PayConfigArr.Length != 3)
                {
                    ViewBag.ErrorMsg = "参数错误!";
                    return(View("Error"));
                }
                //提交结算中心
                string merId    = PayConfigArr[0]; //商户号
                string merKey   = PayConfigArr[1]; //商户密钥
                string JsPayWay = PayConfigArr[2]; //绑定通道

                string  orderId    = Orders.TNum;  //商户流水号
                decimal money      = Orders.Amoney * 100;
                long    intmoney   = Int64.Parse(money.ToString("F0"));
                string  OrderMoney = intmoney.ToString();//金额,以分为单

                string PostJson = "{\"action\":\"" + Action + "\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"payway\":\"" + JsPayWay + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\"}";

                string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                string Sign       = (DataBase64 + merKey).GetMD5();

                DataBase64 = HttpUtility.UrlEncode(DataBase64);
                string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);

                //本通道支持直联公众号
                if (IsWeiXinBrowser && Action == "WxJsApi")
                {
                    Orders.PayId = "公众号支付";
                    Entity.SaveChanges();
                    string gateway_url = "https://api.zhifujiekou.com/apis/wxjspaygateway";
                    string GoUrl       = gateway_url + "?" + PostData;
                    Response.Redirect(GoUrl);
                    return(View("Null"));
                }

                string  HF_Url = "https://api.zhifujiekou.com/api/mpgateway";
                string  Ret    = Utils.PostRequest(HF_Url, PostData, "utf-8");
                JObject JS     = new JObject();
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(Ret);
                }
                catch (Exception)
                {
                    Utils.WriteLog("[Order_HF_Err]:【PostData】" + PostData + "\n【Ret】" + Ret, "ShopErr");
                    ViewBag.ErrorMsg = "返回数据异常!";
                    return(View("Error"));
                }
                string resp = JS["resp"].ToString();
                Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(Ret);
                }
                catch (Exception)
                {
                    Utils.WriteLog("[Order_HF_Err]:【Ret】" + Ret, "ShopErr");
                    ViewBag.ErrorMsg = "返回结果异常!";
                    return(View("Error"));
                }
                string respcode = JS["respcode"].ToString();
                if (respcode != "00")
                {
                    string respmsg = JS["respmsg"].ToString();
                    Utils.WriteLog("[Order_HF_Err]:【" + respcode + "】" + respmsg, "ShopErr");
                    ViewBag.ErrorMsg = respmsg;
                    return(View("Error"));
                }
                if (JS["formaction"] == null)
                {
                    Utils.WriteLog("[Order_HF_Err]:【formaction NULL】" + Ret, "ShopErr");
                    ViewBag.ErrorMsg = "未能生成二维码";
                    return(View("Error"));
                }
                Orders.PayId = JS["formaction"].ToString();
            }
            #endregion

            this.ViewBag.Orders = Orders;
            return(View());
        }
        public void Post()
        {
            string Data = DataObj.GetData();

            if (Data.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Data);
            }
            catch (Exception Ex)
            {
                Log.Write("[UsersHouse]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            //JObject pp = (JObject)p;
            Users Users = new Users();

            Users = JsonToObject.ConvertJsonToModel(Users, json);
            if (Users.Token.IsNullOrEmpty())
            {
                //
                DataObj.OutError("1000");
                return;
            }

            Users = Entity.Users.FirstOrDefault(n => n.Token == Users.Token);
            if (Users == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (Users.State != 1)
            {
                DataObj.OutError("2003");
                return;
            }
            if (Users.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (Users.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }
            int     Day        = (DateTime.Now - Users.AddTime).Days;
            int     OrderCount = Entity.Orders.Count(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == Users.Id);
            decimal OrderMoney = 0;

            if (OrderCount > 0)
            {
                OrderMoney = Entity.Orders.Where(n => (n.TType == 2 || n.TType == 5) && n.PayState == 2 && n.UId == Users.Id).Sum(n => n.Amoney);
            }
            int isT0 = 0;

            SysSet SysSet = Entity.SysSet.FirstOrDefault();

            SysSet.Cols   = "House,Cash0,ECash0,Cash1,ECash1,isT0";
            SysSet.Cash0  = Users.Cash0;
            SysSet.Cash1  = Users.Cash1;
            SysSet.ECash0 = Users.ECash0;
            SysSet.ECash1 = Users.ECash1;
            if (Day >= SysSet.CashDay && OrderCount >= SysSet.CashNum && OrderMoney >= SysSet.CashMoney)
            {
                isT0 = 1;
            }

            //验证是否在快速提现时段内
            TaskTimeSet TaskTimeSet = Entity.TaskTimeSet.FirstOrDefault(n => n.STime <= DateTime.Now && n.ETime >= DateTime.Now && n.TId == 1);

            if (TaskTimeSet == null)
            {
                isT0 = 2;
            }
            else
            {
                //验证配额是否满足
                decimal    Peier      = TaskTimeSet.AllMoney - TaskTimeSet.UsedMoney;
                decimal    minMoney   = 0.01M;
                SysControl SysControl = Entity.SysControl.FirstOrDefault(n => n.Tag == "Cash" && n.State == 1);
                if (SysControl != null)
                {
                    minMoney = SysControl.SNum;
                }
                if (Peier < minMoney)
                {
                    isT0 = 3;
                }
            }

            SysSet.isT0 = isT0;

            DataObj.Data = SysSet.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
 private bool SetPayConfig(Orders Orders)
 {
     if (Orders.PayWay != 0)
     {
         PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == Orders.PayWay && n.State == 1);
         if (PayConfig == null)
         {
             return(false);
         }
         if (PayConfig.GroupType != "Bank")
         {
             return(false);
         }
         ViewBag.PayConfig = PayConfig;
     }
     else
     {
         //获取最佳支付通道
         IList <PayConfig>  PayConfigList  = Entity.PayConfig.Where(n => n.State == 1 && n.GroupType == "Bank").ToList();
         IList <SysControl> SysControlList = Entity.SysControl.OrderBy(n => n.Sort).ToList();//SysControl
         IList <SysControl> SCList         = new List <SysControl>();
         IList <PayConfig>  PCList         = new List <PayConfig>();
         foreach (var p in SysControlList)
         {
             SysControl T = p.ChkState();
             if (T.State == 1)
             {
                 SCList.Add(p);
             }
         }
         foreach (var p in PayConfigList)
         {
             SysControl T = SCList.FirstOrDefault(n => n.PayWay == p.Id);
             if (T != null)
             {
                 if (Orders.Amoney >= (decimal)T.SNum && Orders.Amoney <= (decimal)T.ENum)
                 {
                     PCList.Add(p);
                 }
             }
         }
         PayConfig PayConfig = PCList.OrderBy(n => n.Cost).FirstOrDefault();
         if (PayConfig == null)
         {
             return(false);
         }
         ViewBag.PayConfig = PayConfig;
         if (Orders.TType == 6)
         {
             //PayConfigOrder PayConfigOrder = Entity.PayConfigOrder.FirstOrDefault(n => n.OId == Orders.TNum);
             //PayConfigOrder.SysRate = 0;
             //PayConfigOrder.Poundage = PayConfigOrder.Amoney * (decimal)PayConfigOrder.SysRate;
             //Orders.Poundage = PayConfigOrder.Poundage;
             Orders.PayWay = PayConfig.Id;
         }
         else if (Orders.TType == 10)
         {
             Orders.PayWay = PayConfig.Id;
         }
         else
         {
             return(false);
         }
         Entity.SaveChanges();
     }
     return(true);
 }