public ActionResult Index(string etnum)
        {
            if (etnum.IsNullOrEmpty())
            {
                ViewBag.ErrorMsg = "Some Error[00]";
                return(View("Error"));
            }
            string    tnum      = LokFuEncode.LokFuAPIDecode(etnum, DllName);
            FastOrder FastOrder = Entity.FastOrder.FirstOrDefault(n => n.TNum == tnum);

            if (FastOrder == null)
            {
                ViewBag.ErrorMsg = "Some Error[02]";
                return(View("Error"));
            }
            FastPayWay FastPayWay = Entity.FastPayWay.FirstOrDefault(n => n.Id == FastOrder.PayWay);

            if (FastOrder == null)
            {
                ViewBag.ErrorMsg = "Some Error[03]";
                return(View("Error"));
            }
            if (FastPayWay.DllName != DllName)
            {
                ViewBag.ErrorMsg = "Some Error[04]";
                return(View("Error"));
            }
            string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
            if (PayConfigArr.Length != 3)
            {
                ViewBag.ErrorMsg = "Some Error[05]";
                return(View("Error"));
            }
            FastUserPay FastUserPay = Entity.FastUserPay.FirstOrDefault(n => n.PayWay == FastOrder.PayWay && n.UId == FastOrder.UId && n.MerState == 1);

            if (FastUserPay == null)
            {
                ViewBag.ErrorMsg = "商户通道异常";
                return(View("Error"));
            }

            string paywaycode = PayConfigArr[2];                                   //绑定通道
            string OrderMoney = (FastOrder.Amoney * 100).ToString("F0");           //金额,以分为单
            string ReturnUrl  = PayPath + "/PayCenter/HFJSPay/FastResult.html";    //支付成功跳转页
            string BackUrl    = NoticePath + "/PayCenter/HFJSPay/FastNotice.html"; //后台通过地址

            string Data = "{\"txnamt\":\"" + OrderMoney + "\",\"merid\":\"" + FastUserPay.MerId + "\",\"paywaycode\":\"" + paywaycode + "\",\"orderid\":\"" + FastOrder.TNum + "\",\"backurl\":\"" + BackUrl + "\",\"fronturl\":\"" + ReturnUrl + "\"}";

            string DataBase64 = LokFuEncode.Base64Encode(Data, "utf-8");
            string Sign       = (DataBase64 + FastUserPay.MerKey).GetMD5();

            string GoUrl = "https://api.zhifujiekou.com/apis/fastorderspay?";

            GoUrl += "req=" + HttpUtility.UrlEncode(DataBase64);
            GoUrl += "&sign=" + Sign;

            Response.Redirect(GoUrl);

            return(View("Null"));
        }
예제 #2
0
 public static FastUserPay AddCard(FastUser FastUser, FastUserPay FastUserPay, FastPayWay FastPayWay, LokFuEntity Entity)
 {
     //添加/修改结算卡------不需要修改的需到上一步添加
     if (FastUserPay.CardState == 2)
     {
         string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
         if (FastPayWay.DllName == "HFJSPay")
         {
             #region 结算中心
             if (PayConfigArr.Length == 3)
             {
                 UserCard UserCard = Entity.UserCard.FirstOrNew(n => n.Card == FastUserPay.Card && n.UId == FastUser.UId);
                 string   Mobile   = UserCard.Mobile;
                 Users    Users    = Entity.Users.FirstOrNew(n => n.Id == FastUser.UId);
                 if (Mobile.IsNullOrEmpty())
                 {
                     Mobile = Users.UserName;
                 }
                 string           Code       = PayConfigArr[0];
                 string           CodeKey    = PayConfigArr[1];
                 string           PayWayCode = PayConfigArr[2];
                 fastuseraddModel model      = new fastuseraddModel()
                 {
                     code          = Code,
                     merid         = FastUserPay.MerId,
                     cardno        = Users.CardId,
                     accountcard   = UserCard.Card,
                     accountbin    = UserCard.Bin,
                     accountmobile = UserCard.Mobile
                 };
                 fastuserResult fastuserResult = HFJSTools.fastuseredit(model, CodeKey);
                 if (fastuserResult.respcode == "00")
                 {
                     FastUserPay.CardState = 1;
                     Entity.SaveChanges();
                 }
                 else
                 {
                     FastUserPay.CardMsg   = fastuserResult.respcode + "[" + fastuserResult.respmsg + "]";
                     FastUserPay.CardState = 4;
                     Entity.SaveChanges();
                 }
             }
             #endregion
         }
     }
     return(FastUserPay);
 }
        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");
        }
예제 #5
0
        public void Post()
        {
            string Data = DataObj.GetData();

            if (!Data.IsNullOrEmpty())
            {
                JObject json = new JObject();
                try
                {
                    json = (JObject)JsonConvert.DeserializeObject(Data);
                }
                catch (Exception Ex)
                {
                    Log.Write("[Receipt]:", "【Data】" + Data, Ex);
                }
                if (json == null)
                {
                    DataObj.OutError("1000");
                    return;
                }
                var Users = new Users();
                Users = JsonToObject.ConvertJsonToModel(Users, json);
                Users BaseUsers = Entity.Users.FirstOrDefault(o => o.Token == Users.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;
                //}

                //获取直通车配置及用户直通车配置
                bool     IsBindingFast = true;
                FastUser FastUser      = Entity.FastUser.FirstOrDefault(n => n.UId == BaseUsers.Id);
                if (FastUser == null)
                {
                    //开通帐户
                    FastUser          = new FastUser();
                    FastUser.UId      = BaseUsers.Id;
                    FastUser.TrueName = BaseUsers.TrueName;
                    FastUser.CardId   = BaseUsers.CardId;
                    FastUser.AddTime  = DateTime.Now;
                    Entity.FastUser.AddObject(FastUser);
                    Entity.SaveChanges();
                }

                if (FastUser.Card.IsNullOrEmpty())
                {
                    IsBindingFast = false;
                }
                else
                {
                    FastConfig FastConfig = Entity.FastConfig.FirstOrNew();
                    //===========================================================
                    //这里要处理商户入驻
                    BusFastPay.AddMer(FastUser, FastConfig, this.Entity);
                    //===========================================================
                }

                var result = new Receipt2Model();

                result.FastUser = new FastUserModel()
                {
                    card = FastUser.Card,
                    bank = FastUser.Bank,
                    bin  = FastUser.Bin,
                };
                List <PayWayModel> PayWayModelList = new List <PayWayModel>();
                SysSet             SysSet          = Entity.SysSet.FirstOrDefault();

                #region 整合数据
                DateTime now = new DateTime(1990, 01, 01, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second);

                #region 交易通道
                var SCquery = Entity.SysControl.Where(o => AllowTag.Contains(o.Tag) && (o.State == 1 || o.State == 2) && ((((now >= o.STime && now <= o.ETime && o.STime < o.ETime) || ((now >= o.STime || now <= o.ETime) && o.STime > o.ETime)) && o.TimeType == 1) || o.TimeType == 0));
                if (SysSet.LagEntry == 0)
                {
                    SCquery = SCquery.Where(o => o.LagEntryNum == 0);
                }
                List <SysControl> SysControlList  = SCquery.OrderBy(o => o.Sort).ToList();
                string            UserPayCashName = "UserPay_" + BaseUsers.Id.ToString() + "_" + Equipment.RqType;
                List <UserPay>    UserPayList     = null;

                if (HasCache)
                {
                    UserPayList = CacheBuilder.EntityCache.Get(UserPayCashName, null) as List <UserPay>;
                    if (UserPayList == null)
                    {
                        UserPayList = Entity.UserPay.Where(n => n.UId == BaseUsers.Id).ToList();
                        CacheBuilder.EntityCache.Remove(UserPayCashName, null);
                        CacheBuilder.EntityCache.Add(UserPayCashName, UserPayList, DateTime.Now.AddHours(1), null);
                    }
                }
                else
                {
                    UserPayList = Entity.UserPay.Where(n => n.UId == BaseUsers.Id).ToList();
                }

                SysControlList.ForEach(o =>
                {
                    var PayWayModel = new PayWayModel()
                    {
                        id          = o.Id,
                        name        = o.CName,
                        cost        = o.LagEntryDay > 0 ? 0m : (decimal)UserPayList.Where(x => x.PId == o.PayWay).Select(x => x.Cost).FirstOrNew(),
                        s_num       = o.SNum,
                        e_num       = o.ENum,
                        state       = o.State,
                        sort        = o.Sort,
                        tag         = o.Tag,
                        lagentryday = o.LagEntryDay,
                        paywaytype  = 1,
                        cash        = 0,
                        payway      = o.PayWay,
                    };
                    PayWayModelList.Add(PayWayModel);
                });
                #endregion

                #region 直通车通道
                if (IsBindingFast)
                {
                    List <FastPayWay>  FastPayWayList      = Entity.FastPayWay.Where(o => o.State == 1 && o.ManE == 0 && ((now >= o.STime && now <= o.ETime && o.TimeType == 1) || o.TimeType == 0)).OrderBy(o => o.Sort).ToList();
                    string             FastUserPayCashName = "FastUserPay_" + BaseUsers.Id.ToString() + "_" + Equipment.RqType;
                    List <FastUserPay> FastUserPayList     = null;
                    if (HasCache)
                    {
                        FastUserPayList = CacheBuilder.EntityCache.Get(FastUserPayCashName, null) as List <FastUserPay>;
                        if (FastUserPayList == null)
                        {
                            FastUserPayList = Entity.FastUserPay.Where(n => n.UId == BaseUsers.Id).ToList();
                            CacheBuilder.EntityCache.Remove(FastUserPayCashName, null);
                            CacheBuilder.EntityCache.Add(FastUserPayCashName, FastUserPayList, DateTime.Now.AddHours(1), null);
                        }
                    }
                    else
                    {
                        FastUserPayList = Entity.FastUserPay.Where(n => n.UId == BaseUsers.Id).ToList();
                    }

                    FastPayWayList.ForEach(o =>
                    {
                        var tempList = new List <PayWayModel>();
                        if (o.HasAliPay == 1)
                        {
                            tempList.Add(new PayWayModel()
                            {
                                tag = "Alipay", name = "支付宝" + o.ShowName, s_num = o.SNum2, e_num = o.ENum2, payway = 1
                            });
                        }
                        if (o.HasWeiXin == 1)
                        {
                            tempList.Add(new PayWayModel()
                            {
                                tag = "WeiXin", name = "微信" + o.ShowName, s_num = o.SNum, e_num = o.ENum, payway = 2
                            });
                        }
                        if (o.HasBank == 1)
                        {
                            tempList.Add(new PayWayModel()
                            {
                                tag = "RecMoneyLocal", name = "银联" + o.ShowName, s_num = o.BankSNum, e_num = o.BankENum, payway = 3
                            });
                        }
                        foreach (var item in tempList)
                        {
                            FastUserPay FastUserPay = FastUserPayList.FirstOrNew(x => x.PayWay == o.Id);
                            item.id = o.Id;
                            //2017-11-12 通道支持微信/支付宝/银联不同费率
                            if (item.payway == 1)
                            {
                                item.cost = FastUserPay.UserCost2;
                            }
                            if (item.payway == 2)
                            {
                                item.cost = FastUserPay.UserCost;
                            }
                            if (item.payway == 3)
                            {
                                item.cost = FastUserPay.UserCost3;
                            }
                            item.cash = FastUserPay.UserCash;

                            item.state      = o.State;
                            item.sort       = o.Sort;
                            item.paywaytype = 2;

                            if (o.GroupType == "D0")
                            {
                                item.lagentryday = 0;
                            }
                            else if (o.GroupType == "T1")
                            {
                                item.lagentryday = 1;
                            }
                        }
                        ;
                        PayWayModelList.AddRange(tempList);
                    });
                }
                #endregion

                PayWayModelList = PayWayModelList.OrderBy(n => n.sort).ToList();//排序
                //一条通道都没有的情况处理
                //if (PayWayModelList.Count == 0)
                //{
                //    var none = new PayWayModel()
                //    {
                //        cash = 2,
                //        cost = 0.006m,
                //        s_num = 1000,
                //        e_num = 20000,
                //        id = 99999,
                //        lagentryday = 0,
                //        payway = 0,
                //        paywaytype = 2,
                //        sort = 0,
                //        tag = "RecMoneyLocal",
                //        state = 0,
                //        name = "银联",

                //    };
                //    PayWayModelList.Add(none);
                //}

                result.UserPay = PayWayModelList;
                #endregion

                DataObj.Data = JsonConvert.SerializeObject(result);
                DataObj.Code = "0000";
                DataObj.OutString();
            }
        }
예제 #6
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();
        }
예제 #7
0
        public static FastUser AddMer(FastUser FastUser, FastPayWay FastPayWay, FastConfig FastConfig, LokFuEntity Entity)
        {
            if (FastUser.Card.IsNullOrEmpty())
            {
                //未绑定银行卡
                return(FastUser);
            }
            FastUserPay FastUserPay = Entity.FastUserPay.FirstOrDefault(n => n.UId == FastUser.UId && n.PayWay == FastPayWay.Id);

            if (FastUserPay == null)
            {
                FastUserPay        = new FastUserPay();
                FastUserPay.UId    = FastUser.UId;
                FastUserPay.PayWay = FastPayWay.Id;
                if (FastPayWay.DllName == "HFPay")
                {
                    //不需要一户一码直接开通商户
                    FastUserPay.MerId     = "HFPay" + FastUserPay.UId.ToString();
                    FastUserPay.MerState  = 1;
                    FastUserPay.CardState = 1;
                    FastUserPay.BusiState = 1;
                }
                else
                {
                    FastUserPay.MerId     = "";
                    FastUserPay.MerState  = 2; //状态 0锁定 1正常 2待提交 3审核中 4审核失败
                    FastUserPay.CardState = 2; //状态 0锁定 1正常 2待提交 3审核中 4审核失败
                    FastUserPay.BusiState = 2; //状态 1正常 2待提交 3审核中 4审核失败
                }
                FastUserPay.CardName = FastUser.TrueName;
                FastUserPay.Bank     = FastUser.Bank;
                FastUserPay.Card     = FastUser.Card;
                FastUserPay.Bin      = FastUser.Bin;
                //2017-11-22 修改成取通道配置,且分别计算微信/支付宝/银联
                //FastUserPay.UserCost = FastConfig.UserCost;
                FastUserPay.UserCost  = FastPayWay.InCost;
                FastUserPay.UserCost2 = FastPayWay.InCost2;
                FastUserPay.UserCost3 = FastPayWay.InCost3;


                if (FastPayWay.GroupType == "T1")
                {
                    FastUserPay.UserCash = 0;
                }
                else
                {
                    FastUserPay.UserCash = FastConfig.UserCash;
                }
                FastUserPay.AddTime = DateTime.Now;
                Entity.FastUserPay.AddObject(FastUserPay);
                Entity.SaveChanges();
            }
            else
            {
                bool Save = false;
                if (FastUserPay.CardName != FastUser.TrueName)
                {
                    FastUserPay.CardName = FastUser.TrueName;
                    Save = true;
                }
                if (FastUserPay.Bank != FastUser.Bank)
                {
                    FastUserPay.Bank = FastUser.Bank;
                    Save             = true;
                }
                if (FastUserPay.Card != FastUser.Card)
                {
                    FastUserPay.Card = FastUser.Card;
                    Save             = true;
                }
                if (FastUserPay.Bin != FastUser.Bin)
                {
                    FastUserPay.Bin = FastUser.Bin;
                    Save            = true;
                }
                if (Save)
                {
                    Entity.SaveChanges();
                }
            }
            string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
            if (FastPayWay.DllName == "HFJSPay")
            {
                #region 结算系统
                if (PayConfigArr.Length == 3)
                {
                    string Code       = PayConfigArr[0];
                    string CodeKey    = PayConfigArr[1];
                    string PayWayCode = PayConfigArr[2];
                    #region 进件
                    if (FastUserPay.MerState == 2 || FastUserPay.MerState == 4)
                    {
                        UserCard UserCard = Entity.UserCard.FirstOrNew(n => n.Card == FastUserPay.Card && n.UId == FastUser.UId);
                        string   Mobile   = UserCard.Mobile;
                        Users    Users    = Entity.Users.FirstOrNew(n => n.Id == FastUser.UId);
                        if (Mobile.IsNullOrEmpty())
                        {
                            Mobile = Users.UserName;
                        }
                        fastuseraddModel model = new fastuseraddModel()
                        {
                            code          = Code,
                            mchid         = "HF" + Users.Id.ToString(),
                            mchname       = Users.NeekName,
                            truename      = Users.TrueName,
                            cardno        = Users.CardId,
                            accountcard   = UserCard.Card,
                            accountbin    = UserCard.Bin,
                            accountmobile = UserCard.Mobile
                        };
                        fastuserResult fastuserResult = HFJSTools.fastuseradd(model, CodeKey);
                        if (fastuserResult.respcode == "00")
                        {
                            bool   RunTrue = true;
                            string Msg     = "";
                            if (fastuserResult.respmsg == "存在相同外部商户号")
                            {
                                //这里面要修改一下结算卡
                                fastuseraddModel modelEdit = new fastuseraddModel()
                                {
                                    code          = Code,
                                    merid         = fastuserResult.merid,
                                    cardno        = Users.CardId,
                                    accountcard   = UserCard.Card,
                                    accountbin    = UserCard.Bin,
                                    accountmobile = UserCard.Mobile
                                };
                                fastuserResult fastuserresult = HFJSTools.fastuseredit(modelEdit, CodeKey);
                                if (fastuserresult.respcode != "00")
                                {
                                    Msg     = fastuserresult.respmsg;
                                    RunTrue = false;
                                }
                            }
                            if (RunTrue)
                            {
                                if (fastuserResult.state == 1)
                                {
                                    FastUserPay.MerState  = 1;
                                    FastUserPay.CardState = 1;//这里已绑定结算卡
                                    FastUserPay.MerId     = fastuserResult.merid;
                                    FastUserPay.MerKey    = fastuserResult.merkey;
                                }
                                else if (fastuserResult.state == 2)
                                {
                                    FastUserPay.MerId    = fastuserResult.merid;
                                    FastUserPay.MerKey   = fastuserResult.merkey;
                                    FastUserPay.MerState = 3;
                                }
                                else
                                {
                                    FastUserPay.MerState = 4;
                                    FastUserPay.MerMsg   = fastuserResult.respcode + "[" + fastuserResult.respmsg + "]";
                                }
                            }
                            else
                            {
                                FastUserPay.MerState = 4;
                                FastUserPay.MerMsg   = Msg;
                            }
                        }
                        else
                        {
                            FastUserPay.MerState = 4;
                            FastUserPay.MerMsg   = fastuserResult.respcode + "[" + fastuserResult.respmsg + "]";
                        }
                        Entity.SaveChanges();
                    }
                    #endregion
                    #region 开通道
                    if (FastUserPay.MerState == 1 && (FastUserPay.BusiState == 2 || FastUserPay.BusiState == 4))
                    {
                        decimal Cost  = FastPayWay.InCost3;//刷卡手续费
                        Users   Users = Entity.Users.FirstOrNew(n => n.Id == FastUser.UId);
                        if (Users.IsVip == 1)
                        {
                            Cost = 0.005M;
                            FastUserPay.UserCost3 = 0.005M;
                        }
                        decimal            Cash = FastConfig.UserCash;//还款手续费
                        userspayopenbModel userspayopenbModel = new userspayopenbModel()
                        {
                            merid      = FastUserPay.MerId,
                            paywaycode = PayWayCode,
                            code       = Code,
                            bankcost   = Cost,
                            //surcharge = 0,
                            cash        = Cash,
                            bankcostmin = 0,
                            bankcostmax = 9999999
                        };
                        fastuserResult fastuserResult = HFJSTools.userspayopen(userspayopenbModel, CodeKey);
                        if (fastuserResult.respcode == "00")
                        {
                            if (fastuserResult.state == 1)
                            {
                                FastUserPay.BusiState = 1;
                            }
                            else
                            {
                                FastUserPay.BusiState = 4;
                                FastUserPay.BusiMsg   = fastuserResult.respcode + "[" + fastuserResult.respmsg + "]";
                            }
                        }
                        else
                        {
                            FastUserPay.BusiState = 4;
                            FastUserPay.BusiMsg   = fastuserResult.respcode + "[" + fastuserResult.respmsg + "]";
                        }
                        Entity.SaveChanges();
                    }

                    #endregion
                }
                #endregion
            }
            return(FastUser);
        }
        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();
        }
예제 #9
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 + "任务还在执行中!");
                }
            }
        }
예제 #10
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("[CardReg]:", "【Data】" + Data, Ex);
            }
            if (json == null)
            {
                DataObj.OutError("1000");
                return;
            }
            Card Card = new Card();

            Card = JsonToObject.ConvertJsonToModel(Card, json);

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

            if (baseUsers == null)//用户令牌不存在
            {
                DataObj.OutError("2004");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                DataObj.OutError("2003");
                return;
            }
            if (baseUsers.CardStae != 2)//未实名认证
            {
                DataObj.OutError("2006");
                return;
            }
            if (baseUsers.MiBao != 1)//未设置支付密码
            {
                DataObj.OutError("2008");
                return;
            }
            if (baseUsers.IsVip == 1)//是VIP不能再生成
            {
                DataObj.OutError("9001");
                return;
            }
            Card = Entity.Card.FirstOrDefault(n => n.Code == Card.Code && n.PasWd == Card.PasWd && n.Auto == 1);
            if (Card == null)
            {
                DataObj.OutError("5003");
                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("5003");
                return;
            }
            if (Card.AId.IsNullOrEmpty())
            {
                DataObj.OutError("5002");
                return;
            }
            if (Card.AdminId.IsNullOrEmpty())
            {
                DataObj.OutError("5002");
                return;
            }
            Card.State        = 2;//使用中
            Card.PUId         = baseUsers.Id;
            baseUsers.Agent   = Card.AId;
            baseUsers.CardNum = Card.Code;
            baseUsers.IsVip   = 1;

            //修改到app费率
            IList <UserPay> UserPayList = Entity.UserPay.Where(o => o.UId == baseUsers.Id).ToList();

            foreach (var temp in UserPayList)
            {
                if (temp.Cost > 0.005)
                {
                    temp.Cost = 0.005;
                }
            }
            // Entity.SaveChanges();


            //修改用户通道费率

            FastUserPay FastUserPay = Entity.FastUserPay.FirstOrDefault(o => o.UId == baseUsers.Id && o.BusiState == 1 && o.MerState == 1 && o.CardState == 1);

            if (FastUserPay != null)
            {
                FastPayWay         FastPayWay         = Entity.FastPayWay.FirstOrNew(o => o.State == 1);
                FastConfig         FastConfig         = Entity.FastConfig.FirstOrNew();
                decimal            Cost               = 0.005M;              //费率
                decimal            Cash               = FastConfig.UserCash; //手续费
                string[]           PayConfigArr       = FastPayWay.QueryArray.Split(',');
                string             Code               = PayConfigArr[0];
                string             CodeKey            = PayConfigArr[1];
                string             PayWayCode         = PayConfigArr[2];
                userspayopenbModel userspayopenbModel = new userspayopenbModel()
                {
                    merid      = FastUserPay.MerId,
                    paywaycode = PayWayCode,
                    code       = Code,
                    bankcost   = Cost,
                    //surcharge = 0,
                    cash        = Cash,
                    bankcostmin = 1.2M,
                    bankcostmax = 9999999
                };
                fastuserResult fastuserResult = HFJSTools.userspayedit(userspayopenbModel, CodeKey);
                if (fastuserResult.respcode == "00")
                {
                    if (fastuserResult.state == 1)
                    {
                        FastUserPay.BusiState = 1;
                        FastUserPay.BusiMsg   = fastuserResult.respcode + "升级Vip[" + fastuserResult.respmsg + "]";
                        FastUserPay.UserCost3 = 0.005M;
                    }
                    else
                    {
                        FastUserPay.BusiState = 4;
                        FastUserPay.BusiMsg   = fastuserResult.respcode + "升级Vip[" + fastuserResult.respmsg + "]";
                    }
                }
                else
                {
                    FastUserPay.BusiState = 4;
                    FastUserPay.BusiMsg   = fastuserResult.respcode + "升级Vip[" + fastuserResult.respmsg + "]";
                }
            }
            Entity.SaveChanges();
            DataObj.Data = baseUsers.ToString();
            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());
        }
        /// <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 ActionResult Index(FastUserPay FastUserPay, EFPagingInfo <FastUserPay> p, DateTime?STime, DateTime?ETime, int IsFirst = 0)
        {
            #region 筛选条件
            if (!FastUserPay.MerId.IsNullOrEmpty())
            {
                switch (FastUserPay.Bin)
                {
                case "1":
                    var ids = this.Entity.Users.Where(o => o.TrueName.Contains(FastUserPay.MerId)).Select(o => o.Id).ToList();
                    p.SqlWhere.Add(f => ids.Contains(f.UId));
                    break;

                case "2":
                    var uid = this.Entity.Users.Where(o => o.UserName.Contains(FastUserPay.MerId)).Select(o => o.Id).ToList();
                    p.SqlWhere.Add(f => uid.Contains(f.UId));
                    break;
                }
            }
            if (!FastUserPay.MerState.IsNullOrEmpty())
            {
                var MerState = FastUserPay.MerState == 99 ? 0 : FastUserPay.MerState;
                p.SqlWhere.Add(f => f.MerState == MerState);
            }
            if (!FastUserPay.CardState.IsNullOrEmpty())
            {
                var CardState = FastUserPay.CardState == 99 ? 0 : FastUserPay.CardState;
                p.SqlWhere.Add(f => f.CardState == CardState);
            }
            if (!FastUserPay.BusiState.IsNullOrEmpty())
            {
                p.SqlWhere.Add(f => f.BusiState == FastUserPay.BusiState);
            }
            if (!FastUserPay.PayWay.IsNullOrEmpty())
            {
                p.SqlWhere.Add(f => f.PayWay == FastUserPay.PayWay);
            }
            if (STime.HasValue)
            {
                p.SqlWhere.Add(f => f.AddTime >= STime);
            }
            if (ETime.HasValue)
            {
                p.SqlWhere.Add(f => f.AddTime <= ETime);
            }
            #endregion
            p.OrderByList.Add("Id", "DESC");
            IPageOfItems <FastUserPay> FastUserPayList = null;
            if (IsFirst == 0)
            {
                FastUserPayList = new PageOfItems <FastUserPay>(new List <FastUserPay>(), 0, 10, 0, new Hashtable());
            }
            else
            {
                FastUserPayList = Entity.Selects <FastUserPay>(p);
            }
            var uids           = FastUserPayList.Select(o => o.UId).ToList();
            var UsersList      = this.Entity.Users.Where(o => uids.Contains(o.Id)).ToList();
            var FastPayWayList = this.Entity.FastPayWay.ToList();
            ViewBag.FastPayWayList  = FastPayWayList;
            ViewBag.UsersList       = UsersList;
            ViewBag.FastUserPayList = FastUserPayList;
            ViewBag.FastUserPay     = FastUserPay;
            ViewBag.STime           = STime;
            ViewBag.ETime           = ETime;

            return(View());
        }
예제 #14
0
        public void Pay()
        {
            string[] IdArr = "12715,12873,13267,13349,13655,13740,14421,14443,14961,15250,15251,15833,16218,17416,17695,17696,17703,17778,18076,19020,19092,20256,20422,20528,20529,21292,21293,21464,21486,22510,23328,23659,23660,24069,24123,24346,24478,24989,24990,25181,25483,26387,26644,27177,27239,27240,27552,27731,29083,29990,30209,30840,31152,31269,31831,32229,32387,32564,32641,32642,32650,33001,33040,33041,33056,33096,33191,33783,34060,34125,34239,34245,34606,34742,34982,34983,35314,35870,35903,36398,36806,36807,37141,37571,37585,37705,37782,37809,37988,38109,38110,38195,38316,39092,39093,39149,39513,39543,39614,40033,40255,40930,43375,43376,43598,44631,45373,45374,45517,46271,46403,46878,46923,46924,47753,47754,47915,47985,48608,49486,49712,49713,49881,50040,50537,50567,50947,51702,52040,52519,52603,52982,53722,54276,55672,55689,56117,56333,56472,56934,57382,58289,58619,58822,58823,59565,60919,60957,60984,60992,61129,61526,62028,62942,62951,63285,64497,64679,64685,64796,74721,75683,77491,77545".Split(',');
            foreach (var p in IdArr)
            {
                int         Id          = Int32.Parse(p);
                FastUserPay FastUserPay = Entity.FastUserPay.FirstOrDefault(n => n.Id == Id);
                FastPayWay  FastPayWay  = Entity.FastPayWay.FirstOrDefault(n => n.Id == FastUserPay.PayWay);
                FastUser    FastUser    = Entity.FastUser.FirstOrDefault(n => n.UId == FastUserPay.UId);
                FastUserPay.Bank      = FastUser.Bank;
                FastUserPay.Card      = FastUser.Card;
                FastUserPay.Bin       = FastUser.Bin;
                FastUserPay.CardState = 2;
                Entity.SaveChanges();
                string[] PayConfigArr = FastPayWay.QueryArray.Split(',');
                if (FastPayWay.DllName == "MiShua")
                {
                    //米刷一户一码,标识删除,重新绑卡?坐等接口
                    if (PayConfigArr.Length == 4)
                    {
                        string MchNo      = PayConfigArr[0]; //商户号
                        string EncryptKey = PayConfigArr[1]; //加密key
                        string EncryptIV  = PayConfigArr[2]; //偏移量
                        string SignKey    = PayConfigArr[3]; //签名key

                        #region 修改商户

                        string MiPayUrl = "http://pay.mishua.cn/zhonlinepay/service/down/trans/editMerchant";

                        SortedDictionary <string, string> sortDic = new SortedDictionary <string, string>();
                        sortDic.Add("versionNo", "1");
                        sortDic.Add("mchNo", MchNo);
                        sortDic.Add("subMchNo", FastUserPay.MerId);

                        sortDic.Add("accNo", FastUserPay.Card);
                        sortDic.Add("accName", FastUserPay.CardName);
                        sortDic.Add("bankName", FastUserPay.Bank);
                        sortDic.Add("bankType", FastUserPay.Bin);

                        Dictionary <string, string> Dic = MiTools.FilterPara(sortDic);
                        string PostJson = new JavaScriptSerializer().Serialize(Dic);
                        //AES加密
                        string EnString = MiTools.DesEncrypt(PostJson, EncryptKey, EncryptIV);
                        //签名
                        string  Sign       = (EnString + SignKey).GetMD5().ToUpper();
                        string  jsonString = "{\"mchNo\": \"" + MchNo + "\",\"payload\": \"" + EnString + "\",\"sign\": \"" + Sign + "\"}";
                        string  result     = MiTools.JsonPost(MiPayUrl, jsonString);
                        JObject obj        = new JObject();
                        try
                        {
                            obj = (JObject)JsonConvert.DeserializeObject(result);
                        }
                        catch (Exception)
                        {
                            obj = null;
                        }
                        if (obj != null)
                        {
                            string state = "";
                            if (obj["state"] != null)
                            {
                                state = obj["state"].ToString();
                            }
                            if (state == "Successful")
                            {
                                string  EnReturn  = obj["payload"].ToString();
                                string  resultStr = MiTools.DesDecrypt(EnReturn, EncryptKey, EncryptIV);
                                JObject json      = (JObject)JsonConvert.DeserializeObject(resultStr);
                                string  status    = json["status"].ToString();
                                string  subMchNo  = json["subMchNo"].ToString();
                                FastUserPay.MerId = subMchNo;
                                if (status == "00")//成功
                                {
                                    FastUserPay.CardState = 1;
                                }
                                if (status == "01")//处理中
                                {
                                    FastUserPay.CardState = 3;
                                }
                                if (status == "02")//失败
                                {
                                    FastUserPay.CardState = 4;
                                }
                            }
                            else
                            {
                                string message = obj["message"].ToString();
                                FastUserPay.CardMsg = message;
                            }
                            Entity.SaveChanges();
                        }
                        #endregion
                    }
                }
            }
        }