Esempio n. 1
0
        public void Execute(IJobExecutionContext context)
        {
            string JobName = "FastQuery";
            string CanRun  = ConfigurationManager.AppSettings["Run" + JobName].ToString();

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