示例#1
0
        public async Task <QueryReturn> Query(string mchid, string orderid, string sign)
        {
            QueryReturn r = new QueryReturn();

            SortedDictionary <string, string> para = new SortedDictionary <string, string>();

            para.Add("mchid", mchid);
            para.Add("orderid", orderid);

            string temp = string.Format("{0}&key={1}", OnlineSettle.GetParamSrc(para), DB.MchKey);

            Dos.Common.LogHelper.Debug(temp);



            if (mchid != DB.MchId)
            {
                r.ReturnMsg = "商户号不存在";
                return(r);
            }


            temp = Dos.Common.EncryptHelper.MD5EncryptWeChat(temp, "utf-8");

            if (temp != sign)
            {
                r.ReturnMsg = "签名错误";
                return(r);
            }


            return(await Settle_OrderBll.Instance.Query(mchid, orderid));
        }
示例#2
0
        /// <summary>
        /// 回调接口
        /// </summary>
        /// <param name="pid"></param>
        /// <param name="mid"></param>
        /// <param name="Request"></param>
        /// <param name="Response"></param>
        /// <returns></returns>
        public async Task <NotifyReturnModel> CallBack(int pid, int mid, Microsoft.AspNetCore.Http.HttpRequest Request, Microsoft.AspNetCore.Http.HttpResponse Response)
        {
            SettlePlat   p         = OnlineSettle.GetPlat(pid);
            SettleMch    m         = OnlineSettle.GetMch(mid);
            OnlineSettle onlinepay = (OnlineSettle)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m);

            NotifyReturnModel r = await onlinepay.CallBack(Request);

            if (r.IsCheck)
            {
                if (r.IsPay == 1)
                {
                    SettleOrder order = DbContext._.Db.From <SettleOrder>().Where(o => o.Order_id == r.OrderNumber).ToFirstDefault();

                    if (order != null && string.IsNullOrEmpty(order.Order_id))
                    {
                        if (order.Status == 0)
                        {
                            order.Attach(EntityState.Modified);
                            order.Status          = 1;
                            order.Finish_time     = DateTime.Now.ToTimeStamp();
                            order.Pay_amount      = r.Totalfee;
                            order.Notify_status   = 0;
                            order.Notify_times    = 0;
                            order.Notify_lasttime = DateTime.Now.ToTimeStamp();
                            order.Returnmsg       = r.ReturnMsg;
                            DbContext._.Db.Save(order);
                        }
                    }
                }
            }

            if (string.IsNullOrEmpty(r.OrderNumber))
            {
                SettleOrder order = DbContext._.Db.From <SettleOrder>().Where(o => o.Order_id == r.OrderNumber).ToFirstDefault();

                if (order != null && !string.IsNullOrEmpty(order.Order_id) && !string.IsNullOrEmpty(order.Callback_url))
                {
                    SortedDictionary <string, string> para = new SortedDictionary <string, string>();

                    para.Add("mchid", WebConfig.MchId);
                    para.Add("orderid", order.Order_id);
                    para.Add("serialid", order.Plat_order_id);
                    para.Add("amount", order.Pay_amount.ToString());
                    para.Add("attach", order.Attach);
                    para.Add("status", order.Status.ToString());

                    string sign = string.Format("{0}&key={1}", OnlineSettle.GetParamSrc(para), WebConfig.MchKey);
                    sign = Dos.Common.EncryptHelper.MD5EncryptWeChat(sign, "utf-8");

                    para.Add("sign", sign);

                    Response.Redirect(string.Format("{0}?{1}", order.Callback_url, OnlineSettle.GetParamSrc(para)));
                }
            }
            return(r);
        }
示例#3
0
        /// <summary>
        /// 通知接口
        /// </summary>
        /// <param name="pid"></param>
        /// <param name="mid"></param>
        /// <param name="Request"></param>
        /// <returns></returns>
        public async Task <NotifyReturnModel> Notify(int pid, int mid, Microsoft.AspNetCore.Http.HttpRequest Request)
        {
            SettlePlat   p         = OnlineSettle.GetPlat(pid);
            SettleMch    m         = OnlineSettle.GetMch(mid);
            OnlineSettle onlinepay = (OnlineSettle)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m);

            NotifyReturnModel r = await onlinepay.Notify(Request);

            if (r.IsCheck)
            {
                if (r.IsPay == 1)
                {
                    SettleOrder order = DbContext._.Db.From <SettleOrder>().Where(o => o.Order_id == r.OrderNumber).ToFirstDefault();

                    if (order != null && !string.IsNullOrEmpty(order.Order_id))
                    {
                        if (order.Status == 0)
                        {
                            order.Attach(EntityState.Modified);
                            order.Status          = 1;
                            order.Finish_time     = DateTime.Now.ToTimeStamp();
                            order.Pay_amount      = r.Totalfee;
                            order.Notify_status   = 0;
                            order.Notify_times    = 0;
                            order.Notify_lasttime = DateTime.Now.ToTimeStamp();
                            order.Plat_order_id   = r.SerialNumber;
                            order.Returnmsg       = r.ReturnMsg;
                            DbContext._.Db.Save(order);
                        }
                    }
                }
                else
                {
                    SettleOrder order = DbContext._.Db.From <SettleOrder>().Where(o => o.Order_id == r.OrderNumber).ToFirstDefault();

                    if (order != null && !string.IsNullOrEmpty(order.Order_id))
                    {
                        if (order.Status == 0)
                        {
                            order.Attach(EntityState.Modified);
                            order.Returnmsg = r.ReturnMsg;
                            DbContext._.Db.Save(order);
                        }
                    }
                }
                return(r);
            }
            else
            {
                return(r);
            }
        }
示例#4
0
        public async Task <UnifiedorderReturn> Unifiedorder(string mchid, string orderid,
                                                            string bank_name, string bank_branch, string bank_card_number, string bank_account,
                                                            string amount, string attach, string ip, string callbackurl, string notifyurl, string sign)
        {
            SortedDictionary <string, string> para = new SortedDictionary <string, string>();

            para.Add("mchid", mchid);
            para.Add("orderid", orderid);
            para.Add("bank_name", bank_name);
            para.Add("bank_branch", bank_branch);
            para.Add("bank_card_number", bank_card_number);
            para.Add("bank_account", bank_account);
            para.Add("amount", amount);
            para.Add("attach", attach);
            para.Add("ip", ip);
            para.Add("callbackurl", callbackurl);
            para.Add("notifyurl", notifyurl);

            string temp = string.Format("{0}&key={1}", OnlineSettle.GetParamSrc(para), DB.MchKey);

            Dos.Common.LogHelper.Debug(temp);

            UnifiedorderReturn r = new UnifiedorderReturn();

            if (mchid != DB.MchId)
            {
                r.Type    = PayReturnType.Err;
                r.Content = "商户号不存在";
                return(r);
            }


            temp = Dos.Common.EncryptHelper.MD5EncryptWeChat(temp, "utf-8");

            if (temp != sign)
            {
                r.Type    = PayReturnType.Err;
                r.Content = "签名错误";
                return(r);
            }


            return(await Settle_OrderBll.Instance.Unifiedorder(mchid, orderid, bank_name, bank_branch, bank_card_number, bank_account, amount, attach, ip, callbackurl, notifyurl));
        }
示例#5
0
        public async Task <UnifiedOrderReturnModel> Unifiedorder([FromForm] SettleOrderModel settleOrder)
        {
            SortedDictionary <string, string> para = new SortedDictionary <string, string>();

            para.Add("appid", settleOrder.AppId); //约定好的id
            para.Add("mchid", settleOrder.MchId); //传输过来的商户标识ID
            para.Add("orderid", settleOrder.OrderId);
            para.Add("bank_name", settleOrder.Bank_Name);
            para.Add("bank_branch", settleOrder.Bank_Branch);
            para.Add("bank_card_number", settleOrder.Bank_Card_Number);
            para.Add("bank_account", settleOrder.Bank_Account);
            para.Add("amount", settleOrder.Amount);
            para.Add("attach", settleOrder.Attach);
            para.Add("ip", settleOrder.Ip);
            para.Add("callbackurl", settleOrder.CallBackUrl);
            para.Add("notifyurl", settleOrder.NotifyUrl);

            string temp = string.Format("{0}&key={1}", OnlineSettle.GetParamSrc(para), WebConfig.MchKey);

            Dos.Common.LogHelper.Debug(temp);

            UnifiedOrderReturnModel r = new UnifiedOrderReturnModel();

            if (settleOrder.AppId != WebConfig.MchId)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "商户号不存在";
                return(r);
            }

            string cusSign = Dos.Common.EncryptHelper.MD5EncryptWeChat(temp, "utf-8");

            if (cusSign.ToLower() != settleOrder.Sign.ToLower())
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "签名错误";
                return(r);
            }

            return(await SettleOrderBll._.Unifiedorder(settleOrder.AppId, settleOrder.MchId, settleOrder.OrderId, settleOrder.Bank_Name, settleOrder.Bank_Branch, settleOrder.Bank_Card_Number, settleOrder.Bank_Account, settleOrder.Amount, settleOrder.Attach, settleOrder.Ip, settleOrder.CallBackUrl, settleOrder.NotifyUrl));
        }
示例#6
0
        /// <summary>
        /// 统一下单
        /// </summary>
        /// <param name="mchid"></param>
        /// <param name="orderid"></param>
        /// <param name="body"></param>
        /// <param name="paytype"></param>
        /// <param name="amount"></param>
        /// <param name="attach"></param>
        /// <param name="ip"></param>
        /// <param name="callbackurl"></param>
        /// <param name="notifyurl"></param>
        /// <param name="sign"></param>
        /// <returns></returns>
        public async Task <UnifiedOrderReturnModel> Unifiedorder(string appid, string mchid, string orderid, string Bank_name, string Bank_branch, string Bank_card_number, string Bank_account, string amount, string attach, string ip, string callbackurl, string notifyurl)
        {
            UnifiedOrderReturnModel r = new UnifiedOrderReturnModel();

            if (appid != WebConfig.MchId)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "约定的appid错误";
                return(r);
            }


            decimal fee = 0;

            decimal.TryParse(amount, out fee);

            if (fee <= 0)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "打款金额必须大于0";
                return(r);
            }

            //SettleMch m = OnlineSettle.MchList.FindAll(pp => pp.Nullity == false && ("" + pp.BankList + ",").Contains("," + Bank_name.Trim() + ",")
            // && (pp.Max_money == 0 || pp.Max_money >= fee) && (pp.Min_money == 0 || pp.Min_money <= fee)).OrderBy(i => Guid.NewGuid()).FirstOrDefault();
            SettleMch m = OnlineSettle.MchList.FindAll(pp => pp.Id == Convert.ToInt32(mchid) && pp.Nullity == false && ("," + pp.BankList + ",").Contains("," + Bank_name.Trim() + ",") &&
                                                       (pp.Max_money >= fee) && (pp.Min_money <= fee)).OrderBy(i => Guid.NewGuid()).FirstOrDefault();

            if (m == null)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "平台没有可用的打款渠道";
                return(r);
            }

            SettlePlat p = OnlineSettle.GetPlat(m.Plat_id);

            if (p == null)
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "平台支付渠道有误";
                return(r);
            }

            if (DbContext._.Db.Exists <SettleOrder>(o => o.Order_id == orderid))
            {
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "订单号已经存在";
                return(r);
            }

            SettleOrder order = new SettleOrder();

            order.Order_id         = orderid;
            order.Plat_order_id    = "";
            order.Mch_id           = m.Id;
            order.Order_amount     = fee;
            order.Pay_amount       = 0;
            order.Bank_name        = Bank_name.Trim();
            order.Bank_branch      = Bank_branch.Trim();
            order.Bank_card_number = Bank_card_number.Trim();
            order.Bank_account     = Bank_account.Trim();
            order.Status           = 0;
            order.Callback_url     = callbackurl;
            order.Notify_url       = notifyurl;
            order.Create_time      = DateTime.Now.ToTimeStamp();
            order.Update_time      = order.Create_time;
            order.Finish_time      = order.Update_time;
            order.Notify_status    = 0;
            order.Notify_lasttime  = order.Update_time;
            order.Notify_times     = 0;
            order.Attach           = attach;

            bool isSuccess = false;

            try
            {
                isSuccess = DbContext._.Db.Insert <SettleOrder>(order) > 0;
            }
            catch (Exception e)
            {
                string err = e.Message;
                throw;
            }

            OnlineSettle onlinepay = (OnlineSettle)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m);


            r = await onlinepay.Unifiedorder(orderid, Bank_name, Bank_branch, Bank_card_number, Bank_account, fee, ip, attach);

            if (r.Type != 0)
            {
                order.Plat_order_id = r.SerialNumber;
                order.Pay_amount    = decimal.Parse(r.RealPrice);
                order.Returnmsg     = r.Content;
            }
            return(r);
        }
示例#7
0
        public async Task <string> SendNotify(string orderid, bool isSystem = true, bool isAsyn = true)
        {
            SettleOrder o = DbContext._.Db.From <SettleOrder>().Where(p => p.Order_id == orderid).First();

            if (o == null || o.Order_id != orderid)
            {
                return("订单不存在");
            }
            if (o.Status != 1)
            {
                return("订单状态还未成功");
            }
            if (o.Notify_status == 1)
            {
                return("订单异步通知已成功");
            }
            if (o.Notify_url.Length < 7)
            {
                return("订单通知地址不误");
            }
            SortedDictionary <string, string> para = new SortedDictionary <string, string>();

            para.Add("mchid", WebConfig.MchId);
            para.Add("orderid", o.Order_id);
            para.Add("serialid", o.Plat_order_id);
            para.Add("amount", o.Pay_amount.ToString());
            para.Add("attach", o.Attach);
            para.Add("msg", o.Returnmsg);
            para.Add("status", o.Status.ToString());

            string sign = string.Format("{0}&key={1}", OnlineSettle.GetParamSrc(para), WebConfig.MchKey);

            sign = Dos.Common.EncryptHelper.MD5EncryptWeChat(sign, "utf-8");

            para.Add("sign", sign);

            string msg = "异步通知发送中...";

            if (isAsyn)
            {
                msg =
                    Task.Run(() =>
                {
                    string r;
                    try
                    {
                        r = WebUtils.Post(o.Notify_url, WebUtils.BuildQuery(para, "utf-8"));
                    }
                    catch (Exception ee)
                    {
                        r = ee.ToString();
                    }

                    if (o.Notify_status != 1)
                    {
                        o.Attach(EntityState.Modified);
                        if (r == "ok")
                        {
                            o.Notify_status = 1;
                        }
                        else
                        {
                            o.Notify_status = 2;
                        }
                        if (o.Notify_times == null)
                        {
                            o.Notify_times = 0;
                        }

                        o.Notify_times    = o.Notify_times + 1;
                        o.Notify_lasttime = DateTime.Now.ToTimeStamp();
                        if (isSystem)
                        {
                            if (o.Notify_status != 1)
                            {
                                switch (o.Notify_times)
                                {
                                case 1: Publish(WebConfig.MchId, o.Order_id, 60); break;        //1分钟后再次通知

                                case 2: Publish(WebConfig.MchId, o.Order_id, 300); break;       //5分钟后再次通知

                                case 3: Publish(WebConfig.MchId, o.Order_id, 900); break;       //15分钟后再次通知

                                case 4: Publish(WebConfig.MchId, o.Order_id, 7200); break;      //2小时后再次通知

                                case 5: Publish(WebConfig.MchId, o.Order_id, 21600); break;     //6小时后再次通知

                                default: break;
                                }
                            }
                        }
                        DbContext._.Db.Save(o);
                    }
                    return(r);
                }).Result;
                return(msg);
            }
            else
            {
                string r;
                try
                {
                    r = WebUtils.Post(o.Notify_url, WebUtils.BuildQuery(para, "utf-8"));
                }
                catch (Exception ee)
                {
                    r = ee.ToString();
                }

                if (o.Notify_status != 1)
                {
                    o.Attach(EntityState.Modified);
                    if (r == "ok")
                    {
                        o.Notify_status = 1;
                    }
                    else
                    {
                        o.Notify_status = 2;
                    }
                    if (o.Notify_times == null)
                    {
                        o.Notify_times = 0;
                    }

                    o.Notify_times    = o.Notify_times + 1;
                    o.Notify_lasttime = DateTime.Now.ToTimeStamp();
                    if (isSystem)
                    {
                        if (o.Notify_status != 1)
                        {
                            switch (o.Notify_times)
                            {
                            case 1: Publish(WebConfig.MchId, o.Order_id, 60); break;       //1分钟后再次通知

                            case 2: Publish(WebConfig.MchId, o.Order_id, 300); break;      //5分钟后再次通知

                            case 3: Publish(WebConfig.MchId, o.Order_id, 900); break;      //15分钟后再次通知

                            case 4: Publish(WebConfig.MchId, o.Order_id, 7200); break;     //2小时后再次通知

                            case 5: Publish(WebConfig.MchId, o.Order_id, 21600); break;    //6小时后再次通知

                            default: break;
                            }
                        }
                    }
                    DbContext._.Db.Save(o);
                }
                return(r);
            }
        }
示例#8
0
        /// <summary>
        /// 查询接口
        /// </summary>
        /// <param name="mchid"></param>
        /// <param name="orderid"></param>
        /// <param name="sign"></param>
        /// <returns></returns>
        public async Task <QueryReturnModel> Query(string mchid, string orderid)
        {
            QueryReturnModel r = new QueryReturnModel();

            if (mchid != WebConfig.MchId)
            {
                r.ReturnMsg = "商户号不存在";
                return(r);
            }

            SettleOrder order = DbContext._.Db.From <SettleOrder>().Where(p => p.Order_id == orderid).ToFirstDefault();

            if (order == null || string.IsNullOrEmpty(order.Order_id))
            {
                r.ReturnMsg = "订单不存在";
                return(r);
            }

            if (order.Status == 1)
            {
                r.ReturnMsg    = "ok";
                r.IsPay        = 1;
                r.OrderNumber  = order.Order_id;
                r.SerialNumber = order.Plat_order_id;
                r.Totalfee     = order.Pay_amount;
                r.Attach       = order.Attach;
                return(r);
            }
            else
            {
                SettleMch mch = OnlineSettle.GetMch(order.Mch_id);

                if (mch == null)
                {
                    r.ReturnMsg = "平台商户信息错误";
                    return(r);
                }

                SettlePlat plat = OnlineSettle.GetPlat(mch.Plat_id);
                if (plat == null)
                {
                    r.ReturnMsg = "平台渠道信息错误";
                    return(r);
                }

                OnlineSettle onlinepay = (OnlineSettle)Activator.CreateInstance(Type.GetType(plat.Plat_class), plat, mch);


                r = await onlinepay.OrderQuery(order.Order_id);

                if (r.ReturnMsg == "ok" && r.IsPay == 1)
                {
                    order.Attach(EntityState.Modified);
                    order.Status = 1;
                    if (r.Totalfee > 0)
                    {
                        order.Pay_amount = r.Totalfee;
                    }

                    order.Finish_time = DateTime.Now.ToTimeStamp();
                    order.Returnmsg   = r.ReturnMsg;
                    DbContext._.Db.Save(order);
                }
                else
                {
                    order.Attach(EntityState.Modified);
                    order.Returnmsg = r.ReturnMsg;
                    DbContext._.Db.Save(order);
                }

                return(r);
            }
        }
示例#9
0
        /// <summary>
        /// 统一下单
        /// </summary>
        /// <param name="mchid"></param>
        /// <param name="orderid"></param>
        /// <param name="body"></param>
        /// <param name="paytype"></param>
        /// <param name="amount"></param>
        /// <param name="attach"></param>
        /// <param name="ip"></param>
        /// <param name="callbackurl"></param>
        /// <param name="notifyurl"></param>
        /// <param name="sign"></param>
        /// <returns></returns>
        public async Task <UnifiedorderReturn> Unifiedorder(string mchid, string orderid, string Bank_name, string Bank_branch, string Bank_card_number, string Bank_account, string amount, string attach, string ip, string callbackurl, string notifyurl)
        {
            UnifiedorderReturn r = new UnifiedorderReturn();

            if (mchid != DB.MchId)
            {
                r.Type    = PayReturnType.Err;
                r.Content = "商户号不存在";
                return(r);
            }


            decimal fee = 0;

            decimal.TryParse(amount, out fee);

            if (fee <= 0)
            {
                r.Type    = PayReturnType.Err;
                r.Content = "打款金额必须大于0";
                return(r);
            }

            Settle_mch m = OnlineSettle.MchList.FindAll(pp => pp.Nullity == false && ("" + pp.BankList + ",").Contains("," + Bank_name.Trim() + ",") &&
                                                        (pp.Max_money == 0 || pp.Max_money >= fee) && (pp.Min_money == 0 || pp.Min_money <= fee)).OrderBy(i => Guid.NewGuid()).First();

            if (m == null)
            {
                r.Type    = PayReturnType.Err;
                r.Content = "平台没有可用的打款渠道";
                return(r);
            }

            Settle_plat p = OnlineSettle.GetPlat(m.Plat_id);

            if (p == null)
            {
                r.Type    = PayReturnType.Err;
                r.Content = "平台支付渠道有误";
                return(r);
            }

            if (DB.Context.Exists <Settle_order>(o => o.Order_id == orderid))
            {
                r.Type    = PayReturnType.Err;
                r.Content = "订单号已经存在";
                return(r);
            }

            Settle_order order = new Settle_order();

            order.Order_id         = orderid;
            order.Mch_id           = m.Id;
            order.Order_amount     = fee;
            order.Pay_amount       = 0;
            order.Bank_name        = Bank_name.Trim();
            order.Bank_branch      = Bank_branch.Trim();
            order.Bank_card_number = Bank_card_number.Trim();
            order.Bank_account     = Bank_account.Trim();
            order.Status           = 0;
            order.Callback_url     = callbackurl;
            order.Notify_url       = notifyurl;
            order.Create_time      = DateTime.Now.ToTimeStamp();
            order.Update_time      = order.Create_time;
            order.Finish_time      = order.Update_time;
            order.Notify_status    = 0;
            order.Notify_lasttime  = order.Update_time;
            order.Notify_times     = 0;
            order.Attach           = attach;


            OnlineSettle onlinepay = (OnlineSettle)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m);


            r = await onlinepay.Unifiedorder(orderid, Bank_name, Bank_branch, Bank_card_number, Bank_account, fee, ip, attach);

            if (r.Type != 0)
            {
                order.Plat_order_id = r.SerialNumber;
                order.Pay_amount    = decimal.Parse(r.RealPrice);
                order.Returnmsg     = r.Content;
            }

            DB.Context.Save(order);
            return(r);
        }
示例#10
0
        public async Task <string> SendNotify(string orderid)
        {
            Settle_order o = DB.Context.From <Settle_order>().Where(p => p.Order_id == orderid).First();

            if (o == null || o.Order_id != orderid)
            {
                return("订单不存在");
            }
            if (o.Notify_url.Length < 7)
            {
                return("订单通知地址不误");
            }
            SortedDictionary <string, string> para = new SortedDictionary <string, string>();

            para.Add("mchid", DB.MchId);
            para.Add("orderid", o.Order_id);
            para.Add("serialid", o.Plat_order_id);
            para.Add("amount", o.Pay_amount.ToString());
            para.Add("attach", o.Attach);
            para.Add("msg", o.Returnmsg);
            para.Add("status", o.Status.ToString());

            string sign = string.Format("{0}&key={1}", OnlineSettle.GetParamSrc(para), DB.MchKey);

            sign = Dos.Common.EncryptHelper.MD5EncryptWeChat(sign, "utf-8");

            para.Add("sign", sign);

            string msg =
                Task.Run(() => {
                string r;
                try
                {
                    r = Dos.Common.HttpHelper.Post(
                        new Dos.Common.HttpParam
                    {
                        Url       = o.Notify_url,
                        Encoding  = System.Text.Encoding.UTF8,
                        ParamType = Dos.Common.EnumHelper.HttpParamType.Form,
                        GetParam  = para
                    }
                        );
                }
                catch (Exception ee)
                {
                    r = ee.ToString();
                }
                return(r);
            }).Result;


            if (o.Notify_status < 2)
            {
                if (msg == "ok")
                {
                    o.Notify_status = 2;
                }
                else
                {
                    o.Notify_status = 1;
                }
                if (o.Notify_times == null)
                {
                    o.Notify_times = 0;
                }

                o.Notify_times    = o.Notify_times + 1;
                o.Notify_lasttime = DateTime.Now.ToTimeStamp();

                if (o.Notify_status != 2)
                {
                    switch (o.Notify_times)
                    {
                    case 1: Publish(DB.MchId, o.Order_id, 60); break;       //1分钟后再次通知

                    case 2: Publish(DB.MchId, o.Order_id, 300); break;      //5分钟后再次通知

                    case 3: Publish(DB.MchId, o.Order_id, 900); break;      //15分钟后再次通知

                    case 4: Publish(DB.MchId, o.Order_id, 7200); break;     //2小时后再次通知

                    case 5: Publish(DB.MchId, o.Order_id, 21600); break;    //6小时后再次通知

                    default: break;
                    }
                }


                DB.Context.Save(o);
            }

            return(msg);
        }