public ActionResult Success(string code)
        {
            string    TNum      = LokFuEncode.Base64Decode(code);
            FastOrder FastOrder = Entity.FastOrder.FirstOrDefault(n => n.TNum == TNum);

            if (FastOrder == null)
            {
                ViewBag.ErrorMsg = "订单不存在!";
                return(View("Error"));
            }
            if (FastOrder.PayState != 1)
            {
                ViewBag.ErrorMsg = "订单未支付!";
                return(View("Error"));
            }
            ViewBag.FastOrder = FastOrder;
            return(View());
        }
Esempio n. 2
0
        //
        // GET: /Home/
        public ActionResult Index(string En)
        {
            string De = LokFuEncode.Base64Decode(En);

            string[] Arr      = De.Split('|');
            SysAgent SysAgent = new SysAgent();

            if (Arr.Length == 2)
            {
                string card = Arr[0];
                ViewBag.Card = card;
                ViewBag.PWD  = Arr[1];
                Card Card = Entity.Card.FirstOrNew(n => n.Code == card);
                if (!Card.AId.IsNullOrEmpty())
                {
                    SysAgent = Entity.SysAgent.FirstOrNew(n => n.Id == Card.AId && n.State == 1 && n.IsTeiPai == 1);
                }
            }
            ViewBag.En       = En;
            ViewBag.SysAgent = SysAgent;
            return(View());
        }
Esempio n. 3
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();
            }
        }
        public ActionResult FastResult()
        {
            string Resp    = Request.QueryString["resp"];
            string Sign    = Request.QueryString["sign"];
            string SignStr = Resp;

            Resp = LokFuEncode.Base64Decode(Resp, "utf-8");
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Resp);
            }
            catch (Exception Ex)
            {
                ViewBag.ErrorMsg = Ex.ToString();
                return(View("Error"));
            }
            if (json == null)
            {
                ViewBag.ErrorMsg = "数据处理出错";
                return(View("Error"));
            }

            string resultcode = json["resultcode"].ToString(); //交易结果码
            string resultmsg  = json["resultmsg"].ToString();  //交易结果信息
            string queryid    = json["queryid"].ToString();    //交易流水号
            string txnamt     = json["txnamt"].ToString();     //交易金额
            string merid      = json["merid"].ToString();      //商户号
            string orderid    = json["orderid"].ToString();    //交易单号

            FastOrder FastOrder = Entity.FastOrder.FirstOrDefault(n => n.TNum == orderid);

            if (FastOrder == null)
            {
                ViewBag.ErrorMsg = "交易不存在!";
                return(View("Error"));
            }
            if (FastOrder.State != 1)
            {
                ViewBag.ErrorMsg = "交易异常!";
                return(View("Error"));
            }
            FastUserPay FastUserPay = Entity.FastUserPay.FirstOrDefault(o => o.UId == FastOrder.UId && o.PayWay == FastOrder.PayWay);
            string      MerId       = FastUserPay.MerId;
            string      MerKey      = FastUserPay.MerKey;

            if (MerId.IsNullOrEmpty() || MerKey.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "支付通道配置异常!";
                return(View("Error"));
            }
            string MD5Str = SignStr + MerKey;
            string sign   = MD5Str.GetMD5();
            //================================================
            //这里记录日志
            PayLog PayLog = new PayLog();

            PayLog.PId     = (int)FastOrder.PayWay;
            PayLog.OId     = FastOrder.TNum;
            PayLog.TId     = FastOrder.Trade;
            PayLog.Amount  = decimal.Parse(txnamt) / 100;
            PayLog.Way     = "Result";
            PayLog.AddTime = DateTime.Now;
            PayLog.Data    = Request.Form.ToString();
            PayLog.State   = 1;
            Entity.PayLog.AddObject(PayLog);
            Entity.SaveChanges();
            //================================================
            if (Sign != sign)
            {
                ViewBag.ErrorMsg = "签名错误!";
                return(View("Error"));
            }
            if (MerId != merid)
            {
                ViewBag.ErrorMsg = "商户号不一置!";
                return(View("Error"));
            }
            if (resultcode != "0000" && resultcode != "1002" && resultcode != "1003")
            {
                ViewBag.ErrorMsg = "支付失败![" + resultcode + "]" + resultmsg;
                return(View("Error"));
            }
            int factmoney = int.Parse(txnamt);

            if (((int)(FastOrder.Amoney * 100)) != factmoney)
            {
                ViewBag.ErrorMsg = "支付金额与交易金额不符!";
                return(View("Error"));
            }
            FastOrder.Trade = queryid;
            Entity.SaveChanges();
            FastOrder = FastOrder.PaySuccess(Entity);
            if (FastOrder.PayState == 1)
            {
                if (resultcode == "0000")
                {
                    FastOrder.UserState = 1;
                    FastOrder.UserTime  = DateTime.Now;
                }
                if (resultcode == "1002")
                {
                    FastOrder.UserState = 3;
                    FastOrder.UserTime  = DateTime.Now;
                }
                if (resultcode == "1003")
                {
                    FastOrder.UserState = 2;
                    FastOrder.UserTime  = DateTime.Now;
                }
                Entity.SaveChanges();
            }
            ViewBag.FastOrder = FastOrder;
            return(View("FastSuccess"));
        }
        public void FastNotice()
        {
            string Resp    = Request.Form["resp"];
            string Sign    = Request.Form["sign"];
            string SignStr = Resp;

            Resp = LokFuEncode.Base64Decode(Resp, "utf-8");
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Resp);
            }
            catch (Exception Ex)
            {
                Response.Write(Ex.ToString());
                return;
            }
            if (json == null)
            {
                Response.Write("Json Null");
                return;
            }
            string resultcode = json["resultcode"].ToString(); //交易结果码
            string resultmsg  = json["resultmsg"].ToString();  //交易结果信息
            string queryid    = json["queryid"].ToString();    //交易流水号
            string txnamt     = json["txnamt"].ToString();     //交易金额\
            string merid      = json["merid"].ToString();      //交易金额
            string orderid    = json["orderid"].ToString();    //交易金额

            FastOrder FastOrder = Entity.FastOrder.FirstOrDefault(n => n.TNum == orderid);

            if (FastOrder == null)
            {
                Response.Write("E1");
                return;
            }
            if (FastOrder.State != 1)
            {
                Response.Write("E2");
                return;
            }
            if (FastOrder.PayState == 1)
            {
                if (resultcode == "0000")
                {
                    FastOrder.UserState = 1;
                    FastOrder.UserTime  = DateTime.Now;
                }
                if (resultcode == "1002")
                {
                    FastOrder.UserState = 3;
                    FastOrder.UserTime  = DateTime.Now;
                }
                if (resultcode == "1003")
                {
                    FastOrder.UserState = 2;
                    FastOrder.UserTime  = DateTime.Now;
                }
                Entity.SaveChanges();
                Response.Write("0000");
                return;
            }
            FastUserPay FastUserPay = Entity.FastUserPay.FirstOrDefault(o => o.UId == FastOrder.UId && o.PayWay == FastOrder.PayWay);
            string      MerId       = FastUserPay.MerId;
            string      MerKey      = FastUserPay.MerKey;

            if (MerId.IsNullOrEmpty() || MerKey.IsNullOrEmpty())
            {
                Response.Write("E53");
                return;
            }
            string MD5Str = SignStr + MerKey;
            string sign   = MD5Str.GetMD5();
            //================================================
            //这里记录日志
            PayLog PayLog = new PayLog();

            PayLog.PId     = (int)FastOrder.PayWay;
            PayLog.OId     = FastOrder.TNum;
            PayLog.TId     = FastOrder.Trade;
            PayLog.Amount  = decimal.Parse(txnamt) / 100;
            PayLog.Way     = "POST";
            PayLog.AddTime = DateTime.Now;
            PayLog.Data    = Request.Form.ToString();
            PayLog.State   = 1;
            Entity.PayLog.AddObject(PayLog);
            Entity.SaveChanges();
            //================================================
            if (Sign != sign)
            {
                Response.Write("E4");
                return;
            }
            if (MerId != merid)
            {
                Response.Write("E5");
                return;
            }
            //0000 交易成功【已支付,结算到子商户结算卡】
            //1001 未支付
            //1002 交易处理中【已支付,未结算到结算卡】
            //1003交易成功结算失败
            //1004 交易失败
            if (resultcode != "0000" && resultcode != "1002" && resultcode != "1003")
            {
                Response.Write("E6");
                return;
            }
            int factmoney = int.Parse(txnamt);

            if (((int)(FastOrder.Amoney * 100)) != factmoney)
            {
                Response.Write("E7");
                return;
            }
            FastOrder.Trade = queryid;
            Entity.SaveChanges();
            FastOrder = FastOrder.PaySuccess(Entity);
            if (FastOrder.PayState == 1)
            {
                if (resultcode == "0000")
                {
                    FastOrder.UserState = 1;
                    FastOrder.UserTime  = DateTime.Now;
                }
                if (resultcode == "1002")
                {
                    FastOrder.UserState = 3;
                    FastOrder.UserTime  = DateTime.Now;
                }
                if (resultcode == "1003")
                {
                    FastOrder.UserState = 2;
                    FastOrder.UserTime  = DateTime.Now;
                }
                Entity.SaveChanges();
            }
            Response.Write("0000");
        }
        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("[UsersTrueNameByAPI]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            UserAuth UserAuth = new UserAuth();

            UserAuth = JsonToObject.ConvertJsonToModel(UserAuth, json);

            SysSet SysSet = this.Entity.SysSet.FirstOrNew();

            if (!UserAuth.IdentityCode.IsNullOrEmpty())
            {
                var y        = UserAuth.IdentityCode.Substring(6, 4);
                var m        = UserAuth.IdentityCode.Substring(10, 2);
                var d        = UserAuth.IdentityCode.Substring(12, 2);
                var birthday = new DateTime(int.Parse(y), int.Parse(m), int.Parse(d));
                var now      = DateTime.Now;
                int age      = now.Year - birthday.Year;
                if (now.Month < birthday.Month || (now.Month == birthday.Month && now.Day < birthday.Day))
                {
                    age--;
                }
                if (age > SysSet.AuthMaxAge || age < SysSet.AuthMinAge)
                {
                    DataObj.OutError("1104");
                    return;
                }
            }

            Users Users = new Users();

            Users = JsonToObject.ConvertJsonToModel(Users, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            if (UserAuth.Token.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (UserAuth.NeekName.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (Users.X.IsNullOrEmpty() || Users.Y.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }

            string HaoFu_Auth_Open = ConfigurationManager.AppSettings["HaoFu_Auth_Open"].ToString();
            //SysSet SysSet = Entity.SysSet.FirstOrNew();

            byte CardItemNum  = 0;
            byte CardType     = 0;
            byte UsedCardType = 0;

            if (Equipment.RqType == "Apple")
            {
                CardItemNum = SysSet.IosSet10;
                if (SysSet.IosSet11 == 0)
                {
                    CardType = 0;
                }
                if (SysSet.IosSet11 == 1)
                {
                    CardType = 2;
                }
                if (SysSet.IosSet11 == 2)
                {
                    CardType = 1;
                }
            }
            else
            {
                CardItemNum = SysSet.ApkSet10;
                if (SysSet.ApkSet11 == 0)
                {
                    CardType = 0;
                }
                if (SysSet.ApkSet11 == 1)
                {
                    CardType = 2;
                }
                if (SysSet.ApkSet11 == 2)
                {
                    CardType = 1;
                }
            }
            if (HaoFu_Auth_Open != "true")
            {
                CardItemNum = 6;//兼容直连六要素接口
            }
            if (CardItemNum == 6)
            {
                if (UserAuth.BankAccount.IsNullOrEmpty() || UserAuth.AccountName.IsNullOrEmpty() || UserAuth.IdentityCode.IsNullOrEmpty() || UserAuth.Mobile.IsNullOrEmpty() || UserAuth.CVV.IsNullOrEmpty() || UserAuth.EndDate.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
                CardType = 2;//六要素一定是信用卡
            }
            else if (CardItemNum == 4)
            {
                if (UserAuth.BankAccount.IsNullOrEmpty() || UserAuth.AccountName.IsNullOrEmpty() || UserAuth.IdentityCode.IsNullOrEmpty() || UserAuth.Mobile.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
            }
            else if (CardItemNum == 3)
            {
                if (UserAuth.BankAccount.IsNullOrEmpty() || UserAuth.AccountName.IsNullOrEmpty() || UserAuth.IdentityCode.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
            }
            else
            {
                DataObj.OutError("1000");
                return;
            }
            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == UserAuth.Token);

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae == 2)   //已实名认证
            {
                DataObj.OutError("2007");
                return;
            }
            int CardIdCount = Entity.Users.Count(n => n.CardId == UserAuth.IdentityCode && n.CardStae == 2);

            if (CardIdCount > 0) //身份证已用过
            {
                DataObj.OutError("2020");
                return;
            }
            //验证账号是否被限制
            if (Entity.UserBlackList.FirstOrDefault(UBL => UBL.CardNumber == baseUsers.UserName && UBL.State == 1) != null)
            {
                //提示暂不支持您入网
                DataObj.OutError("2027");
                return;
            }
            //验证身份证是否被限制
            if (Entity.UserBlackList.FirstOrDefault(UBL => UBL.CardNumber == UserAuth.IdentityCode && UBL.State == 2) != null)
            {
                //提示暂不支持您入网
                DataObj.OutError("2027");
                return;
            }
            //验证银行卡是否被限制
            if (Entity.UserBlackList.FirstOrDefault(UBL => UBL.CardNumber == UserAuth.BankAccount && UBL.State == 3) != null)
            {
                //提示暂不支持您入网
                DataObj.OutError("2027");
                return;
            }
            //2016-10-07 非法关键词限制
            if (!SysSet.NoWord.IsNullOrEmpty())
            {
                string NeekName = Users.NeekName;
                NeekName = NeekName.Replace(" ", "").Replace(" ", "");
                string[] NoWord    = SysSet.NoWord.Split('|');
                bool     hasNoWord = false;
                string   noword    = "";
                foreach (var p in NoWord)
                {
                    if (NeekName.Contains(p))
                    {
                        hasNoWord = true;
                        noword    = p;
                        break;
                    }
                }
                if (hasNoWord)
                {
                    DataObj.Msg = "禁止使用关键词“" + noword + "”";
                    DataObj.OutError("2025");
                    return;
                }
            }

            //2016-09-30 限制重名提交
            Users tempUsers = Entity.Users.FirstOrDefault(n => n.NeekName == Users.NeekName && n.State == 1 && (n.CardStae == 2 || n.CardStae == 1));

            if (tempUsers != null)
            {
                DataObj.OutError("2024");
                return;
            }

            int Count = Entity.UserAuth.Count(n => n.UId == baseUsers.Id && n.IsCharge == 1);

            if (Count >= SysSet.AuthTimes)
            {
                DataObj.OutError("2022");
                return;
            }

            if (!UserAuth.EndDate.IsNullOrEmpty())
            {
                //处理年月问题传上来是MMYY
                //20151112调整成YYMM
                if (UserAuth.EndDate.Length == 4)
                {
                    string MM = UserAuth.EndDate.Substring(0, 2);
                    string YY = UserAuth.EndDate.Substring(2, 2);
                    UserAuth.EndDate = YY + MM;
                }
            }

            UserAuth.AddTime  = DateTime.Now;
            UserAuth.UId      = baseUsers.Id;
            UserAuth.IsCharge = 0;
            Entity.UserAuth.AddObject(UserAuth);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, UserAuth);

            #region 贴牌配置
            int ApkSet3   = SysSet.ApkSet3;
            int IosSet3   = SysSet.IosSet3;
            var vSysAgent = Entity.SysAgent.FirstOrDefault(o => o.Id == baseUsers.Agent);
            if (vSysAgent == null)
            {
                DataObj.OutError("1000");
                return;
            }
            var topSysAgent = vSysAgent.GetTopAgent(Entity);
            if (topSysAgent != null && topSysAgent.IsTeiPai == 1)
            {
                ApkSet3 = topSysAgent.Set3;
                IosSet3 = topSysAgent.Set3;
            }
            #endregion

            #region 激活码逻辑
            Card Card        = null;
            bool IsCheckCard = false;
            //必填
            if ((ApkSet3 == 1 && this.Equipment.RqType == "Android") || (IosSet3 == 1 && this.Equipment.RqType == "Apple"))
            {
                IsCheckCard = true;
                if (UserAuth.CardNum.IsNullOrEmpty() || UserAuth.CardPWD.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
            }

            //选填
            if ((ApkSet3 == 3 && this.Equipment.RqType == "Android") || (IosSet3 == 3 && this.Equipment.RqType == "Apple"))
            {
                if (!UserAuth.CardNum.IsNullOrEmpty() && !UserAuth.CardPWD.IsNullOrEmpty())
                {
                    IsCheckCard = true;
                }
            }

            if (IsCheckCard)
            {
                Card = Entity.Card.FirstOrDefault(n => n.Code == UserAuth.CardNum && n.PasWd == UserAuth.CardPWD && n.Auto == 1);
                if (Card == null)
                {
                    DataObj.OutError("5001");
                    return;
                }
                if (Card.State != 1)
                {
                    string StateStr = string.Empty;
                    switch (Card.State)
                    {
                    case 2:
                        StateStr = "已授权";
                        break;

                    case 3:
                        StateStr = "已使用";
                        break;

                    case 0:
                        StateStr = "已失效";
                        break;
                    }

                    DataObj.Msg = "激活码" + StateStr;
                    DataObj.OutError("5001");
                    return;
                }
                if (Card.AId.IsNullOrEmpty())
                {
                    DataObj.OutError("5002");
                    return;
                }
                if (Card.AdminId.IsNullOrEmpty())
                {
                    DataObj.OutError("5002");
                    return;
                }
                Card.State        = 3;//使用中
                baseUsers.CardNum = Card.Code;
            }
            #endregion

            string ret_code = "";
            string ret_msg  = "";
            string isCharge = "";

            string CONTENT = "";

            #region 第三方接口查询
            if (HaoFu_Auth_Open == "true")
            {
                if (CardItemNum != 6)
                {
                    UsedCardType = GetCardType(UserAuth.BankAccount);
                    if (CardType == 1)//要求借记卡
                    {
                        if (UsedCardType != 1)
                        {
                            DataObj.OutError("2023");
                            Utils.WriteLog(CardType + "===" + UsedCardType + "无法查询的卡:" + UserAuth.BankAccount, "bankcard");
                            return;
                        }
                    }
                    if (CardType == 2)//要求信用卡
                    {
                        if (UsedCardType != 2)
                        {
                            DataObj.OutError("2023");
                            Utils.WriteLog(CardType + "===" + UsedCardType + "无法查询的卡:" + UserAuth.BankAccount, "bankcard");
                            return;
                        }
                    }
                }
                else
                {
                    UsedCardType = 2;
                }

                string HaoFu_Auth_MerId  = ConfigurationManager.AppSettings["HaoFu_Auth_MerId"].ToString();
                string HaoFu_Auth_MerKey = ConfigurationManager.AppSettings["HaoFu_Auth_MerKey"].ToString();
                string HaoFu_Auth_Url    = ConfigurationManager.AppSettings["HaoFu_Auth_Url"].ToString();

                string data       = "{\"action\":\"authuser\",\"merid\":\"" + HaoFu_Auth_MerId + "\",\"orderid\":\"" + UserAuth.OId + "\",\"bankaccount\":\"" + UserAuth.BankAccount + "\",\"accountname\":\"" + UserAuth.AccountName + "\",\"identitycode\":\"" + UserAuth.IdentityCode + "\",\"mobile\":\"" + UserAuth.Mobile + "\",\"cvv\":\"" + UserAuth.CVV + "\",\"enddate\":\"" + UserAuth.EndDate + "\"}";
                string DataBase64 = LokFuEncode.Base64Encode(data, "utf-8");
                string Sign       = (DataBase64 + HaoFu_Auth_MerKey).GetMD5();

                DataBase64 = HttpUtility.UrlEncode(DataBase64, Encoding.UTF8);
                string postdata = "req=" + DataBase64 + "&sign=" + Sign;

                CONTENT = Utils.PostRequest(HaoFu_Auth_Url, postdata, "utf-8");

                JObject JS = new JObject();
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(CONTENT);
                }
                catch (Exception Ex)
                {
                    Log.Write("[UsersTrueNameByAPI]:", "【CONTENT】" + CONTENT, Ex);
                }
                if (JS == null)
                {
                    DataObj.OutError("2021");
                    return;
                }
                string resp = JS["resp"].ToString();
                CONTENT = LokFuEncode.Base64Decode(resp, "utf-8");
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(CONTENT);
                }
                catch (Exception Ex)
                {
                    Log.Write("[UsersTrueNameByAPI]:", "【CONTENT2】" + CONTENT, Ex);
                }
                if (JS == null)
                {
                    DataObj.OutError("2021");
                    return;
                }
                ret_code = JS["respcode"].ToString();
                ret_msg  = JS["respmsg"].ToString();
                if (JS["ischarge"] != null)
                {
                    isCharge = JS["ischarge"].ToString();
                }
                if (isCharge == "1")
                {
                    UserAuth.IsCharge = 1;
                }
                else
                {
                    UserAuth.IsCharge = 0;
                }
            }
            #endregion

            #region 审核处理
            UserAuth.RetCode = ret_code;
            UserAuth.RetMsg  = ret_msg;
            UserAuth.RetLog  = CONTENT;

            baseUsers.TrueName = UserAuth.AccountName;
            baseUsers.NeekName = UserAuth.NeekName;
            baseUsers.CardId   = UserAuth.IdentityCode;

            baseUsers.CardFace = "";

            baseUsers.CardType = 1;
            if (UsedCardType == 2)
            {
                baseUsers.HasT0 = 1;
            }
            else
            {
                baseUsers.HasT0 = 0;
            }

            string Code = "0000";
            if (ret_code == "0000")
            {
                baseUsers.CardStae = 2;//直接审核通过
                //=======================================
                string GPSAddress = Users.RegAddress;
                if (GPSAddress.IsNullOrEmpty())
                {
                    GPSAddress = Utils.GetAddressByGPS(Users.X, Users.Y);
                }
                if (!GPSAddress.IsNullOrEmpty())
                {
                    baseUsers.RegAddress = GPSAddress;
                    baseUsers.X          = Users.X;
                    baseUsers.Y          = Users.Y;
                }
                //=======================================
                UserTrack.ENo        = DataObj.ENo;
                UserTrack.OPType     = "自动认证";
                UserTrack.GPSAddress = GPSAddress;
                UserTrack.GPSX       = Users.X;
                UserTrack.GPSY       = Users.Y;
                baseUsers.SeavGPSLog(UserTrack, Entity);
                //=======================================

                //20151125需要对有绑卡的用户验证是否是来源与推广,增加抽奖次数
                #region  人推广
                if (!baseUsers.MyPId.IsNullOrEmpty())
                {
                    if (baseUsers.ShareType == 2)
                    {
                        //支付通道升级推广
                        PayConfigChange PCC = Entity.PayConfigChange.FirstOrDefault(n => n.Id == baseUsers.PayConfigId && n.State == 1 && n.ShareNumber > 0);
                        if (PCC != null)
                        {
                            int count = Entity.Users.Count(n => n.CardStae == 2 && n.State == 1 && n.MyPId == baseUsers.MyPId && n.PayConfigId == baseUsers.PayConfigId && n.Id != baseUsers.Id);

                            count++;                      //这里统计会漏掉当前用户的,需要增加1个。

                            if (count == PCC.ShareNumber) //相等的那一次调整,避免超出了还一直调整
                            {
                                Users UP = Entity.Users.FirstOrDefault(n => n.Id == baseUsers.MyPId);
                                if (PCC.CState == 1)
                                {
                                    if (UP.Cash0 > PCC.Cash0)
                                    {
                                        UP.Cash0 = PCC.Cash0;
                                    }
                                    if (UP.ECash0 > PCC.ECash0)
                                    {
                                        UP.ECash0 = PCC.ECash0;
                                    }
                                }
                                if (PCC.EState == 1)
                                {
                                    if (UP.Cash1 > PCC.Cash1)
                                    {
                                        UP.Cash1 = PCC.Cash1;
                                    }
                                    if (UP.ECash1 > PCC.ECash1)
                                    {
                                        UP.ECash1 = PCC.ECash1;
                                    }
                                }
                                IList <UserPay> List = Entity.UserPay.Where(n => n.UId == baseUsers.MyPId).ToList();//获取用户配置
                                foreach (var p in List)
                                {
                                    PayConfigTemp PCT = Entity.PayConfigTemp.FirstOrDefault(n => n.PId == p.PId && n.PCCId == PCC.Id);
                                    //获取套餐配置
                                    if (PCT != null)
                                    {
                                        if (PCT.State == 1)
                                        {
                                            if (p.Cost > PCT.Cost)
                                            {
                                                p.Cost = PCT.Cost;
                                            }
                                        }
                                    }
                                }
                                string UserPayCashName = "UserPay_" + UP.Id.ToString() + "_" + Equipment.RqType;
                                CacheBuilder.EntityCache.Remove(UserPayCashName, null);
                                string PayConfigChangeCashName = "PayConfigChange_" + UP.Agent + "_" + UP.Id;
                                CacheBuilder.EntityCache.Remove(PayConfigChangeCashName, null);
                                //Utils.WriteLog("UserPayCashName:" + UserPayCashName + " PayConfigChangeCashName:" + PayConfigChangeCashName, "ClearCache");
                            }
                        }
                    }
                    if (baseUsers.ShareType == 1)
                    {
                        //增加推广抽奖次数
                        TurnUsers TurnUsers = Entity.TurnUsers.FirstOrNew(n => n.UId == baseUsers.MyPId);
                        if (!TurnUsers.Id.IsNullOrEmpty())
                        {
                            TurnUsers.Times++;
                        }
                    }
                    #region 分享统计数
                    //===================================增加分享统计数===================================
                    //获取用户所属各级分润配置
                    // IList<UserPromoteGet> UserPromoteGetList = Entity.UserPromoteGet.Where(n => n.AgentID == baseUsers.Agent).OrderBy(n => n.PromoteLevel).ToList();
                    int MaxLevel = SysSet.GlobaPromoteMaxLevel;
                    //获取用户各级关系,最大级不超过用户配置级数。返回数据包含当前用户,当前用户级数标识Tier为0
                    IList <Users> UsersList = baseUsers.GetUsersById(Entity, MaxLevel);
                    foreach (var U in UsersList.Where(n => n.Tier > 0))
                    {
                        ShareTotal ShareTotal = Entity.ShareTotal.FirstOrDefault(n => n.UId == U.Id && n.Tier == U.Tier);
                        if (ShareTotal == null)
                        {
                            ShareTotal          = new ShareTotal();
                            ShareTotal.UId      = U.Id;
                            ShareTotal.AddTime  = DateTime.Now;
                            ShareTotal.ShareNum = 1;
                            ShareTotal.Amount   = 0;
                            ShareTotal.Profit   = 0;
                            ShareTotal.Tier     = U.Tier;
                            Entity.ShareTotal.AddObject(ShareTotal);
                        }
                        else
                        {
                            ShareTotal.ShareNum += 1;
                        }
                        Entity.SaveChanges();
                    }
                    //===================================增加分享统计数 End===================================
                    #endregion
                }
                #endregion

                if (Card != null)
                {
                    //代理商信息
                    baseUsers.Agent = Card.AId;
                    baseUsers.AId   = Card.AdminId;
                    //推广信息
                    if (!Card.PUId.IsNullOrEmpty())
                    {
                        if (baseUsers.MyPId.IsNullOrEmpty())
                        {
                            //不是费率升级推广才有效
                            baseUsers.MyPId       = Card.PUId;
                            baseUsers.PayConfigId = 0;
                            baseUsers.ShareType   = 1;
                        }
                    }
                    Card.State = 2;
                }
            }
            else
            {
                Code = "2021";
                baseUsers.CardStae = 3;//审核失败
                baseUsers.CardNum  = "";
                if (Card != null)
                {
                    Card.State = 1;
                }
            }
            Entity.SaveChanges();
            #endregion
            DataObj.Data = UserAuth.OutJson();
            DataObj.Code = Code;
            DataObj.OutString();
        }
Esempio n. 7
0
        public ActionResult AddCard(string etnum, string Card = "", string Mobile = "", string code = "")
        {
            string    tnum      = LokFuEncode.LokFuAPIDecode(etnum, DllName);
            FastOrder FastOrder = Entity.FastOrder.FirstOrDefault(n => n.TNum == tnum);

            if (FastOrder == null)
            {
                ViewBag.ErrorMsg = "订单有误!";
                return(View("Error"));
            }
            Users Users = Entity.Users.FirstOrDefault(n => n.Id == FastOrder.UId);

            if (Users == null)
            {
                ViewBag.ErrorMsg = "商户信息有误!";
                return(View("Error"));
            }

            ViewBag.FastOrder = FastOrder;
            ViewBag.Users     = Users;
            ViewBag.etnum     = etnum;

            if (!Card.IsNullOrEmpty() && !Mobile.IsNullOrEmpty() && !code.IsNullOrEmpty())
            {
                if (Card.Length > 20)
                {
                    ViewBag.ErrorMsg = "卡号长度超限!";
                    return(View("Error"));
                }
                if (Mobile.Length > 20)
                {
                    ViewBag.ErrorMsg = "手机号码长度超限!";
                    return(View("Error"));
                }
                if (code.ToUpper() != Session.GetCheckCode())
                {
                    ViewBag.ErrorMsg = "验证码错误!";
                    return(View("Error"));
                }
                Session.ClearCheckCode();
                //绑卡前验证是否有鉴权权限
                UsersPayCard UsersPayCard = Entity.UsersPayCard.FirstOrDefault(n => n.Card == Card && n.Mobile == Mobile && n.UId == FastOrder.UId);
                if (UsersPayCard == null)//不存在则绑卡
                {
                    UserBlackList UserBlackList = Entity.UserBlackList.FirstOrDefault(UBL => UBL.CardNumber == Card && UBL.State == 3);
                    if (UserBlackList != null)
                    {
                        ViewBag.ErrorMsg = "暂不支持该银行卡绑卡";
                        return(View("Error"));
                    }

                    string HaoFu_Auth_MerId  = ConfigurationManager.AppSettings["HaoFu_Auth_MerId"].ToString();
                    string HaoFu_Auth_MerKey = ConfigurationManager.AppSettings["HaoFu_Auth_MerKey"].ToString();
                    string HaoFu_Auth_Url    = ConfigurationManager.AppSettings["HaoFu_Auth_Url"].ToString();

                    string data       = "{\"action\":\"authuser\",\"merid\":\"" + HaoFu_Auth_MerId + "\",\"orderid\":\"" + FastOrder.TNum + "\",\"bankaccount\":\"" + Card + "\",\"accountname\":\"" + Users.TrueName + "\",\"identitycode\":\"" + Users.CardId + "\",\"mobile\":\"" + Mobile + "\"}";
                    string DataBase64 = LokFuEncode.Base64Encode(data, "utf-8");
                    string Sign       = (DataBase64 + HaoFu_Auth_MerKey).GetMD5();

                    DataBase64 = HttpUtility.UrlEncode(DataBase64, Encoding.UTF8);
                    string postdata = "req=" + DataBase64 + "&sign=" + Sign;

                    string CONTENT = Utils.PostRequest(HaoFu_Auth_Url, postdata, "utf-8");

                    JObject JS = new JObject();
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(CONTENT);
                    }
                    catch (Exception)
                    {
                        ViewBag.ErrorMsg = "请求银联鉴权失败!【00】";
                        return(View("Error"));
                    }
                    string resp = JS["resp"].ToString();
                    CONTENT = LokFuEncode.Base64Decode(resp, "utf-8");
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(CONTENT);
                    }
                    catch (Exception)
                    {
                        ViewBag.ErrorMsg = "请求银联鉴权失败!【01】";
                        return(View("Error"));
                    }
                    string ret_code = JS["respcode"].ToString();

                    if (ret_code == "0000")
                    {
                        string BankNumLeft = Card.Substring(0, 6);
                        //获取卡Bin
                        BasicCardBin BasicCardBin = Entity.BasicCardBin.FirstOrDefault(n => n.BIN == BankNumLeft);
                        string       bankName     = "银联卡";
                        byte         CardType     = 0;
                        if (BasicCardBin != null)
                        {
                            bankName = BasicCardBin.BankName;
                            CardType = (byte)BasicCardBin.CardType;
                        }
                        else
                        {
                        }
                        UsersPayCard         = new UsersPayCard();
                        UsersPayCard.UId     = FastOrder.UId;
                        UsersPayCard.Type    = CardType;
                        UsersPayCard.Bank    = bankName;
                        UsersPayCard.Name    = Users.TrueName;
                        UsersPayCard.Card    = Card;
                        UsersPayCard.Mobile  = Mobile;
                        UsersPayCard.State   = 1;
                        UsersPayCard.AddTime = DateTime.Now;
                        Entity.UsersPayCard.AddObject(UsersPayCard);
                        Entity.SaveChanges();
                        Response.Redirect("GoPay.html?BankId=" + UsersPayCard.Id + "&etnum=" + HttpUtility.UrlEncode(etnum));
                    }
                    else
                    {
                        string ret_msg = JS["respmsg"].ToString();
                        ViewBag.ErrorMsg = "银行卡认证失败!";
                        return(View("Error"));
                    }
                }
                else
                {
                    if (UsersPayCard.State == 0)
                    {
                        UsersPayCard.State = 1;
                        Entity.SaveChanges();
                    }
                    Response.Redirect("GoPay.html?BankId=" + UsersPayCard.Id + "&etnum=" + HttpUtility.UrlEncode(etnum));
                }
            }
            return(View());
        }
Esempio n. 8
0
        public void Execute(IJobExecutionContext context)
        {
            string JobName = "OutMoney";
            string CanRun  = ConfigurationManager.AppSettings["Run" + JobName].ToString();

            if (CanRun == "true")
            {
                if (!IsRun)
                {
                    LokFuEntity Entity = new LokFuEntity();
                    IsRun = true;
                    try
                    {
                        Log.Write(JobName + "任务开始执行!");
                        //-------------------------------------------------------
                        #region 任务主体
                        #region 全局变量
                        SysSet BasicSet = Entity.SysSet.FirstOrDefault();

                        string NoticePath = ConfigurationManager.AppSettings["NoticePath"].ToString();
                        string NoticeUrl  = NoticePath + "/PayCenter/HFCash/Notice.html";
                        //提交结算中心
                        string merId  = ConfigurationManager.AppSettings["Cash_merId"].ToString();  //商户号
                        string merKey = ConfigurationManager.AppSettings["Cash_merKey"].ToString(); //商户密钥
                        #endregion
                        //0=无效,1=待执行,2=执行中,3=完成
                        IList <TaskCash> TaskCashList = Entity.TaskCash.Where(n => n.State == 1 || n.State == 2).OrderBy(n => n.Id).ToList();
                        //读取待执行
                        foreach (var P in TaskCashList)
                        {
                            //任务状态设置为执行中
                            if (P.State == 1)
                            {
                                P.State = 2;
                                P.STime = DateTime.Now;
                                Entity.SaveChanges();
                            }
                            IList <TaskCashInfo> TaskCashInfoList = Entity.TaskCashInfo.Where(n => (n.State == 1 || n.State == 2) && n.TId == P.Id).OrderBy(n => n.Id).ToList();
                            foreach (var p in TaskCashInfoList)
                            {
                                if (p.State == 1)
                                {
                                    p.State = 2;
                                    p.STime = DateTime.Now;
                                    Entity.SaveChanges();
                                }
                                OrderCash OC     = Entity.OrderCash.FirstOrDefault(n => n.OId == p.OId);
                                bool      CanPay = true;
                                if (OC == null)
                                {
                                    CanPay = false;
                                }
                                if (OC.FState == 1)//已付过款
                                {
                                    CanPay = false;
                                }
                                if (OC.OrderState != 2 || OC.PayState != 1)
                                {
                                    CanPay = false;
                                }
                                if (CanPay)//开启自动结算时执行
                                {
                                    if (BasicSet.CashPayWay == 0)
                                    {
                                        p.State  = 3;//标识成功
                                        p.OState = 2;
                                        p.NState = 1;
                                        p.Remark = "批量人工结算";
                                        p.ETime  = DateTime.Now;

                                        OC.PayState = 2;
                                        OC.FState   = 1;
                                        OC.FTime    = DateTime.Now;
                                        Orders O = Entity.Orders.FirstOrDefault(n => n.TNum == p.OId);
                                        if (O != null)
                                        {
                                            O.PayState   = 2;
                                            O.InternalRm = "批量人工结算";
                                        }
                                        Entity.SaveChanges();
                                        //======分润======
                                        OC = OC.PayAgent(Entity, 1);
                                        if (O != null)
                                        {
                                            O.AgentPayGet = (decimal)OC.AgentCashGet;
                                        }
                                        Entity.SaveChanges();
                                    }
                                    else if (BasicSet.CashPayWay == 1)
                                    {
                                        #region 提交接口
                                        string  orderId    = OC.OId;//商户流水号
                                        decimal PayMoney   = OC.Amoney - (decimal)OC.UserRate;
                                        decimal money      = PayMoney * 100;
                                        long    intmoney   = Int64.Parse(money.ToString("F0"));
                                        string  OrderMoney = intmoney.ToString();//金额,以分为单


                                        string UserCardId = Entity.Users.FirstOrNew(n => n.Id == OC.UId).CardId;
                                        string PostJson   = "{\"action\":\"QCash\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\",\"bin\":\"" + OC.Bin + "\",\"accno\":\"" + OC.CardNum + "\",\"accname\":\"" + OC.Owner + "\",\"cardno\":\"" + UserCardId + "\"}";

                                        //传送数据Base64
                                        string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");

                                        //获得签名
                                        string Sign = (DataBase64 + merKey).GetMD5();

                                        //传送数据UrlEnCode
                                        DataBase64 = System.Web.HttpUtility.UrlEncode(DataBase64);

                                        //组装Post数据
                                        string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);

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

                                        //Post数据,获得结果
                                        string  Ret     = Utils.PostRequest(HFNFC_Url, PostData, "utf-8");
                                        string  runType = "PayOk";
                                        JObject JS      = new JObject();
                                        try
                                        {
                                            JS = (JObject)JsonConvert.DeserializeObject(Ret);
                                        }
                                        catch (Exception)
                                        {
                                            Utils.WriteLog("[" + OC.OId + "]" + Ret, "PayCashCenterErr");
                                            runType = "PayIng";
                                        }
                                        string Remark = "";
                                        if (runType == "PayOk")
                                        {
                                            if (JS != null)
                                            {
                                                string resp = JS["resp"].ToString();
                                                Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                                                try
                                                {
                                                    JS = (JObject)JsonConvert.DeserializeObject(Ret);
                                                }
                                                catch (Exception)
                                                {
                                                    runType = "PayIng";
                                                }
                                                if (runType == "PayOk")
                                                {
                                                    if (JS != null)
                                                    {
                                                        string respcode = JS["respcode"].ToString();
                                                        if (respcode != "00")
                                                        {
                                                            if (respcode == "45")
                                                            {
                                                                //限额了,需要特别处理
                                                                runType = "PayErr";
                                                            }
                                                            else
                                                            {
                                                                runType = "PayIng";
                                                            }
                                                            Remark = JS["respmsg"].ToString();
                                                        }
                                                        else
                                                        {
                                                            string resultcode = JS["resultcode"].ToString();
                                                            if (resultcode == "0000")
                                                            {
                                                                runType = "PayOk";
                                                            }
                                                            else if (resultcode == "2002" || resultcode == "2003")
                                                            {
                                                                runType = "PayErr";
                                                                Remark  = JS["resultmsg"].ToString();
                                                            }
                                                            else
                                                            {
                                                                runType = "PayIng";
                                                                Remark  = JS["resultmsg"].ToString();
                                                            }
                                                        }
                                                    }
                                                    else
                                                    {
                                                        runType = "PayIng";
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                runType = "PayIng";
                                            }
                                        }

                                        if (runType == "PayIng")
                                        {
                                            //处理中
                                            p.ETime = DateTime.Now;
                                            p.State = 5;//标识 未知状态
                                            Entity.SaveChanges();
                                        }
                                        if (runType == "PayErr")
                                        {
                                            OC.PayState = 3;
                                            OC.Remark   = Remark;
                                            p.State     = 4;//标识失败
                                            p.OState    = 2;
                                            p.NState    = 1;
                                            p.Remark    = Remark;
                                            p.ETime     = DateTime.Now;
                                            Orders O = Entity.Orders.FirstOrDefault(n => n.TNum == p.OId);
                                            if (O != null)
                                            {
                                                O.PayState = 3;
                                                O.Remark   = Remark;
                                            }
                                            Entity.SaveChanges();
                                        }
                                        if (runType == "PayOk")
                                        {
                                            OC.PayState = 2;
                                            OC.FState   = 1;
                                            OC.FTime    = DateTime.Now;
                                            p.State     = 3;//标识成功
                                            p.OState    = 2;
                                            p.NState    = 1;
                                            p.ETime     = DateTime.Now;
                                            Entity.SaveChanges();
                                            OC = OC.PayAgent(Entity, 1);//======分润======
                                            Orders O = Entity.Orders.FirstOrDefault(n => n.TNum == p.OId);
                                            if (O != null)
                                            {
                                                O.PayState    = 2;
                                                O.AgentPayGet = (decimal)OC.AgentCashGet;
                                                Entity.SaveChanges();
                                            }
                                        }
                                        Log.WriteLog("执行提现:" + p.OId, JobName);
                                        Thread.Sleep(1000);
                                        #endregion
                                    }
                                }
                                else
                                {
                                    p.Remark = "订单状态不符,需查单!";
                                    p.ETime  = DateTime.Now;
                                    p.State  = 5;//标识 未知状态
                                    Entity.SaveChanges();
                                }
                            }
                            //当前任务所有子项执行完成
                            int state1 = Entity.TaskCashInfo.Count(n => n.State == 1 && n.TId == P.Id);
                            int state2 = Entity.TaskCashInfo.Count(n => n.State == 2 && n.TId == P.Id);
                            int state3 = Entity.TaskCashInfo.Count(n => n.State == 3 && n.TId == P.Id);
                            int state4 = Entity.TaskCashInfo.Count(n => n.State == 4 && n.TId == P.Id);
                            int state5 = Entity.TaskCashInfo.Count(n => n.State == 5 && n.TId == P.Id);
                            if (state1 == 0 && state2 == 0)
                            {
                                P.State = 3;
                                P.ETime = DateTime.Now;
                            }
                            P.Success = state3 + state5;
                            P.Fail    = state4;
                            Entity.SaveChanges();
                            Log.WriteLog("TaskCashInfo任务执行完毕!共计" + TaskCashInfoList.Count + "笔交易", JobName);
                        }
                        Log.WriteLog("TaskCash任务执行完毕!共计" + TaskCashList.Count + "个任务", JobName);
                        #endregion
                        //-------------------------------------------------------
                        Log.Write(JobName + "任务执行结算!");
                    }
                    catch (Exception Ex)
                    {
                        Log.Write(JobName + "任务执行过程出错!", Ex);
                    }
                    IsRun = false;
                }
                else
                {
                    Log.Write(JobName + "任务还在执行中!");
                }
            }
        }
        public void FastNotice()
        {
            string Resp    = Request.Form["resp"];
            string Sign    = Request.Form["sign"];
            string SignStr = Resp;

            Resp = LokFuEncode.Base64Decode(Resp, "utf-8");
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Resp);
            }
            catch (Exception Ex)
            {
                Response.Write(Ex.ToString());
                return;
            }
            if (json == null)
            {
                Response.Write("Json Null");
                return;
            }
            string resultcode = json["resultcode"].ToString(); //交易结果码
            string resultmsg  = json["resultmsg"].ToString();  //交易结果信息
            string queryid    = json["queryid"].ToString();    //交易流水号
            string txnamt     = json["txnamt"].ToString();     //交易金额\
            string merid      = json["merid"].ToString();      //交易金额
            string orderid    = json["orderid"].ToString();    //交易金额

            FastOrder FastOrder = Entity.FastOrder.FirstOrDefault(n => n.TNum == orderid);

            if (FastOrder == null)
            {
                Response.Write("E1");
                return;
            }
            if (FastOrder.PayState == 1)
            {
                Response.Write("P1");
                return;
            }
            FastPayWay FastPayWay = Entity.FastPayWay.FirstOrDefault(n => n.Id == FastOrder.PayWay);

            if (FastPayWay == null)
            {
                Response.Write("E3");
                return;
            }
            if (FastPayWay.State != 1)
            {
                Response.Write("E4");
                return;
            }
            if (FastPayWay.DllName != "HFPay")
            {
                Response.Write("E5");
                return;
            }
            string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
            if (PayConfigArr.Length != 3)
            {
                Response.Write("E53");
                return;
            }
            string MerId  = PayConfigArr[0];
            string MerKey = PayConfigArr[1];

            string MD5Str = SignStr + MerKey;
            string sign   = MD5Str.GetMD5();
            //================================================
            //这里记录日志
            PayLog PayLog = new PayLog();

            PayLog.PId     = (int)FastOrder.PayWay;
            PayLog.OId     = FastOrder.TNum;
            PayLog.TId     = FastOrder.Trade;
            PayLog.Amount  = decimal.Parse(txnamt) / 100;
            PayLog.Way     = "POST";
            PayLog.AddTime = DateTime.Now;
            PayLog.Data    = Request.Form.ToString();
            PayLog.State   = 1;
            Entity.PayLog.AddObject(PayLog);
            Entity.SaveChanges();
            //================================================
            if (Sign != sign)
            {
                Response.Write("E4");
                return;
            }
            if (MerId != merid)
            {
                Response.Write("E5");
                return;
            }
            if (resultcode != "0000" && resultcode != "1002")
            {
                Response.Write("E6");
                return;
            }
            int factmoney = int.Parse(txnamt);

            if (((int)(FastOrder.Amoney * 100)) != factmoney)
            {
                Response.Write("E7");
                return;
            }
            FastOrder.Trade = queryid;
            Entity.SaveChanges();

            FastOrder         = FastOrder.PaySuccess(Entity);
            ViewBag.FastOrder = FastOrder;

            Response.Write("0000");
        }
        /// <summary>
        /// 查询订单状态
        /// </summary>
        /// <param name="code">订单号</param>
        /// <returns></returns>
        public string PayState(string code)
        {
            string TNum   = LokFuEncode.Base64Decode(code);
            Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == TNum);

            if (Orders == null)
            {
                return("E1");
            }
            if (Orders.PayState == 1)
            {
                return("S");
            }
            if (Orders.TState != 1)
            {
                return("E0");
            }
            PayConfig PayConfig = Entity.PayConfig.FirstOrNew(n => n.Id == Orders.PayWay);

            if (PayConfig == null)
            {
                return("E2");
            }
            if (Orders.TState == 1 && Orders.PayState == 0)
            {
                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)
                        {
                            Utils.WriteLog("[Query_HF_Err]:【PostData】" + PostData + "\n【Ret】" + Ret, "ShopErr");
                            return("ER");
                        }
                        string resp = JS["resp"].ToString();
                        Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                        try
                        {
                            JS = (JObject)JsonConvert.DeserializeObject(Ret);
                        }
                        catch (Exception)
                        {
                            Utils.WriteLog("[Query_HF_Err]:", "【Ret】" + Ret, "ShopErr");
                            return("ER");
                        }

                        string respcode = JS["respcode"].ToString();
                        if (respcode != "00")
                        {
                            string respmsg = JS["respmsg"].ToString();
                            Utils.WriteLog("[Query_HF_Err]:【" + respcode + "】" + respmsg, "PayState");
                            return("ER");
                        }
                        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 = Orders.PaySuccess(Entity);
                            }
                        }
                    }
                    #endregion
                }
            }
            if (Orders.PayState == 1)
            {
                return("S");
            }
            if (Orders.TState == 0)
            {
                return("E100");
            }
            return("G");
        }
Esempio n. 11
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();
        }
        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("[GetPayPassByBank]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }


            Users    Users = new Users();
            UserAuth UA    = new UserAuth();

            Users = JsonToObject.ConvertJsonToModel(Users, json);
            UA    = JsonToObject.ConvertJsonToModel(UA, json);

            if (Users.UserName.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            if (Users.X.IsNullOrEmpty() || Users.Y.IsNullOrEmpty())
            {
                //DataObj.OutError("1000");
                //return;
            }
            ////手机号码黑名单验证
            //if (Entity.UserBlackList.FirstOrDefault(UBL => UBL.CardNumber == Users.UserName && UBL.State == 1) != null)
            //{
            //    //提示暂不支持您手机号入网
            //    DataObj.OutError("2026");
            //    return;
            //}
            //if (Entity.UserBlackList.FirstOrDefault(UBL => UBL.CardNumber == Users.CardId && UBL.State == 2) != null)
            //{
            //    //提示暂不支持您手机号入网
            //    DataObj.OutError("2027");
            //    return;
            //}
            Users BaseUsers = Entity.Users.FirstOrDefault(n => n.UserName == Users.UserName);

            if (BaseUsers == null)//用户不存在
            {
                DataObj.OutError("2001");
                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;
            }

            SysSet SysSet = Entity.SysSet.FirstOrNew();

            if (SysSet.AuthType != 3 && SysSet.AuthType != 2)
            {
                DataObj.OutError("2061");//----------------
                return;
            }
            if (BaseUsers.Amount < SysSet.AuthPrice)
            {
                DataObj.OutError("6026");
                return;
            }

            UserAuth UserAuth = new UserAuth();

            UserAuth.UId          = BaseUsers.Id;
            UserAuth.AccountName  = Users.TrueName;
            UserAuth.IdentityCode = Users.CardId;
            UserAuth.BankAccount  = Users.CardNum;
            UserAuth.Mobile       = Users.Mobile;
            UserAuth.CVV          = UA.CVV;
            UserAuth.EndDate      = UA.EndDate;
            UserAuth.AddTime      = DateTime.Now;

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            //处理走的通道及支持验证类型
            string HaoFu_Auth_Open = ConfigurationManager.AppSettings["HaoFu_Auth_Open"].ToString();
            byte   CardItemNum     = 0;

            if (Equipment.RqType == "Apple")
            {
                CardItemNum = SysSet.IosSet10;
            }
            else
            {
                CardItemNum = SysSet.ApkSet10;
            }
            if (HaoFu_Auth_Open != "true")
            {
                CardItemNum = 6;//兼容直连六要素接口
            }
            if (CardItemNum == 6)
            {
                if (UserAuth.BankAccount.IsNullOrEmpty() || UserAuth.AccountName.IsNullOrEmpty() || UserAuth.IdentityCode.IsNullOrEmpty() || UserAuth.Mobile.IsNullOrEmpty() || UserAuth.CVV.IsNullOrEmpty() || UserAuth.EndDate.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
            }
            else if (CardItemNum == 4)
            {
                if (UserAuth.BankAccount.IsNullOrEmpty() || UserAuth.AccountName.IsNullOrEmpty() || UserAuth.IdentityCode.IsNullOrEmpty() || UserAuth.Mobile.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
            }
            else if (CardItemNum == 3)
            {
                if (UserAuth.BankAccount.IsNullOrEmpty() || UserAuth.AccountName.IsNullOrEmpty() || UserAuth.IdentityCode.IsNullOrEmpty())
                {
                    DataObj.OutError("1000");
                    return;
                }
            }
            else
            {
                DataObj.OutError("1000");
                return;
            }

            //实名信息验证,支付密码密段是实名认证的
            if (Users.TrueName != BaseUsers.TrueName)
            {
                DataObj.OutError("2011");//2011	真实姓名不正确
                return;
            }
            if (Users.CardId != BaseUsers.CardId)
            {
                DataObj.OutError("2012");//2012	身份证不正确
                return;
            }

            if (!UserAuth.EndDate.IsNullOrEmpty())
            {
                //处理年月问题传上来是MMYY
                //20151112调整成YYMM
                if (UserAuth.EndDate.Length == 4)
                {
                    string MM = UserAuth.EndDate.Substring(0, 2);
                    string YY = UserAuth.EndDate.Substring(2, 2);
                    UserAuth.EndDate = YY + MM;
                }
            }
            UserAuth.AuthType  = 1;
            UserAuth.AuthPrice = SysSet.AuthPrice;
            UserAuth.IsCharge  = 0;
            Entity.UserAuth.AddObject(UserAuth);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, UserAuth);

            int     USERSID  = UserAuth.UId.GetValueOrDefault();
            string  TNUM     = UserAuth.OId;
            decimal PAYMONEY = UserAuth.AuthPrice;
            string  SP_Ret   = Entity.SP_UsersMoney(USERSID, TNUM, PAYMONEY, 2, "鉴权取回支付密码");

            if (SP_Ret != "3")
            {
                DataObj.OutError("8888");
                return;
            }

            string ret_code = "";
            string ret_msg  = "";
            string isCharge = "";

            string CONTENT = "";

            if (HaoFu_Auth_Open == "true")
            {
                //提交到结算中心去认证
                string HaoFu_Auth_MerId  = ConfigurationManager.AppSettings["HaoFu_Auth_MerId"].ToString();
                string HaoFu_Auth_MerKey = ConfigurationManager.AppSettings["HaoFu_Auth_MerKey"].ToString();
                string HaoFu_Auth_Url    = ConfigurationManager.AppSettings["HaoFu_Auth_Url"].ToString();

                string data       = "{\"action\":\"authuser\",\"merid\":\"" + HaoFu_Auth_MerId + "\",\"orderid\":\"" + UserAuth.OId + "\",\"bankaccount\":\"" + UserAuth.BankAccount + "\",\"accountname\":\"" + UserAuth.AccountName + "\",\"identitycode\":\"" + UserAuth.IdentityCode + "\",\"mobile\":\"" + UserAuth.Mobile + "\",\"cvv\":\"" + UserAuth.CVV + "\",\"enddate\":\"" + UserAuth.EndDate + "\"}";
                string DataBase64 = LokFuEncode.Base64Encode(data, "utf-8");
                string Sign       = (DataBase64 + HaoFu_Auth_MerKey).GetMD5();

                DataBase64 = HttpUtility.UrlEncode(DataBase64, Encoding.UTF8);
                string postdata = "req=" + DataBase64 + "&sign=" + Sign;

                CONTENT = Utils.PostRequest(HaoFu_Auth_Url, postdata, "utf-8");

                JObject JS = new JObject();
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(CONTENT);
                }
                catch (Exception Ex)
                {
                    Log.Write("[UsersTrueNameByAPI]:", "【CONTENT】" + CONTENT, Ex);
                }
                if (JS == null)
                {
                    DataObj.OutError("2021");
                    return;
                }
                string resp = JS["resp"].ToString();
                CONTENT = LokFuEncode.Base64Decode(resp, "utf-8");
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(CONTENT);
                }
                catch (Exception Ex)
                {
                    Log.Write("[UsersTrueNameByAPI]:", "【CONTENT2】" + CONTENT, Ex);
                }
                if (JS == null)
                {
                    DataObj.OutError("2021");
                    return;
                }
                ret_code = JS["respcode"].ToString();
                ret_msg  = JS["respmsg"].ToString();
                if (ret_code == "0000")
                {
                    isCharge = JS["ischarge"].ToString();
                }
                if (isCharge == "1")
                {
                    UserAuth.IsCharge = 1;
                }
                else
                {
                    UserAuth.IsCharge = 0;
                }
            }
            UserAuth.RetCode = ret_code;
            UserAuth.RetMsg  = ret_msg;
            UserAuth.RetLog  = CONTENT;

            if (ret_code != "0000")
            {
                DataObj.OutError("2021");
                return;
            }
            //=======================================
            UserTrack.ENo        = DataObj.ENo;
            UserTrack.OPType     = "鉴权取回支付密码";
            UserTrack.GPSAddress = Users.RegAddress;
            UserTrack.GPSX       = Users.X;
            UserTrack.GPSY       = Users.Y;
            BaseUsers.SeavGPSLog(UserTrack, Entity);
            //=======================================
            Entity.SaveChanges();

            DateTime now   = DateTime.Now;
            Guid     Gid   = Guid.NewGuid();
            string   mdstr = Users.Id + "|" + Users.UserName + "|" + Gid.ToString() + "|" + now.ToString();
            string   taken = mdstr.GetMD5();

            BaseUsers.Token = "pppp" + taken;

            Entity.SaveChanges();
            BaseUsers.Cols = "Token";
            DataObj.Data   = BaseUsers.OutJson();
            DataObj.Code   = "0000";
            DataObj.OutString();
        }
Esempio n. 13
0
        public void Notice()
        {
            string merId  = ConfigurationManager.AppSettings["Cash_merId"].ToString();  //商户号
            string merKey = ConfigurationManager.AppSettings["Cash_merKey"].ToString(); //商户密钥
            string Resp   = Request.Form["resp"];
            string Sign   = Request.Form["sign"];
            string MD5Str = Resp + merKey;
            string sign   = MD5Str.GetMD5();

            if (Sign != sign)
            {
                Response.Write("E2");
                return;
            }
            Resp = LokFuEncode.Base64Decode(Resp, "utf-8");
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Resp);
            }
            catch (Exception Ex)
            {
                Response.Write(Ex.ToString());
                return;
            }
            if (json == null)
            {
                Response.Write("Json Null");
                return;
            }
            string resultcode = json["resultcode"].ToString(); //交易结果码
            string resultmsg  = json["resultmsg"].ToString();  //交易结果信息
            string queryid    = json["queryid"].ToString();    //交易流水号
            string txnamt     = json["txnamt"].ToString();     //交易金额\
            string merid      = json["merid"].ToString();      //交易金额
            string orderid    = json["orderid"].ToString();    //交易金额
            //================================================
            PayLog PayLog = new PayLog();

            PayLog.PId     = 0;
            PayLog.OId     = orderid;
            PayLog.TId     = queryid;
            PayLog.Amount  = decimal.Parse(txnamt) / 100;
            PayLog.Way     = "POST";
            PayLog.AddTime = DateTime.Now;
            PayLog.Data    = Request.Form.ToString();
            PayLog.State   = 1;
            Entity.PayLog.AddObject(PayLog);
            Entity.SaveChanges();
            //================================================
            if (merId != merid)
            {
                Response.Write("E1");
                return;
            }
            Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == orderid);

            if (Orders == null)
            {
                Response.Write("E4");
                return;
            }
            if (resultcode == "0000")
            {
                if (Orders.TType == 2)
                {
                    OrderCash OrderCash = Entity.OrderCash.FirstOrDefault(n => n.OId == orderid);
                    if (OrderCash.FState == 0)
                    {
                        OrderCash.PayState = 2;
                        OrderCash.FState   = 1;
                        OrderCash.FTime    = DateTime.Now;
                        Orders.PayState    = 2;
                        if (OrderCash.AgentCashGet > 0)
                        {
                            Orders.RunSplit = 1;
                        }
                        Entity.SaveChanges();
                        Orders.SendMsg(Entity);//发送消息类
                    }
                }
                if (Orders.TType == 5)
                {
                    OrderHouse OrderHouse = Entity.OrderHouse.FirstOrDefault(n => n.OId == orderid);
                    if (OrderHouse.FState == 0)
                    {
                        OrderHouse.PayState = 2;
                        OrderHouse.FState   = 1;
                        OrderHouse.FTime    = DateTime.Now;
                        Orders.PayState     = 2;
                        if (OrderHouse.AIdPayGet > 0)
                        {
                            Orders.RunSplit = 1;
                        }
                        Entity.SaveChanges();
                        //======分润======
                        Orders.SendMsg(Entity);//发送消息类
                    }
                }
            }
            else if (resultcode == "2001")
            {
            }
            else
            {
                if (Orders.TType == 2)
                {
                    if (Orders.PayState != 4 && Orders.PayState != 3)
                    {
                        OrderCash OrderCash = Entity.OrderCash.FirstOrDefault(n => n.OId == orderid);

                        OrderCash.PayState = 3;
                        OrderCash.Remark   = resultmsg;
                        Orders.PayState    = 3;
                        Orders.Remark      = resultmsg;
                        Entity.SaveChanges();
                        Orders.SendMsg(Entity);//发送消息类
                    }
                }
                if (Orders.TType == 5)
                {
                    if (Orders.PayState != 4 && Orders.PayState != 3)
                    {
                        OrderHouse OrderHouse = Entity.OrderHouse.FirstOrDefault(n => n.OId == orderid);

                        OrderHouse.PayState = 3;
                        OrderHouse.Remark   = resultmsg;
                        Orders.PayState     = 3;
                        Orders.Remark       = resultmsg;
                        Entity.SaveChanges();
                        Orders.SendMsg(Entity);//发送消息类
                    }
                }
            }
            Response.Write("0000");
        }
Esempio n. 14
0
        public void Execute(IJobExecutionContext context)
        {
            string JobName = "FastCash";
            string CanRun  = ConfigurationManager.AppSettings["Run" + JobName].ToString();

            if (CanRun == "true")
            {
                if (!IsRun)
                {
                    LokFuEntity Entity = new LokFuEntity();
                    IsRun = true;
                    try
                    {
                        Log.Write(JobName + "任务开始执行!");
                        //-------------------------------------------------------
                        #region 任务主体
                        //查询所有已支付但未代付订单
                        DateTime          CanPayTime = DateTime.Now.AddSeconds(-300);//20秒前支付订单可付
                        IList <FastOrder> List       = Entity.FastOrder.Where(n => n.State == 1 && n.PayState == 1 && n.UserState == 0 && n.PayTime < CanPayTime).ToList();
                        //UserState 0未付 1已付 2失败 3结果未明 4付起中
                        //foreach (var p in List.Where(n=>n.PayWay==16 && n.))
                        //List = List.Where(n => n.PayWay != 16 || (n.PayWay == 16 && n.PayTime < CanPayTime2)).ToList();
                        foreach (var p in List)
                        {
                            p.UserTime  = DateTime.Now;
                            p.UserState = 4;
                        }
                        Entity.SaveChanges();
                        foreach (var p in List)
                        {
                            Users Users = Entity.Users.FirstOrDefault(n => n.Id == p.UId);
                            if (Users.StopPayState == 0)
                            {
                                FastPayWay FastPayWay = Entity.FastPayWay.FirstOrDefault(n => n.Id == p.PayWay && n.State == 1);
                                if (FastPayWay != null)
                                {
                                    string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
                                    if (FastPayWay.DllName == "HFPay")
                                    {
                                        #region 结算中心代付

                                        string HFCash_Url = "https://api.zhifujiekou.com/api/qcashgateway";

                                        //不需要
                                        string NoticePath = ConfigurationManager.AppSettings["NoticePath"].ToString();
                                        string NoticeUrl  = NoticePath + "/PayCenter/HFCash/FastNotice.html";

                                        //提交结算中心
                                        string merId  = PayConfigArr[0];                       //商户号
                                        string merKey = PayConfigArr[1];                       //商户密钥

                                        string orderId = p.TNum;                               //商户流水号

                                        string OrderMoney = (p.PayMoney * 100).ToString("F0"); //金额,以分为单

                                        string UserCardId = Users.CardId;
                                        string PostJson   = "{\"action\":\"QCash\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\",\"bin\":\"" + p.Bin + "\",\"accno\":\"" + p.Card + "\",\"accname\":\"" + p.CardName + "\",\"cardno\":\"" + UserCardId + "\"}";

                                        //传送数据Base64
                                        string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                                        //获得签名
                                        string Sign = (DataBase64 + merKey).GetMD5();
                                        //传送数据UrlEnCode
                                        DataBase64 = HttpUtility.UrlEncode(DataBase64);
                                        //组装Post数据
                                        string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);
                                        //Post数据,获得结果
                                        string  Ret = Utils.PostRequest(HFCash_Url, PostData, "utf-8");
                                        JObject JS  = new JObject();
                                        try
                                        {
                                            JS = (JObject)JsonConvert.DeserializeObject(Ret);
                                        }
                                        catch (Exception)
                                        {
                                            Utils.WriteLog("处理代付[" + p.TNum + "]!" + Ret, "CashPay");
                                            JS = null;
                                        }
                                        if (JS != null)
                                        {
                                            string resp = JS["resp"].ToString();
                                            Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                                            try
                                            {
                                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                                            }
                                            catch (Exception)
                                            {
                                                Utils.WriteLog("处理代付[" + p.TNum + "]!解密出错", "CashPay");
                                                JS = null;
                                            }
                                            if (JS != null)
                                            {
                                                string respcode = JS["respcode"].ToString();
                                                if (respcode == "00")
                                                {
                                                    string resultcode = JS["resultcode"].ToString();
                                                    if (resultcode == "0000")
                                                    {
                                                        p.UserState = 1;
                                                    }
                                                    else if (resultcode == "2002" || resultcode == "2003")
                                                    {
                                                        p.UserState = 2;
                                                    }
                                                    else
                                                    {
                                                        p.UserState = 3;
                                                    }
                                                }
                                                else
                                                {
                                                    string respmsg = JS["respmsg"].ToString();
                                                    Utils.WriteLog("处理代付[" + p.TNum + "]!" + respmsg, "CashPay");
                                                }
                                            }
                                        }
                                        //======================================
                                        PayLog PayLog = new PayLog();
                                        PayLog.PId     = FastPayWay.Id;
                                        PayLog.OId     = p.TNum;
                                        PayLog.TId     = "";
                                        PayLog.Amount  = 0;
                                        PayLog.Way     = "FASTDF";
                                        PayLog.AddTime = DateTime.Now;
                                        PayLog.Data    = Ret;
                                        PayLog.State   = 1;
                                        Entity.PayLog.AddObject(PayLog);
                                        //======================================
                                        Entity.SaveChanges();
                                        #endregion
                                    }
                                    if (FastPayWay.DllName == "HFJSPay")
                                    {
                                        #region 结算系统
                                        //不需要
                                        #endregion
                                    }
                                }
                                Log.WriteLog("处理代付[" + p.TNum + "]!", JobName);
                            }
                            else
                            {
                                Log.WriteLog("处理代付[" + p.TNum + "]!商户止付", JobName);
                            }
                        }
                        #endregion
                        //-------------------------------------------------------
                        Log.Write(JobName + "任务执行结束![共计" + List.Count + "条]");
                    }
                    catch (Exception Ex)
                    {
                        Log.Write(JobName + "任务执行过程出错!", Ex);
                    }
                    IsRun = false;
                }
                else
                {
                    Log.Write(JobName + "任务还在执行中!");
                }
            }
        }
Esempio n. 15
0
        public void Execute(IJobExecutionContext context)
        {
            string JobName = "FastQuery";
            string CanRun  = ConfigurationManager.AppSettings["Run" + JobName].ToString();

            if (CanRun == "true")
            {
                if (!IsRun)
                {
                    LokFuEntity Entity = new LokFuEntity();
                    IsRun = true;
                    try
                    {
                        Log.Write(JobName + "任务开始执行!");
                        //-------------------------------------------------------
                        #region 任务主体
                        //查询所有已支付但未代付订单
                        DateTime          STime = DateTime.Now.AddDays(-1);
                        DateTime          ETime = DateTime.Now.AddSeconds(-30);
                        IList <FastOrder> List  = Entity.FastOrder.Where(n => n.State == 1 && n.PayState == 1 && n.UserState == 3 && n.UserTime <ETime && n.UserTime> STime).ToList();
                        //UserState 0未付 1已付 2失败 3结果未明 4付起中
                        foreach (var p in List)
                        {
                            FastPayWay  FastPayWay  = Entity.FastPayWay.FirstOrDefault(n => n.Id == p.PayWay && n.State == 1);
                            FastUserPay FastUserPay = Entity.FastUserPay.FirstOrDefault(n => n.PayWay == p.PayWay && n.UId == p.UId);
                            if (FastPayWay != null)
                            {
                                string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
                                if (FastPayWay.DllName == "HFPay")
                                {
                                    #region 查代付结果
                                    if (PayConfigArr.Length == 3)
                                    {
                                        string HF_Url     = "https://api.zhifujiekou.com/api/qcashquery";
                                        string MerId      = PayConfigArr[0];
                                        string MerKey     = PayConfigArr[1];
                                        string orderId    = p.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  Ret      = Utils.PostRequest(HF_Url, PostData, "utf-8");
                                        JObject JS       = new JObject();
                                        try
                                        {
                                            JS = (JObject)JsonConvert.DeserializeObject(Ret);
                                        }
                                        catch (Exception)
                                        {
                                            JS = null;
                                        }
                                        if (JS != null)
                                        {
                                            if (JS["resp"] != null)
                                            {
                                                string resp = JS["resp"].ToString();
                                                Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                                                try
                                                {
                                                    JS = (JObject)JsonConvert.DeserializeObject(Ret);
                                                }
                                                catch (Exception)
                                                {
                                                    JS = null;
                                                }
                                                if (JS != null)
                                                {
                                                    string respcode = JS["respcode"].ToString();
                                                    if (respcode == "00")
                                                    {
                                                        string resultcode = JS["resultcode"].ToString();
                                                        if (resultcode == "0000")
                                                        {
                                                            p.UserState = 1;
                                                        }
                                                        else if (resultcode == "2002" || resultcode == "2003")
                                                        {
                                                            p.UserState = 2;
                                                        }
                                                        else
                                                        {
                                                        }
                                                        Entity.SaveChanges();
                                                    }
                                                }
                                            }
                                        }
                                        //================================================
                                        PayLog PayLog = new PayLog();
                                        PayLog.PId     = FastPayWay.Id;
                                        PayLog.OId     = p.TNum;
                                        PayLog.TId     = "";
                                        PayLog.Amount  = 0;
                                        PayLog.Way     = "FASTDFQ";
                                        PayLog.AddTime = DateTime.Now;
                                        PayLog.Data    = Ret;
                                        PayLog.State   = 1;
                                        Entity.PayLog.AddObject(PayLog);
                                        //================================================
                                        Entity.SaveChanges();
                                    }
                                    #endregion
                                }
                                if (FastPayWay.DllName == "HFJSPay")
                                {
                                    #region 结算系统
                                    //不需要
                                    fastordersqueryModel fastordersqueryModel = new fastordersqueryModel()
                                    {
                                        merid   = FastUserPay.MerId,
                                        orderid = "",
                                        queryid = p.TNum
                                    };
                                    fastordersqueryResult fastordersqueryResult = HFJSTools.fastordersquery(fastordersqueryModel, FastUserPay.MerKey);
                                    //================================================
                                    //记录通知信息
                                    PayLog PayLog = new PayLog();
                                    PayLog.PId     = p.PayWay.Value;
                                    PayLog.OId     = p.TNum;
                                    PayLog.TId     = fastordersqueryResult.queryid;
                                    PayLog.Amount  = p.Amoney;
                                    PayLog.Way     = "FASTDFQ";
                                    PayLog.AddTime = DateTime.Now;
                                    PayLog.Data    = HFJSTools.MyObjectToJson(fastordersqueryResult);
                                    PayLog.State   = 1;
                                    Entity.PayLog.AddObject(PayLog);
                                    Entity.SaveChanges();
                                    //================================================
                                    if (fastordersqueryResult.respcode == "00")
                                    {
                                        if (fastordersqueryResult.resultcode == "0000")
                                        {
                                            p.UserState = 1;
                                            Entity.SaveChanges();
                                        }
                                        if (fastordersqueryResult.resultcode == "1003")
                                        {
                                            p.UserState = 2;
                                            Entity.SaveChanges();
                                        }
                                    }
                                    else
                                    {
                                        string resp_desc = fastordersqueryResult.respmsg;
                                        Utils.WriteLog("HFJS[Query][" + p.TNum + "]:" + resp_desc, "JobHFJS");
                                    }
                                    #endregion
                                }
                            }
                            Log.WriteLog("查询代付[" + p.TNum + "]!", JobName);
                        }
                        #endregion
                        //-------------------------------------------------------
                        Log.Write(JobName + "任务执行结束![共计" + List.Count + "条]");
                    }
                    catch (Exception Ex)
                    {
                        Log.Write(JobName + "任务执行过程出错!", Ex);
                    }
                    IsRun = false;
                }
                else
                {
                    Log.Write(JobName + "任务还在执行中!");
                }
            }
        }
        public void Notice()
        {
            string Resp    = Request.Form["resp"];
            string Sign    = Request.Form["sign"];
            string SignStr = Resp;

            Resp = LokFuEncode.Base64Decode(Resp, "utf-8");
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Resp);
            }
            catch (Exception Ex)
            {
                Response.Write(Ex.ToString());
                return;
            }
            if (json == null)
            {
                Response.Write("Json Null");
                return;
            }
            string resultcode = json["resultcode"].ToString(); //交易结果码
            string resultmsg  = json["resultmsg"].ToString();  //交易结果信息
            string queryid    = json["queryid"].ToString();    //交易流水号
            string txnamt     = json["txnamt"].ToString();     //交易金额\
            string merid      = json["merid"].ToString();      //交易金额
            string orderid    = json["orderid"].ToString();    //交易金额

            Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == orderid);

            if (Orders == null)
            {
                Response.Write("E4");
                return;
            }
            PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == Orders.PayWay && n.State == 1);

            if (PayConfig == null)
            {
                Response.Write("E0");
                return;
            }
            string ConfigStr = PayConfig.QueryArray;

            string[] ConfigArr = ConfigStr.Split(',');
            string   merId     = ConfigArr[0];
            string   merKey    = ConfigArr[1];
            string   MD5Str    = SignStr + merKey;
            string   sign      = MD5Str.GetMD5();
            //================================================
            PayLog PayLog = new PayLog();

            PayLog.PId     = PayConfig.Id;
            PayLog.OId     = orderid;
            PayLog.TId     = queryid;
            PayLog.Amount  = decimal.Parse(txnamt) / 100;
            PayLog.Way     = "POST";
            PayLog.AddTime = DateTime.Now;
            PayLog.Data    = Request.Form.ToString();
            PayLog.State   = 1;
            Entity.PayLog.AddObject(PayLog);
            Entity.SaveChanges();
            //================================================
            if (Sign != sign)
            {
                Response.Write("E2");
                return;
            }
            if (merId != merid)
            {
                Response.Write("E1");
                return;
            }
            if (resultcode != "0000" && resultcode != "1002")
            {
                Response.Write("E3");
                return;
            }
            int factmoney = int.Parse(txnamt);

            if (((int)(Orders.Amoney * 100)) > factmoney)
            {
                Response.Write("E5");
                return;
            }
            Orders = Orders.PaySuccess(Entity);
            Response.Write("0000");
        }
        /// <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 ActionResult Result()
        {
            string Resp    = Request.QueryString["resp"];
            string Sign    = Request.QueryString["sign"];
            string SignStr = Resp;

            Resp = LokFuEncode.Base64Decode(Resp, "utf-8");
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Resp);
            }
            catch (Exception Ex)
            {
                ViewBag.ErrorMsg = Ex.ToString();
                return(View("Error"));
            }
            if (json == null)
            {
                ViewBag.ErrorMsg = "数据处理出错";
                return(View("Error"));
            }
            string resultcode = json["resultcode"].ToString(); //交易结果码
            string resultmsg  = json["resultmsg"].ToString();  //交易结果信息
            string queryid    = json["queryid"].ToString();    //交易流水号
            string txnamt     = json["txnamt"].ToString();     //交易金额\
            string merid      = json["merid"].ToString();      //交易金额
            string orderid    = json["orderid"].ToString();    //交易金额

            Orders Orders = Entity.Orders.FirstOrDefault(n => n.TNum == orderid);

            if (Orders == null)
            {
                ViewBag.ErrorMsg = "订单信息有误!";
                return(View("Error"));
            }
            PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == Orders.PayWay && n.State == 1);

            if (PayConfig == null)
            {
                ViewBag.ErrorMsg = "支付通道已关闭!";
                return(View("Error"));
            }
            string ConfigStr = PayConfig.QueryArray;

            string[] ConfigArr = ConfigStr.Split(',');
            string   merId     = ConfigArr[0];
            string   merKey    = ConfigArr[1];
            string   MD5Str    = SignStr + merKey;
            string   sign      = MD5Str.GetMD5();
            //================================================
            PayLog PayLog = new PayLog();

            PayLog.PId     = PayConfig.Id;
            PayLog.OId     = orderid;
            PayLog.TId     = queryid;
            PayLog.Amount  = decimal.Parse(txnamt) / 100;
            PayLog.Way     = "GET";
            PayLog.AddTime = DateTime.Now;
            PayLog.Data    = Request.QueryString.ToString();
            PayLog.State   = 1;
            Entity.PayLog.AddObject(PayLog);
            Entity.SaveChanges();
            //================================================
            if (Sign != sign)
            {
                ViewBag.ErrorMsg = "签名错误!";
                return(View("Error"));
            }
            if (merId != merid)
            {
                ViewBag.ErrorMsg = "商户号不一置!";
                return(View("Error"));
            }
            if (resultcode != "0000" && resultcode != "1002")
            {
                ViewBag.ErrorMsg = "支付失败![" + resultcode + "]" + resultmsg;
                return(View("Error"));
            }
            //string respMsg = resData["respMsg"];//应答信息
            //if (respMsg != "success")
            //{
            //    ViewBag.ErrorMsg = "支付失败![" + respMsg + "]";
            //    return View("Error");
            //}
            int factmoney = int.Parse(txnamt);

            if (((int)(Orders.Amoney * 100)) > factmoney)
            {
                ViewBag.ErrorMsg = "支付金额与交易金额不符!";
                return(View("Error"));
            }
            Orders         = Orders.PaySuccess(Entity);
            ViewBag.Orders = Orders;
            return(View("Success"));
        }
        public ActionResult Resubmit(FastOrder FastOrder)
        {
            //1. 接口配置校验与规则校验
            //2. 米刷当天校验与处理
            //3. 检查之前重出情况
            //4. 创建重出单
            //5. 重出

            //1. 接口配置校验与规则校验
            var p = this.Entity.FastOrder.FirstOrDefault(o => o.TNum == FastOrder.TNum);

            if (p.UserState != 2)
            {
                ViewBag.ErrorMsg = "只有用户结算失败才能使用该功能";
                return(View("Error"));
            }
            var FastUser    = Entity.FastUser.FirstOrDefault(o => o.UId == p.UId);
            var FastPayWay  = this.Entity.FastPayWay.FirstOrDefault(o => o.Id == p.PayWay);
            var FastUserPay = Entity.FastUserPay.FirstOrDefault(o => o.PayWay == p.PayWay && o.CardState == 1 && o.UId == p.UId);

            if (FastPayWay == null)
            {
                ViewBag.ErrorMsg = "未能找到相关通道";
                return(View("Error"));
            }
            if (FastUserPay == null)
            {
                ViewBag.ErrorMsg = "用户银行卡未绑定或未通过第三方验证";
                return(View("Error"));
            }
            if (!AllowFastPayWay.Contains(FastPayWay.DllName))
            {
                ViewBag.ErrorMsg = "不支持相关通道";
                return(View("Error"));
            }


            //2. 米刷当天校验与处理
            var Today    = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
            var OrderDay = new DateTime(p.PayTime.Value.Year, p.PayTime.Value.Month, p.PayTime.Value.Day, 0, 0, 0);

            if ((FastPayWay.DllName == "MiPay" || FastPayWay.DllName == "MiShua") && Today != OrderDay)
            {
                ViewBag.Msg       = "请确认接口方是否出款成功?";
                ViewBag.ActionUrl = this.Url.Action("Resubmit", new { TNum = p.TNum, IsAjax = 1 });
                return(View("Confirm"));
            }

            //3. 检查之前重出情况
            var LastFastOrderChange = Entity.FastOrderChange.OrderByDescending(o => o.Id).FirstOrDefault(o => o.TNum == FastOrder.TNum);//最后一次重出

            if (LastFastOrderChange != null)
            {
                if (LastFastOrderChange.State == 1)
                {
                    ViewBag.ErrorMsg = "重新出款已成功";
                    return(View("Error"));
                }
                else if (LastFastOrderChange.State != 2)
                {
                    ViewBag.ErrorMsg = "已重新出款,请同步用户结算状态";
                    return(View("Error"));
                }
            }

            //4. 创建重出单
            var count           = Entity.FastOrderChange.Count(o => o.TNum == p.TNum); //重出次数
            var FastOrderChange = new FastOrderChange()                                //新重出单
            {
                TNum      = p.TNum,
                STNum     = p.TNum + "_" + (count + 1).ToString(),
                AddTime   = DateTime.Now,
                AdminId   = AdminUser.Id,
                AdminName = AdminUser.TrueName,
                State     = 0,
            };

            //4.1更新成最新的绑卡信息
            p.Card     = FastUserPay.Card;
            p.Bin      = FastUserPay.Bin;
            p.Bank     = FastUserPay.Bank;
            p.CardName = FastUserPay.CardName;

            string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
            if (FastPayWay.DllName == "HFPay")
            {
                #region
                var    TNum       = FastOrderChange.STNum;
                string HFCash_Url = "https://api.zhifujiekou.com/api/qcashgateway";

                //不需要
                string PayPath   = ConfigurationManager.AppSettings["PayPath"].ToString();
                string NoticeUrl = PayPath + "/PayCenter/HFCash/FastNotice.html";

                //提交结算中心
                string merId  = PayConfigArr[0];                       //商户号
                string merKey = PayConfigArr[1];                       //商户密钥

                string orderId = TNum;                                 //商户流水号

                string OrderMoney = (p.PayMoney * 100).ToString("F0"); //金额,以分为单

                string UserCardId = FastUser.CardId;
                string PostJson   = "{\"action\":\"QCash\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\",\"bin\":\"" + p.Bin + "\",\"accno\":\"" + p.Card + "\",\"accname\":\"" + p.CardName + "\",\"cardno\":\"" + UserCardId + "\"}";

                //传送数据Base64
                string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                //获得签名
                string Sign = (DataBase64 + merKey).GetMD5();
                //传送数据UrlEnCode
                DataBase64 = HttpUtility.UrlEncode(DataBase64);
                //组装Post数据
                string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);
                //Post数据,获得结果
                string Ret = Utils.PostRequest(HFCash_Url, PostData, "utf-8");

                JObject JS = new JObject();
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(Ret);
                }
                catch (Exception)
                {
                    Utils.WriteLog("处理代付[" + p.TNum + "]!" + Ret, "CashPay");
                    JS = null;
                }
                if (JS != null)
                {
                    string resp = JS["resp"].ToString();
                    Ret = LokFuEncode.Base64Decode(resp, "utf-8");

                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception)
                    {
                        Utils.WriteLog("处理代付[" + p.TNum + "]!解密出错", "CashPay");
                        JS = null;
                    }
                    if (JS != null)
                    {
                        string respcode = JS["respcode"].ToString();
                        if (respcode == "00")
                        {
                            string resultcode = JS["resultcode"].ToString();
                            if (resultcode == "0000")
                            {
                                p.UserState           = 1;
                                FastOrderChange.State = 1;
                            }
                            else if (resultcode == "2002" || resultcode == "2003")
                            {
                                p.UserState           = 2;
                                FastOrderChange.State = 2;
                            }
                            else
                            {
                                p.UserState           = 3;
                                FastOrderChange.State = 3;
                            }
                            //======================================
                            PayLog PayLog = new PayLog();
                            PayLog.PId     = FastPayWay.Id;
                            PayLog.OId     = TNum;
                            PayLog.TId     = "";
                            PayLog.Amount  = 0;
                            PayLog.Way     = "FASTDF";
                            PayLog.AddTime = DateTime.Now;
                            PayLog.Data    = Ret;
                            PayLog.State   = 1;
                            Entity.PayLog.AddObject(PayLog);
                            //======================================
                            FastOrderChange.Data = Ret;
                            Entity.FastOrderChange.AddObject(FastOrderChange);
                            Entity.SaveChanges();
                        }
                        else
                        {
                            string message = JS["respmsg"].ToString();
                            //p.UserState = 0;//提交的时候报错,可重新提交
                            //p.Remark = message;
                            ViewBag.ErrorMsg = message;
                            return(View("Error"));
                        }
                    }
                    else
                    {
                        ViewBag.ErrorMsg = "接口服务器无响应";
                        return(View("Error"));
                    }
                }
                #endregion
            }
            if (p.UserState == 1)
            {
                ViewBag.Msg = "订单已成功重新出款";
                return(View("Succeed"));
            }
            else
            {
                ViewBag.ErrorMsg = "订单重新出款暂未成功,请稍后同步用户结算状态";
                return(View("Error"));
            }
        }
Esempio 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("[FastOrderController]:", "【Data】" + Data, Ex);
                json = null;
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }

            FastOrder InFastOrder = new FastOrder();

            InFastOrder = JsonToObject.ConvertJsonToModel(InFastOrder, json);

            UserTrack UserTrack = new UserTrack();

            UserTrack = JsonToObject.ConvertJsonToModel(UserTrack, json);

            if (InFastOrder.Id == 99999)
            {
                DataObj.Msg = "当前通道维护中,建议您开通收款到银行卡功能,享受更多收款通道";
                DataObj.OutError("1000");
                return;
            }

            if (InFastOrder.CashType.IsNullOrEmpty())
            {
                InFastOrder.CashType = "D0";
                //DataObj.OutError("1000");
                //return;
            }
            decimal Amount = InFastOrder.Amoney;
            byte    payway = InFastOrder.OType;

            if (Amount <= 0)
            {
                DataObj.OutError("1000");
                return;
            }
            if (payway != 1 && payway != 2 && payway != 3)
            {
                DataObj.Msg = "你当前版本不支持该交易,请等待新版本发布及升级!";
                DataObj.OutError("1000");
                return;
            }

            Users Users = Entity.Users.FirstOrDefault(n => n.Token == InFastOrder.Token);

            #region 用户
            if (Users == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (Users.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (Users.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (Amount.IsNullOrEmpty() || payway.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }
            #endregion

            FastUser FastUser = Entity.FastUser.FirstOrDefault(o => o.UId == Users.Id);
            if (FastUser == null)
            {
                DataObj.OutError("2070");
                return;
            }
            #region 取通道
            IList <FastPayWay> FastPayWayList = null;
            if (InFastOrder.Id.IsNullOrEmpty())
            {
                //这是旧逻辑,有一些旧版还在用
                if (payway == 1)
                {
                    FastPayWayList = Entity.FastPayWay.Where(n => n.State == 1 && n.SNum2 < Amount && n.ENum2 >= Amount && n.HasAliPay == 1).OrderBy(n => n.Sort).ToList();
                }
                else if (payway == 2)
                {
                    FastPayWayList = Entity.FastPayWay.Where(n => n.State == 1 && n.SNum < Amount && n.ENum >= Amount && n.HasWeiXin == 1).OrderBy(n => n.Sort).ToList();
                }
                else if (payway == 3)
                {
                    FastPayWayList = Entity.FastPayWay.Where(n => n.State == 1 && n.BankSNum < Amount && n.BankENum >= Amount && n.HasBank == 1).OrderBy(n => n.Sort).ToList();
                }
                else
                {
                    DataObj.OutError("1000");
                    return;
                }
            }
            else
            {
                var query = Entity.FastPayWay.Where(n => n.Id == InFastOrder.Id && n.State == 1);
                if (payway == 1)
                {
                    query = query.Where(o => o.HasAliPay == 1 && o.SNum2 <= Amount && o.ENum2 >= Amount);
                }
                else if (payway == 2)
                {
                    query = query.Where(o => o.HasWeiXin == 1 && o.SNum <= Amount && o.ENum >= Amount);
                }
                else if (payway == 3)
                {
                    query = query.Where(o => o.HasBank == 1 && o.BankSNum <= Amount && o.BankENum >= Amount);
                }
                FastPayWayList = query.ToList();
            }
            #endregion
            if (FastPayWayList.Count < 1)
            {
                DataObj.OutError("2079");
                return;
            }
            #region 通道验证及商户进件信息验证
            FastPayWay         FastPayWay  = null;
            FastUserPay        FastUserPay = null;
            IList <FastPayWay> PayWayList  = new List <FastPayWay>();
            foreach (var p in FastPayWayList)
            {
                if (p.TimeType == 1)//限制时间,模式1
                {
                    DateTime STime    = p.STime;
                    DateTime ETime    = p.ETime;
                    DateTime NowSTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + STime.ToString("HH:mm:ss"));
                    DateTime NowETime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + ETime.ToString("HH:mm:ss"));
                    if (NowSTime <= DateTime.Now && DateTime.Now <= NowETime)
                    {
                        //当前时间允许交易
                        PayWayList.Add(p);
                    }
                }
                else
                {
                    PayWayList.Add(p);
                }
            }
            if (PayWayList.Count < 1)
            {
                DataObj.OutError("2071");
                return;
            }
            foreach (var p in PayWayList)
            {
                FastUserPay temp = Entity.FastUserPay.FirstOrDefault(n => n.UId == Users.Id && n.PayWay == p.Id && n.MerState == 1 && n.CardState == 1 && n.BusiState == 1);
                if (temp != null)
                {
                    FastPayWay  = p;
                    FastUserPay = temp;
                    break;
                }
            }
            if (FastUserPay == null)
            {
                DataObj.OutError("2072");
                return;
            }
            if (FastPayWay == null)
            {
                DataObj.OutError("2073");
                return;
            }
            #endregion
            string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
            #region 验证配置
            if (FastPayWay.DllName == "HFPay")
            {
                if (PayConfigArr.Length != 3)
                {
                    DataObj.OutError("2074");
                    return;
                }
            }
            if (FastPayWay.DllName == "HFJSPay")
            {
                if (PayConfigArr.Length != 3)
                {
                    DataObj.OutError("2074");
                    return;
                }
            }
            #endregion

            decimal UserCost  = 0;//用户
            decimal BankCost  = 0;
            decimal BankMin   = 0;
            decimal BankMax   = 0;
            decimal AgentCost = 0; //代理
            if (payway == 1)
            {                      //支付宝
                UserCost  = FastUserPay.UserCost2;
                BankCost  = FastPayWay.BankCost2;
                BankMin   = FastPayWay.MinCost2;
                BankMax   = FastPayWay.MaxCost2;
                AgentCost = FastPayWay.Cost2;
            }
            if (payway == 2)//微信
            {
                UserCost  = FastUserPay.UserCost;
                BankCost  = FastPayWay.BankCost;
                BankMin   = FastPayWay.MinCost;
                BankMax   = FastPayWay.MaxCost;
                AgentCost = FastPayWay.Cost;
            }
            if (payway == 3)//银联
            {
                UserCost  = FastUserPay.UserCost3;
                BankCost  = FastPayWay.BankCost3;
                BankMin   = FastPayWay.MinCost3;
                BankMax   = FastPayWay.MaxCost3;
                AgentCost = FastPayWay.Cost3;
            }
            #region 创建交易
            //=======================生成订单===========================
            SysAgent         SysAgent     = Entity.SysAgent.FirstOrNew(n => n.Id == Users.Agent);
            IList <SysAgent> SysAgentList = SysAgent.GetAgentsById(Entity);
            SysAgent         TopAgent     = SysAgentList.FirstOrNew();

            FastOrder FastOrder = new FastOrder();
            FastOrder.ComeWay = 1;
            FastOrder.UId     = Users.Id;
            FastOrder.Agent   = SysAgent.Id;

            FastOrder.PayId = string.Empty;

            FastOrder.OType    = payway;
            FastOrder.PayWay   = FastPayWay.Id;
            FastOrder.CashType = InFastOrder.CashType;
            FastOrder.Amoney   = Amount;

            //用户手续费
            decimal Poundage = Amount * UserCost + FastUserPay.UserCash;
            Poundage           = Poundage.Ceiling();
            FastOrder.Poundage = Poundage;
            //用户最终金额
            FastOrder.PayMoney = FastOrder.Amoney - FastOrder.Poundage;

            if (FastOrder.PayMoney < 0)
            {
                DataObj.OutError("2076");
                return;
            }
            FastOrder.UserRate  = UserCost;
            FastOrder.AgentRate = AgentCost;
            FastOrder.SysRate   = BankCost;
            FastOrder.UserCash  = FastUserPay.UserCash;
            FastOrder.SysCash   = FastPayWay.Cash;
            FastOrder.SameGet   = 0;
            //计算手续费差
            SysMoneySet SysMoneySet = Entity.SysMoneySet.FirstOrNew();
            decimal     PaySplit    = 0;//代理商费率
            PaySplit = SysAgent.GetSplit(TopAgent.Tier, Entity);
            decimal PayGet = Amount * PaySplit;
            PayGet = PayGet.Floor();
            //一级代理利润
            decimal AgentPayGet = PayGet;
            AgentPayGet           = AgentPayGet.Floor();
            FastOrder.AgentPayGet = 0;
            string  AgentPath = "|";
            string  Split     = "|";
            decimal MyGet     = PayGet;
            foreach (var p in SysAgentList)
            {
                PaySplit   = SysAgent.GetSplit(p.Tier, Entity);
                AgentPath += p.Id + "|";
                MyGet      = Amount * PaySplit;//各级代理分润
                MyGet      = MyGet.Floor();
                Split     += MyGet.ToString("F2") + "|";
            }
            FastOrder.AgentPath = AgentPath;
            FastOrder.Split     = Split;

            decimal BankMoney = Amount * BankCost;
            if (BankMoney < BankMin)
            {
                BankMoney = BankMin;
            }
            if (BankMoney > BankMax)
            {
                BankMoney = BankMax;
            }
            BankMoney = BankMoney.Floor();
            //用户手续费(含代付手续费)-代付分润-银行手续费-银行代付成本
            decimal HFGet = Poundage - AgentPayGet - BankMoney - FastPayWay.Cash;
            FastOrder.HFGet = HFGet;

            FastOrder.State   = 1;
            FastOrder.AddTime = DateTime.Now;

            FastOrder.PayState   = 0;
            FastOrder.AgentState = 0;
            FastOrder.UserState  = 0;

            FastOrder.CardName = FastUserPay.CardName;
            FastOrder.Bank     = FastUserPay.Bank;
            FastOrder.Card     = FastUserPay.Card;
            FastOrder.Bin      = FastUserPay.Bin;

            Entity.FastOrder.AddObject(FastOrder);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, FastOrder);
            #endregion

            //=======================================
            UserTrack.ENo      = DataObj.ENo;
            UserTrack.OPType   = "到银行卡交易";
            UserTrack.UserName = FastOrder.TNum;
            UserTrack.UId      = FastOrder.UId;
            UserTrack.SeavGPSLog(Entity);
            //=======================================

            //=======================分润记录===========================
            MyGet = PayGet;
            int tier = 1;
            foreach (var p in SysAgentList)
            {
                PaySplit = SysAgent.GetSplit(p.Tier, Entity);
                MyGet    = Amount * PaySplit;//各级代理分润
                MyGet    = MyGet.Floor();
                FastSplit FastSplit = new FastSplit();
                FastSplit.Tnum    = FastOrder.TNum;
                FastSplit.Profit  = MyGet;
                FastSplit.AgentId = p.Id;
                FastSplit.Tier    = p.Tier;
                FastSplit.AddTime = DateTime.Now;
                Entity.FastSplit.AddObject(FastSplit);
                tier++;
            }
            Entity.SaveChanges();
            //=======================请求接口开始===========================
            if (FastOrder.OType == 1 || FastOrder.OType == 2)
            {
                if (FastPayWay.DllName == "HFPay")
                {
                    string NoticeUrl = NoticePath + "/PayCenter/HFPay/FastNotice.html";//后台通过地址
                    #region 微信&支付宝
                    string Action = "";
                    if (FastOrder.OType == 1)
                    {
                        Action = "AliSao";
                    }
                    else if (FastOrder.OType == 2)
                    {
                        Action = "WxSao";
                    }
                    //提交结算中心
                    string merId  = PayConfigArr[0]; //商户号
                    string merKey = PayConfigArr[1]; //商户密钥
                    string PayWay = PayConfigArr[2]; //绑定通道

                    decimal money      = FastOrder.Amoney * 100;
                    string  OrderMoney = money.ToString("F0");//金额,以分为单

                    string PostJson = "{\"action\":\"" + Action + "\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"payway\":\"" + PayWay + "\",\"orderid\":\"" + FastOrder.TNum + "\",\"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";

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

                    JObject JS = new JObject();
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception)
                    {
                        FastOrder.State  = 0;
                        FastOrder.Remark = "数据请求出错";
                        Entity.SaveChanges();
                        JS = null;
                    }
                    if (JS != null)
                    {
                        string resp = JS["resp"].ToString();
                        Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                        try
                        {
                            JS = (JObject)JsonConvert.DeserializeObject(Ret);
                        }
                        catch (Exception Ex)
                        {
                            FastOrder.State  = 0;
                            FastOrder.Remark = "JSON加载出错";
                            Entity.SaveChanges();
                            JS = null;
                        }
                        if (JS != null)
                        {
                            string respcode = JS["respcode"].ToString();
                            if (respcode != "00")
                            {
                                string respmsg = JS["respmsg"].ToString();
                                FastOrder.State  = 0;
                                FastOrder.Remark = respmsg;
                                Entity.SaveChanges();
                            }
                            else
                            {
                                if (JS["formaction"] == null)
                                {
                                    FastOrder.State  = 0;
                                    FastOrder.Remark = "接口没有返回二维码";
                                    Entity.SaveChanges();
                                }
                                else
                                {
                                    string BankNum = JS["queryid"].ToString();
                                    string qr_code = JS["formaction"].ToString();
                                    FastOrder.PayId = qr_code;
                                    FastOrder.Trade = BankNum;
                                    Entity.SaveChanges();
                                }
                            }
                        }
                    }
                    #endregion
                }
            }
            else if (FastOrder.OType == 3)
            {
                if (FastPayWay.DllName == "HFPay" || FastPayWay.DllName == "HFJSPay")
                {
                    #region
                    //银联不用请求第三方,直接生成链接
                    FastOrder.PayId = PayPath + "/paycenter/pay-" + FastOrder.Id + ".html?sign=" + ((FastOrder.Id * 100 + 99) + "Pay").GetMD5().Substring(8, 8);
                    Entity.SaveChanges();
                    #endregion
                }
            }
            if (FastOrder.State == 1)
            {
                if (FastOrder.PayState == 1)
                {
                    if (FastOrder.UserState == 1)
                    {
                        FastOrder.State = 3;
                    }
                    else
                    {
                        FastOrder.State = 2;
                    }
                }
                else
                {
                    FastOrder.State = 1;
                }
            }
            else
            {
                FastOrder.State = 0;
                DataObj.OutError("1005");
                return;
            }
            FastOrder.Cols = "TNum,PayId,Amoney,Poundage,State";

            DataObj.Data = FastOrder.OutJson();
            DataObj.Code = "0000";
            DataObj.OutString();
        }
        /// <summary>
        /// 同步重新出款用户结算状态
        /// </summary>
        public ActionResult ResubmitSyncUserState(string STNum)
        {
            var FastOrderChange = Entity.FastOrderChange.FirstOrDefault(o => o.STNum == STNum);

            if (FastOrderChange == null)
            {
                ViewBag.ErrorMsg = "重新出款单不存在";
                return(View("Error"));
            }
            if (FastOrderChange.State != 2)
            {
                ViewBag.ErrorMsg = "只有用户结算失败才能使用该功能";
                return(View("Error"));
            }
            FastOrder FastOrder = Entity.FastOrder.FirstOrDefault(o => o.TNum == FastOrderChange.TNum);

            if (FastOrder == null)
            {
                ViewBag.ErrorMsg = "订单不存在";
                return(View("Error"));
            }
            string OldUserState = FastOrder.GetUserClearingState();

            FastPayWay  FastPayWay  = Entity.FastPayWay.FirstOrDefault(n => n.Id == FastOrder.PayWay);
            FastUserPay FastUserPay = Entity.FastUserPay.FirstOrDefault(n => n.PayWay == FastOrder.PayWay && n.UId == FastOrder.UId && n.CardState == 1);

            if (FastPayWay != null)
            {
                string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
                if (FastPayWay.DllName == "HFPay")
                {
                    string TNum = FastOrderChange.STNum;
                    #region
                    string HFCash_Url = "https://api.zhifujiekou.com/api/qcashgateway";

                    //不需要
                    string PayPath   = ConfigurationManager.AppSettings["PayPath"].ToString();
                    string NoticeUrl = PayPath + "/PayCenter/HFCash/FastNotice.html";

                    //提交结算中心
                    string merId  = PayConfigArr[0];                               //商户号
                    string merKey = PayConfigArr[1];                               //商户密钥

                    string orderId = TNum;                                         //商户流水号

                    string OrderMoney = (FastOrder.PayMoney * 100).ToString("F0"); //金额,以分为单

                    FastUser FastUser   = Entity.FastUser.FirstOrNew(n => n.UId == FastOrder.UId);
                    string   UserCardId = FastUser.CardId;
                    string   PostJson   = "{\"action\":\"QCash\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"orderid\":\"" + orderId + "\",\"backurl\":\"" + NoticeUrl + "\",\"bin\":\"" + FastOrder.Bin + "\",\"accno\":\"" + FastOrder.Card + "\",\"accname\":\"" + FastOrder.CardName + "\",\"cardno\":\"" + UserCardId + "\"}";

                    //传送数据Base64
                    string DataBase64 = LokFuEncode.Base64Encode(PostJson, "utf-8");
                    //获得签名
                    string Sign = (DataBase64 + merKey).GetMD5();
                    //传送数据UrlEnCode
                    DataBase64 = HttpUtility.UrlEncode(DataBase64);
                    //组装Post数据
                    string PostData = string.Format("req={0}&sign={1}", DataBase64, Sign);
                    //Post数据,获得结果
                    string Ret = Utils.PostRequest(HFCash_Url, PostData, "utf-8");

                    JObject JS = new JObject();
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception)
                    {
                        Utils.WriteLog("处理代付[" + FastOrder.TNum + "]!" + Ret, "CashPay");
                        JS = null;
                    }
                    if (JS != null)
                    {
                        string resp = JS["resp"].ToString();
                        Ret = LokFuEncode.Base64Decode(resp, "utf-8");

                        try
                        {
                            JS = (JObject)JsonConvert.DeserializeObject(Ret);
                        }
                        catch (Exception Ex)
                        {
                            FastOrder.UserState = 0;//提交的时候报错,可重新提交
                            JS = null;
                            Utils.WriteLog("[CashPay]:JSON[" + Ret + "]" + Ex.ToString(), "FastOrder");
                            ViewBag.ErrorMsg = "返回数据错误";
                            return(View("Error"));
                        }
                        if (JS != null)
                        {
                            string respcode = JS["respcode"].ToString();
                            if (respcode == "00")
                            {
                                string resultcode = JS["resultcode"].ToString();
                                if (resultcode == "0000")
                                {
                                    FastOrder.UserState   = 1;
                                    FastOrderChange.State = 1;
                                }
                                else if (resultcode == "2002" || resultcode == "2003")
                                {
                                    FastOrder.UserState   = 2;
                                    FastOrderChange.State = 2;
                                }
                                else
                                {
                                    FastOrder.UserState   = 3;
                                    FastOrderChange.State = 3;
                                }
                                //======================================
                                PayLog PayLog = new PayLog();
                                PayLog.PId     = FastPayWay.Id;
                                PayLog.OId     = TNum;
                                PayLog.TId     = "";
                                PayLog.Amount  = 0;
                                PayLog.Way     = "FASTDF";
                                PayLog.AddTime = DateTime.Now;
                                PayLog.Data    = Ret;
                                PayLog.State   = 1;
                                Entity.PayLog.AddObject(PayLog);
                                //======================================
                                FastOrderChange.Data = Ret;
                                Entity.FastOrderChange.AddObject(FastOrderChange);
                                Entity.SaveChanges();
                            }
                        }
                    }
                    #endregion
                }
            }
            if (FastOrder.UserState == 1)
            {
                ViewBag.Msg = "订单已成功重新出款";
                return(View("Succeed"));
            }
            else
            {
                string NewUserState = FastOrder.GetUserClearingState();
                ViewBag.ErrorMsg = "用户结算状态从" + OldUserState + "->" + NewUserState;
                return(View("Error"));
            }
        }
        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();
            }
        }
        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"));
            }
            if (payway.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "请选择支付方式!";
                return(View("Error"));
            }
            if (payway == 3 && shopid != 26)
            {
                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"));
            }
            ViewBag.Users = Users;
            if (Amount <= 0)
            {
                ViewBag.ErrorMsg = "付款金额有误![00]";
                return(View("Error"));
            }
            IList <FastPayWay> FastPayWayList = null;

            if (payway == 1)
            {
                FastPayWayList = Entity.FastPayWay.Where(n => n.State == 1 && n.SNum2 < Amount && n.ENum2 >= Amount && n.HasAliPay == 1).OrderBy(n => n.Sort).ToList();
            }
            else if (payway == 2)
            {
                FastPayWayList = Entity.FastPayWay.Where(n => n.State == 1 && n.SNum < Amount && n.ENum >= Amount && n.HasWeiXin == 1).OrderBy(n => n.Sort).ToList();
            }
            else
            {
                ViewBag.ErrorMsg = "支付方式有误!";
                return(View("Error"));
            }
            if (FastPayWayList.Count < 1)
            {
                ViewBag.ErrorMsg = "当前没有可用的渠道!";
                return(View("Error"));
            }
            FastPayWay         FastPayWay  = null;
            FastUserPay        FastUserPay = null;
            IList <FastPayWay> PayWayList  = new List <FastPayWay>();

            foreach (var p in FastPayWayList)
            {
                if (p.TimeType == 1)//限制时间,模式1
                {
                    DateTime STime    = p.STime;
                    DateTime ETime    = p.ETime;
                    DateTime NowSTime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + STime.ToString("HH:mm:ss"));
                    DateTime NowETime = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd") + " " + ETime.ToString("HH:mm:ss"));
                    if (NowSTime <= DateTime.Now && DateTime.Now <= NowETime)
                    {
                        //当前时间允许交易
                        PayWayList.Add(p);
                    }
                }
                else
                {
                    PayWayList.Add(p);
                }
            }
            if (PayWayList.Count < 1)
            {
                ViewBag.ErrorMsg = "请在可交易时间内进行交易!";
                return(View("Error"));
            }
            foreach (var p in PayWayList)
            {
                FastUserPay temp = Entity.FastUserPay.FirstOrDefault(n => n.UId == Users.Id && n.PayWay == p.Id && n.MerState == 1 && n.CardState == 1);
                if (temp != null)
                {
                    FastPayWay  = p;
                    FastUserPay = temp;
                    break;
                }
            }
            if (FastUserPay == null)
            {
                ViewBag.ErrorMsg = "渠道未开通!";
                return(View("Error"));
            }
            if (FastPayWay == null)
            {
                ViewBag.ErrorMsg = "通道未开通!";
                return(View("Error"));
            }
            decimal UserCost  = 0;//用户
            decimal BankCost  = 0;
            decimal BankMin   = 0;
            decimal BankMax   = 0;
            decimal AgentCost = 0; //代理

            if (payway == 1)       //支付宝
            {
                UserCost  = FastUserPay.UserCost2;
                BankCost  = FastPayWay.BankCost2;
                BankMin   = FastPayWay.MinCost2;
                BankMax   = FastPayWay.MaxCost2;
                AgentCost = FastPayWay.Cost2;
            }
            if (payway == 2)//微信
            {
                UserCost  = FastUserPay.UserCost;
                BankCost  = FastPayWay.BankCost;
                BankMin   = FastPayWay.MinCost;
                BankMax   = FastPayWay.MaxCost;
                AgentCost = FastPayWay.Cost;
            }
            if (payway == 3)//银联
            {
                UserCost  = FastUserPay.UserCost3;
                BankCost  = FastPayWay.BankCost3;
                BankMin   = FastPayWay.MinCost3;
                BankMax   = FastPayWay.MaxCost3;
                AgentCost = FastPayWay.Cost3;
            }
            //=======================生成订单===========================
            SysAgent         SysAgent     = Entity.SysAgent.FirstOrNew(n => n.Id == Users.Agent);
            IList <SysAgent> SysAgentList = SysAgent.GetAgentsById(Entity);
            SysAgent         TopAgent     = SysAgentList.FirstOrNew(n => n.Tier == 1);

            FastOrder FastOrder = new FastOrder();

            FastOrder.ComeWay = 2;
            FastOrder.UId     = Users.Id;
            FastOrder.Agent   = SysAgent.Id;

            FastOrder.PayId = string.Empty;

            FastOrder.OType    = payway;
            FastOrder.PayWay   = FastPayWay.Id;
            FastOrder.CashType = FastPayWay.GroupType;
            FastOrder.Amoney   = Amount;

            //用户手续费
            decimal Poundage = Amount * UserCost + FastUserPay.UserCash;

            Poundage           = Poundage.Ceiling();
            FastOrder.Poundage = Poundage;
            //用户最终金额
            FastOrder.PayMoney = FastOrder.Amoney - FastOrder.Poundage;

            if (FastOrder.PayMoney < 0)
            {
                ViewBag.ErrorMsg = "结算金额出现负数!";
                return(View("Error"));
            }

            FastOrder.UserRate = UserCost;

            FastOrder.AgentRate = AgentCost;
            FastOrder.SysRate   = BankCost;

            FastOrder.UserCash = FastUserPay.UserCash;
            FastOrder.SysCash  = FastPayWay.Cash;

            //计算手续费差
            decimal PayGet = Amount * (UserCost - AgentCost);

            PayGet = PayGet.Floor();
            //一级代理利润
            decimal AgentPayGet = PayGet * (decimal)TopAgent.PayGet;

            AgentPayGet = AgentPayGet.Floor();

            FastOrder.AgentPayGet = AgentPayGet;

            string  AgentPath = "|";
            string  Split     = "|";
            decimal MyGet     = PayGet;

            foreach (var p in SysAgentList)
            {
                AgentPath += p.Id + "|";
                MyGet      = MyGet * (decimal)p.PayGet;//各级代理分润
                MyGet      = MyGet.Floor();
                Split     += MyGet.ToString("F2") + "|";
            }
            FastOrder.AgentPath = AgentPath;
            FastOrder.Split     = Split;

            decimal BankMoney = Amount * BankCost;

            if (BankMoney < BankMin)
            {
                BankMoney = BankMin;
            }
            if (BankMoney > BankMax)
            {
                BankMoney = BankMax;
            }
            //用户手续费(含代付手续费)-代付分润-银行手续费-银行代付成本
            decimal HFGet = Poundage - AgentPayGet - BankMoney - FastPayWay.Cash;

            FastOrder.HFGet = HFGet;

            FastOrder.State   = 1;
            FastOrder.AddTime = DateTime.Now;

            FastOrder.PayState   = 0;
            FastOrder.AgentState = 0;
            FastOrder.UserState  = 0;

            FastOrder.CardName = FastUserPay.CardName;
            FastOrder.Bank     = FastUserPay.Bank;
            FastOrder.Card     = FastUserPay.Card;
            FastOrder.Bin      = FastUserPay.Bin;

            Entity.FastOrder.AddObject(FastOrder);
            Entity.SaveChanges();
            Entity.Refresh(RefreshMode.StoreWins, FastOrder);
            //=======================分润记录===========================
            MyGet = PayGet;
            foreach (var p in SysAgentList)
            {
                MyGet = MyGet * (decimal)p.PayGet;//各级代理分润
                MyGet = MyGet.Floor();
                FastSplit FastSplit = new FastSplit();
                FastSplit.Tnum    = FastOrder.TNum;
                FastSplit.Profit  = MyGet;
                FastSplit.AgentId = p.Id;
                FastSplit.Tier    = p.Tier;
                FastSplit.AddTime = DateTime.Now;
                Entity.FastSplit.AddObject(FastSplit);
            }
            Entity.SaveChanges();
            //RespObj.queryId = Orders.TNum;
            string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
            //=======================请求接口开始===========================
            if (FastPayWay.DllName == "HFPay")
            {
                string NoticeUrl = NoticePath + "/PayCenter/HFPay/FastNotice.html";//后台通过地址
                #region 微信&支付宝
                string Action = "";
                if (FastOrder.OType == 1)
                {
                    Action = "AliSao";
                }
                else if (FastOrder.OType == 2)
                {
                    Action = "WxSao";
                }
                //提交结算中心
                string merId  = PayConfigArr[0]; //商户号
                string merKey = PayConfigArr[1]; //商户密钥
                string PayWay = PayConfigArr[2]; //绑定通道

                decimal money      = FastOrder.Amoney * 100;
                string  OrderMoney = money.ToString("F0");//金额,以分为单

                string PostJson = "{\"action\":\"" + Action + "\",\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + merId + "\",\"payway\":\"" + PayWay + "\",\"orderid\":\"" + FastOrder.TNum + "\",\"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";

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

                JObject JS = new JObject();
                try
                {
                    JS = (JObject)JsonConvert.DeserializeObject(Ret);
                }
                catch (Exception)
                {
                    FastOrder.State  = 0;
                    FastOrder.Remark = "数据请求出错";
                    Entity.SaveChanges();
                    JS = null;
                }
                if (JS != null)
                {
                    string resp = JS["resp"].ToString();
                    Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception Ex)
                    {
                        FastOrder.State  = 0;
                        FastOrder.Remark = "JSON加载出错";
                        Entity.SaveChanges();
                        JS = null;
                    }
                    if (JS != null)
                    {
                        string respcode = JS["respcode"].ToString();
                        if (respcode != "00")
                        {
                            string respmsg = JS["respmsg"].ToString();
                            FastOrder.State  = 0;
                            FastOrder.Remark = respmsg;
                            Entity.SaveChanges();
                        }
                        else
                        {
                            if (JS["formaction"] == null)
                            {
                                FastOrder.State  = 0;
                                FastOrder.Remark = "接口没有返回二维码";
                                Entity.SaveChanges();
                            }
                            else
                            {
                                string BankNum = JS["queryid"].ToString();
                                string qr_code = JS["formaction"].ToString();
                                FastOrder.PayId = qr_code;
                                FastOrder.Trade = BankNum;
                                Entity.SaveChanges();
                            }
                        }
                    }
                }
                #endregion
            }
            ViewBag.FastOrder = FastOrder;
            if (IsAlipayBrowser)
            {
                if (!FastOrder.PayId.IsNullOrEmpty())
                {
                    Response.Redirect(FastOrder.PayId);
                    return(View("Null"));
                }
            }
            return(View());
        }
        private byte GetCardType(string BankNum)
        {
            string HaoFu_Auth_MerId  = ConfigurationManager.AppSettings["HaoFu_Auth_MerId"].ToString();
            string HaoFu_Auth_MerKey = ConfigurationManager.AppSettings["HaoFu_Auth_MerKey"].ToString();

            string data       = "{\"action\":\"bankcard\",\"merid\":\"" + HaoFu_Auth_MerId + "\",\"bankaccount\":\"" + BankNum + "\"}";
            string DataBase64 = LokFuEncode.Base64Encode(data, "utf-8");
            string Sign       = (DataBase64 + HaoFu_Auth_MerKey).GetMD5();

            DataBase64 = HttpUtility.UrlEncode(DataBase64, Encoding.UTF8);
            string postdata = "req=" + DataBase64 + "&sign=" + Sign;

            string CONTENT = Utils.PostRequest("https://api.zhifujiekou.com/api/bankcardtype", postdata, "utf-8");

            JObject JS = new JObject();

            try
            {
                JS = (JObject)JsonConvert.DeserializeObject(CONTENT);
            }
            catch (Exception Ex)
            {
                Log.Write("[GetCardType]:", "【CONTENT】" + CONTENT, Ex);
            }
            if (JS == null)
            {
                return(0);
            }
            string resp = JS["resp"].ToString();

            CONTENT = LokFuEncode.Base64Decode(resp, "utf-8");
            try
            {
                JS = (JObject)JsonConvert.DeserializeObject(CONTENT);
            }
            catch (Exception Ex)
            {
                Log.Write("[GetCardType]:", "【CONTENT2】" + CONTENT, Ex);
            }
            if (JS == null)
            {
                return(0);
            }
            string ret_code = JS["respcode"].ToString();

            if (ret_code == "0000")
            {
                string CardType = JS["cardtype"].ToString();
                if (CardType == "1")
                {
                    return(1);
                }
                if (CardType == "2")
                {
                    return(2);
                }
                return(0);
            }
            else
            {
                return(0);
            }
        }
        public string PayState(string code)
        {
            string    TNum      = LokFuEncode.Base64Decode(code);
            FastOrder FastOrder = Entity.FastOrder.FirstOrDefault(n => n.TNum == TNum);

            if (FastOrder == null)
            {
                return("E1");
            }
            if (FastOrder.PayState == 1)
            {
                return("S");
            }
            if (FastOrder.State != 1)
            {
                return("E0");
            }
            FastPayWay FastPayWay = Entity.FastPayWay.FirstOrNew(n => n.Id == FastOrder.PayWay);

            if (FastPayWay == null)
            {
                return("E2");
            }
            string[] PayConfigArr = FastPayWay.QueryArray.Split(new char[] { ',' });//接口信息
            if (FastPayWay.DllName == "HFPay")
            {
                #region 结算中心
                if (PayConfigArr.Length == 3)
                {
                    string HF_Url     = "https://api.zhifujiekou.com/api/query";
                    string MerId      = PayConfigArr[0];
                    string MerKey     = PayConfigArr[1];
                    string orderId    = FastOrder.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  Ret      = Utils.PostRequest(HF_Url, PostData, "utf-8");
                    JObject JS       = new JObject();
                    try
                    {
                        JS = (JObject)JsonConvert.DeserializeObject(Ret);
                    }
                    catch (Exception)
                    {
                        JS = null;
                    }
                    if (JS != null)
                    {
                        if (JS["resp"] != null)
                        {
                            string resp = JS["resp"].ToString();
                            Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                            try
                            {
                                JS = (JObject)JsonConvert.DeserializeObject(Ret);
                            }
                            catch (Exception)
                            {
                                JS = null;
                            }
                            if (JS != null)
                            {
                                string respcode = JS["respcode"].ToString();
                                if (respcode == "00")
                                {
                                    string resultcode = JS["resultcode"].ToString();
                                    if (resultcode == "0000" || resultcode == "1002" || resultcode == "1004")
                                    {
                                        string queryid = JS["queryid"].ToString();
                                        FastOrder.Trade = queryid;
                                        Entity.SaveChanges();
                                        string txnamt    = JS["txnamt"].ToString();
                                        int    factmoney = int.Parse(txnamt);
                                        if (((int)(FastOrder.Amoney * 100)) == factmoney)
                                        {
                                            FastOrder = FastOrder.PaySuccess(Entity);
                                        }
                                    }
                                }
                                //================================================
                                //这里记录日志
                                PayLog PayLog = new PayLog();
                                PayLog.PId     = (int)FastOrder.PayWay;
                                PayLog.OId     = FastOrder.TNum;
                                PayLog.TId     = FastOrder.Trade;
                                PayLog.Amount  = FastOrder.Amoney;
                                PayLog.Way     = "Query";
                                PayLog.AddTime = DateTime.Now;
                                PayLog.Data    = Ret;
                                PayLog.State   = 1;
                                Entity.PayLog.AddObject(PayLog);
                                Entity.SaveChanges();
                                //================================================
                            }
                        }
                    }
                }
                #endregion
            }
            if (FastOrder.PayState == 1)
            {
                return("S");
            }
            if (FastOrder.State == 0)
            {
                return("E100");
            }
            return("G");
        }
        /// <summary>
        /// 刷还系统通知
        /// </summary>
        public void Notice()
        {
            string Resp    = Request.Form["resp"];
            string Sign    = Request.Form["sign"];
            string SignStr = Resp;

            Resp = LokFuEncode.Base64Decode(Resp, "utf-8");
            JObject json = new JObject();

            try
            {
                json = (JObject)JsonConvert.DeserializeObject(Resp);
            }
            catch (Exception Ex)
            {
                Response.Write(Ex.ToString());
                return;
            }
            if (json == null)
            {
                Response.Write("Json Null");
                return;
            }
            string resultcode = json["resultcode"].ToString(); //交易结果码
            string resultmsg  = json["resultmsg"].ToString();  //交易结果信息
            string queryid    = json["queryid"].ToString();    //交易流水号
            string txnamt     = json["txnamt"].ToString();     //交易金额\
            string merid      = json["merid"].ToString();      //交易金额
            string orderid    = json["orderid"].ToString();    //交易金额

            JobItem JobItem = this.Entity.JobItem.FirstOrDefault(o => o.RunNum == orderid);

            if (JobItem == null)
            {
                Response.Write("E1");
                return;
            }
            if (JobItem.State != 2)
            {
                Response.Write("S1");
                return;
            }
            if (JobItem.RunState != 0 && JobItem.RunState != 2)
            {
                Response.Write("S2");
                return;
            }
            JobUserPay JobUserPay = Entity.JobUserPay.FirstOrDefault(n => n.PayWay == JobItem.PayWay && n.UId == JobItem.UId);

            if (JobUserPay == null)
            {
                Response.Write("E2");
                return;
            }
            string MD5Str = SignStr + JobUserPay.MerKey;
            string sign   = MD5Str.GetMD5();
            //================================================
            //这里记录日志
            JobLog JobLog = new JobLog();

            JobLog.PayWay  = JobItem.PayWay;
            JobLog.ReqNo   = JobItem.RunNum;
            JobLog.TNum    = JobItem.TNum;
            JobLog.Trade   = "";
            JobLog.Amount  = JobItem.RunMoney;
            JobLog.Way     = "Notice";
            JobLog.AddTime = DateTime.Now;
            JobLog.Data    = Request.Form.ToString();
            JobLog.State   = 1;
            Entity.JobLog.AddObject(JobLog);
            Entity.SaveChanges();
            //================================================
            if (Sign != sign)
            {
                Response.Write("E2");
                return;
            }
            if (JobUserPay.MerId != merid)
            {
                Response.Write("E1");
                return;
            }
            if (resultcode == "0000")
            {
                JobItem = JobItem.PaySuccess(Entity);
            }
            if (resultcode == "1004")
            {
                JobItem = JobItem.PayFail(Entity);
            }
            Response.Write("0000");
        }
        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("[FastOrderQueryController]:", "【Data】" + Data, Ex);
                json = null;
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }

            FastOrder InFastOrder = new FastOrder();

            InFastOrder = JsonToObject.ConvertJsonToModel(InFastOrder, json);
            if (InFastOrder.TNum.IsNullOrEmpty() || InFastOrder.Token.IsNullOrEmpty())
            {
                DataObj.OutError("1000");
                return;
            }

            Users baseUsers = Entity.Users.FirstOrDefault(n => n.Token == InFastOrder.Token);

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

            FastOrder FastOrder = Entity.FastOrder.FirstOrDefault(n => n.TNum == InFastOrder.TNum && n.UId == baseUsers.Id);

            if (FastOrder == null)
            {
                DataObj.OutError("1000");
                return;
            }
            if (FastOrder.State == 1 && FastOrder.PayState == 0)
            {
                FastPayWay FastPayWay = Entity.FastPayWay.FirstOrNew(n => n.Id == FastOrder.PayWay);
                if (FastPayWay == null)
                {
                    DataObj.OutError("2079");
                    return;
                }
                string[] PayConfigArr = FastPayWay.QueryArray.Split(new char[] { ',' });//接口信息
                if (FastPayWay.DllName == "HFPay")
                {
                    #region 结算中心
                    if (PayConfigArr.Length == 3)
                    {
                        string HF_Url     = "https://api.zhifujiekou.com/api/query";
                        string MerId      = PayConfigArr[0];
                        string MerKey     = PayConfigArr[1];
                        string orderId    = FastOrder.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  Ret      = Utils.PostRequest(HF_Url, PostData, "utf-8");
                        JObject JS       = new JObject();
                        try
                        {
                            JS = (JObject)JsonConvert.DeserializeObject(Ret);
                        }
                        catch (Exception)
                        {
                            JS = null;
                        }
                        if (JS != null)
                        {
                            if (JS["resp"] != null)
                            {
                                string resp = JS["resp"].ToString();
                                Ret = LokFuEncode.Base64Decode(resp, "utf-8");
                                try
                                {
                                    JS = (JObject)JsonConvert.DeserializeObject(Ret);
                                }
                                catch (Exception)
                                {
                                    JS = null;
                                }
                                if (JS != null)
                                {
                                    string respcode = JS["respcode"].ToString();
                                    if (respcode == "00")
                                    {
                                        string resultcode = JS["resultcode"].ToString();
                                        if (resultcode == "0000" || resultcode == "1002" || resultcode == "1004")
                                        {
                                            string queryid = JS["queryid"].ToString();
                                            FastOrder.Trade = queryid;
                                            Entity.SaveChanges();
                                            string txnamt    = JS["txnamt"].ToString();
                                            int    factmoney = int.Parse(txnamt);
                                            if (((int)(FastOrder.Amoney * 100)) == factmoney)
                                            {
                                                FastOrder = FastOrder.PaySuccess(Entity);
                                            }
                                        }
                                    }
                                    //================================================
                                    //这里记录日志
                                    PayLog PayLog = new PayLog();
                                    PayLog.PId     = (int)FastOrder.PayWay;
                                    PayLog.OId     = FastOrder.TNum;
                                    PayLog.TId     = FastOrder.Trade;
                                    PayLog.Amount  = FastOrder.Amoney;
                                    PayLog.Way     = "Query";
                                    PayLog.AddTime = DateTime.Now;
                                    PayLog.Data    = Ret;
                                    PayLog.State   = 1;
                                    Entity.PayLog.AddObject(PayLog);
                                    Entity.SaveChanges();
                                    //================================================
                                }
                            }
                        }
                    }
                    #endregion
                }
                if (FastPayWay.DllName == "HFJSPay")
                {
                    #region 结算中心
                    if (PayConfigArr.Length == 3)
                    {
                        FastUserPay          FastUserPay          = Entity.FastUserPay.FirstOrDefault(n => n.PayWay == FastOrder.PayWay && n.UId == baseUsers.Id && n.MerState == 1);
                        fastordersqueryModel fastordersqueryModel = new fastordersqueryModel()
                        {
                            merid   = FastUserPay.MerId,
                            orderid = "",
                            queryid = FastOrder.TNum
                        };
                        fastordersqueryResult fastordersqueryResult = HFJSTools.fastordersquery(fastordersqueryModel, FastUserPay.MerKey);
                        //================================================
                        //记录通知信息
                        PayLog PayLog = new PayLog();
                        PayLog.PId     = FastOrder.PayWay.Value;
                        PayLog.OId     = FastOrder.TNum;
                        PayLog.TId     = fastordersqueryResult.queryid;
                        PayLog.Amount  = FastOrder.Amoney;
                        PayLog.Way     = "Query";
                        PayLog.AddTime = DateTime.Now;
                        PayLog.Data    = HFJSTools.MyObjectToJson(fastordersqueryResult);
                        PayLog.State   = 1;
                        Entity.PayLog.AddObject(PayLog);
                        Entity.SaveChanges();
                        //================================================
                        if (fastordersqueryResult.respcode == "00")
                        {
                            if (fastordersqueryResult.resultcode == "0000" || fastordersqueryResult.resultcode == "1002")
                            {
                                FastOrder.Trade = fastordersqueryResult.queryid;
                                Entity.SaveChanges();
                                FastOrder = FastOrder.PaySuccess(Entity);
                                if (FastOrder.PayState == 1)
                                {
                                    if (fastordersqueryResult.resultcode == "0000")
                                    {
                                        FastOrder.UserState = 1;
                                    }
                                    if (fastordersqueryResult.resultcode == "1002")
                                    {
                                        FastOrder.UserState = 3;
                                    }
                                    FastOrder.UserTime = DateTime.Now;
                                    Entity.SaveChanges();
                                }
                            }
                            else if (fastordersqueryResult.resultcode == "1004")
                            {
                                FastOrder.State = 0;
                                Entity.SaveChanges();
                            }
                            else
                            {
                            }
                            Entity.SaveChanges();
                        }
                        else
                        {
                            string resp_desc = fastordersqueryResult.respmsg;
                            Utils.WriteLog("HFJS[Query][" + FastOrder.TNum + "]:" + resp_desc, "JobHFJS");
                        }
                    }
                    #endregion
                }
            }
            if (FastOrder.State == 1)
            {
                if (FastOrder.PayState == 1)
                {
                    if (FastOrder.UserState == 1)
                    {
                        FastOrder.State = 3;
                    }
                    else
                    {
                        FastOrder.State = 2;
                    }
                }
                else
                {
                    FastOrder.State = 1;
                }
            }
            else
            {
                FastOrder.State = 0;
            }
            FastOrder.Cols = "TNum,PayId,Amoney,Poundage,State";
            DataObj.Data   = FastOrder.OutJson();
            DataObj.Code   = "0000";
            DataObj.OutString();
        }
Esempio n. 28
0
        public BaseController()
        {
            AdminUser  = new SysAdmin();
            BasicAgent = new SysAgent();
            BasicUsers = new Users();
            string mycode = "";

            if (System.Web.HttpContext.Current.Request.Form["mycode"] != null)
            {
                mycode = System.Web.HttpContext.Current.Request.Form["mycode"].ToString();
            }
            if (System.Web.HttpContext.Current.Request.QueryString["mycode"] != null)
            {
                mycode = System.Web.HttpContext.Current.Request.QueryString["mycode"].ToString();
            }
            if (mycode.IsNullOrEmpty())
            {
                mycode = System.Web.HttpContext.Current.Request.Cookies.GetMyCode();
            }
            else
            {
                System.Web.HttpContext.Current.Response.Cookies.SetMyCode(mycode);
            }
            if (!mycode.IsNullOrEmpty())
            {
                string myid = LokFuEncode.Base64Decode(mycode);
                if (!myid.IsNullOrEmpty())
                {
                    int MyId = Int32.Parse(myid);
                    AdminUser  = Entity.SysAdmin.FirstOrNew(n => n.Id == MyId);
                    BasicAgent = Entity.SysAgent.FirstOrNew(n => n.Id == AdminUser.AgentId);
                }
            }
            string mytoken = "";

            if (System.Web.HttpContext.Current.Request.Form["token"] != null)
            {
                mytoken = System.Web.HttpContext.Current.Request.Form["token"].ToString();
            }
            if (System.Web.HttpContext.Current.Request.QueryString["token"] != null)
            {
                mytoken = System.Web.HttpContext.Current.Request.QueryString["token"].ToString();
            }
            if (mytoken.IsNullOrEmpty())
            {
                mytoken = System.Web.HttpContext.Current.Request.Cookies.GetUserToken();
            }
            else
            {
                System.Web.HttpContext.Current.Response.Cookies.SetUserToken(mytoken);
            }
            if (!mytoken.IsNullOrEmpty())
            {
                BasicUsers = Entity.Users.FirstOrNew(n => n.Token == mytoken);
                if (!BasicUsers.Agent.IsNullOrEmpty() && BasicAgent.Id.IsNullOrEmpty())
                {
                    BasicAgent = Entity.SysAgent.FirstOrNew(n => n.Id == BasicUsers.Agent);
                }
            }
            String userAgent;

            userAgent = System.Web.HttpContext.Current.Request.UserAgent;
            if (userAgent.IndexOf("HaoFu") > -1)
            {
                IsLokFu = true;
            }
            if (userAgent.IndexOf("HaoFu_iPhone") > -1)
            {
                IsApple = true;
            }
            if (userAgent.IndexOf("HaoFu_Android") > -1)
            {
                IsAndroid = true;
            }
            ViewBag.AdminUser  = AdminUser;//用户
            ViewBag.BasicAgent = BasicAgent;
            ViewBag.BasicUsers = BasicUsers;
            BasicSet           = Entity.SysSet.FirstOrNew();
            ViewBag.BasicSet   = BasicSet;
            ViewBag.IsLokFu    = IsLokFu;
            ViewBag.IsAndroid  = IsAndroid;
            ViewBag.IsApple    = IsApple;
        }
        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("[IPayQuery]:", "【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.PayState != 1)
            {
                PayConfig PayConfig = Entity.PayConfig.FirstOrNew(n => n.Id == BaseOrders.PayWay);
                //开始处理参数
                string DataRet = "", Trade = "";
                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    = BaseOrders.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";
                        DataRet = Utils.PostRequest(HF_Url, PostData, "utf-8");

                        JObject JS = new JObject();
                        try
                        {
                            JS = (JObject)JsonConvert.DeserializeObject(DataRet);
                        }
                        catch (Exception Ex)
                        {
                            Log.Write("[Order_HFQuery]:", "【PostData】" + PostData + "\n【DataRet】" + DataRet, Ex);
                            JS = null;
                        }
                        if (JS == null)
                        {
                            DataObj.OutError("1000");
                            return;
                        }
                        if (JS["resp"] == null)
                        {
                            Utils.WriteLog("【DataRet】" + DataRet, "OrderQC_HFQuery");
                            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_HFQuery]:", "【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_HFQuery_Err]:【" + respcode + "】" + respmsg, "orderface");
                            return;
                        }
                        string resultcode = JS["resultcode"].ToString();
                        string queryid    = JS["queryid"].ToString();
                        if (resultcode == "0000" || resultcode == "1002" || resultcode == "1004")
                        {
                            string txnamt    = JS["txnamt"].ToString();
                            int    factmoney = int.Parse(txnamt);
                            if (((int)(BaseOrders.Amoney * 100)) == factmoney)
                            {
                                BaseOrders = BaseOrders.PaySuccess(Entity);
                            }
                        }
                    }
                    #endregion
                }
                //================================================
                //这里记录日志
                PayLog PayLog = new PayLog();
                PayLog.PId     = BaseOrders.PayWay;
                PayLog.OId     = BaseOrders.TNum;
                PayLog.TId     = Trade;
                PayLog.Amount  = BaseOrders.Amoney;
                PayLog.Way     = "GET";
                PayLog.AddTime = DateTime.Now;
                PayLog.Data    = DataRet;
                PayLog.State   = 1;
                Entity.PayLog.AddObject(PayLog);
                Entity.SaveChanges();
                //================================================
            }
            BaseOrders.Cols = "TNum,Amount,PayState";
            DataObj.Data    = BaseOrders.OutJson();
            DataObj.Code    = "0000";
            DataObj.OutString();
        }