Beispiel #1
0
 public ActionResult Orders(int ID, int Refresh = 0)
 {
     if (Refresh == 1)
     {
         var p = new Order();
         p.MID = Client.MID;
         p.ID = ID;
         DAL.Update.RefreshOrder(p);
     }
     var Order = DAL.Get.Order(Client.MID, ID);
     if (Order.Status < 10 && Order.ID > 0)
     {
         var Balance = DAL.Get.Balance(Client.MID);
         //余额若已不足以支付订单,刷新订单
         if (Order.Credit > Balance.Amount)
         {
             DAL.Update.RefreshOrder(Order);
             Order = DAL.Get.Order(Client.MID, ID);
         }
         ViewData["Order"] = Order;
         ViewData["Balance"] = Balance;
     }
     else
     {
         string Url = string.Format("{0}/Payment/Buy?OrderID={1}&msg={2}", C.APP, Order.OrderID, "Success");
         Response.Redirect(Url);
     }
     return View();
 }
Beispiel #2
0
        public static R CommitOrder(Order p)
        {
            var m = new R();
            try
            {
                SqlParameter[] param =
                {
                    new SqlParameter("@r",0),
                    new SqlParameter("@Code",0),
                    new SqlParameter("@Message",SqlDbType.NVarChar,4000),
                    new SqlParameter("@MID",p.MID),
                    new SqlParameter("@ID",p.ID),
                    new SqlParameter("@Cash",p.Cash),
                    new SqlParameter("@Credit",p.Credit)

                };
                param[0].Direction = ParameterDirection.ReturnValue;
                param[1].Direction = ParameterDirection.Output;
                param[2].Direction = ParameterDirection.Output;
                var r = SqlHelper.ExecuteNonQuery(C.conn, CommandType.StoredProcedure, "Update_CommitOrder", param);
                m.Code = Convert.ToInt32(param[1].Value);
                m.Message = Convert.ToString(param[2].Value);
                m.Value = Convert.ToInt32(param[0].Value);

            }
            catch (Exception ex)
            {
                m.Code = 300;
                m.Message = ex.Message;
                log.Fatal(ex.Message);
                log.FatalException(ex.Message, ex);
            }
            return m;
        }
Beispiel #3
0
        public JsonResult OrdersData(int ID, int Refresh = 0)
        {
            if (Refresh == 1)
            {
                var p = new Order();
                p.MID = Client.MID;
                p.ID = ID;
                DAL.Update.RefreshOrder(p);
            }
            var Order = DAL.Get.Order(Client.MID, ID);
            var Balance = DAL.Get.Balance(Client.MID);

            var JSON = new { Order = Order, Balance = Balance };

            return Json(JSON);
        }
Beispiel #4
0
        public ActionResult CreateOrders()
        {
            string Tags = Request["IDS"];
            var p = new Order();
            p.MID = Client.MID;
            p.Tags = Tags;
            p.Memo = Tags;
            var r = DAL.Update.CreateOrder(p);
            if ((r.Code == 0 || r.Code == 1) && r.Value > 0)
            {
                string Url = string.Format("{0}/Payment/Orders/{1}?S={2}&Refresh={3}", C.APP, r.Value, r.Message, r.Code);
                Response.Redirect(Url);
            }

            return Content(string.Empty);
        }
Beispiel #5
0
        /// <summary>
        /// 后台服务器段调用,已无登录状态
        /// </summary>
        /// <returns></returns>
        public ActionResult CallBack()
        {
            string retText = string.Empty;
            bool IsSuccess = false;
            var Glog = new GatewayLog();
            try
            {
                string MerId = Request["MerId"];//商户号
                string BusiId = Request["BusiId"];//业务标识
                string OrdId = Request["OrdId"];//订单号
                string OrdAmt = Request["OrdAmt"];//订单金额
                string CuryId = Request["CuryId"];//币种
                string Version = Request["Version"];//版本
                string BgRetUrl = Request["BgRetUrl"];//后台地址
                string PageRetUrl = Request["PageRetUrl"];//前台地址
                string GateId = Request["GateId"];//网关

                string Param1 = Request["Param1"];//参数  MID
                string Param2 = Request["Param2"];//参数  Order.ID
                string Param3 = Request["Param3"];//参数
                string Param4 = Request["Param4"];//参数
                string Param5 = Request["Param5"];//参数
                string Param6 = Request["Param6"];//参数
                string Param7 = Request["Param7"];//参数
                string Param8 = Request["Param8"];//参数
                string Param9 = Request["Param9"];//参数
                string Param10 = Request["Param10"];//参数

                string ShareType = Request["ShareType"];//分账类型
                string ShareData = Request["ShareData"];//分账数据
                string Priv1 = Request["Priv1"];//商户私有域

                string CustomIp = Request["CustomIp"]; //IP

                string ChkValue = Request["ChkValue"]; //
                string PayStat = Request["PayStat"]; //PayStat表示交易状态,只有"1001"表示支付成功,其他状态均表示未成功的交易。因此验证签名数据通过后,还需要判定交易状态代码是否为"1001"
                string PayTime = Request["PayTime"]; //支付时间

                string plain = MerId + BusiId + OrdId + OrdAmt + CuryId + Version + GateId + Param1 + Param2 + Param3 + Param4 + Param5
                    + Param6 + Param7 + Param8 + Param9 + Param10 + ShareType + ShareData + Priv1 + CustomIp + PayStat + PayTime;

                Glog.MerId = MerId;//varchar(20)
                Glog.BusiId = BusiId;//varchar(10)
                Glog.OrdId = OrdId;//varchar(20)
                Glog.OrdAmt = OrdAmt;//decimal(18,0)
                Glog.Version = Version;//decimal(18,0)
                Glog.BgRetUrl = BgRetUrl;//varchar(100)
                Glog.PageRetUrl = PageRetUrl;//varchar(100)
                Glog.GateId = GateId;//decimal(18,0)
                Glog.Param1 = Param1;//nvarchar(100)
                Glog.Param2 = Param2;//nvarchar(100)
                Glog.Param3 = Param3;//nvarchar(100)
                Glog.Param4 = Param4;//nvarchar(100)
                Glog.Param5 = Param5;//nvarchar(100)
                Glog.Param6 = Param6;//nvarchar(100)
                Glog.Param7 = Param7;//nvarchar(100)
                Glog.Param8 = Param8;//nvarchar(100)
                Glog.Param9 = Param9;//nvarchar(100)
                Glog.Param10 = Param10;//nvarchar(100)
                Glog.OrdDesc = string.Empty;//nvarchar(256)
                Glog.ShareType = ShareType;//varchar(10)
                Glog.ShareData = ShareData;//nvarchar(100)
                Glog.Priv1 = Priv1;//nvarchar(60)
                Glog.CustomIp = CustomIp;//varchar(60)
                Glog.ChkValue = ChkValue;//varchar(256)
                Glog.Plain = plain;//varchar(256)
                Glog.PayStat = PayStat;//varchar(10)
                Glog.PayTime = PayTime;//varchar(20)

                // byte[] buffer = System.Text.UTF8Encoding.UTF8.GetBytes(plain);
                // plain = System.Text.Encoding.Default.GetString(buffer);

                string flag = string.Empty;
                try
                {
                    flag = com.hooyes.chinapay.Core2.checkData(plain, ChkValue);
                }
                catch (Exception ex1)
                {
                    flag = "-1"; //验签异常
                    log.Fatal("{0},{1}", ex1.Message, ex1.StackTrace);
                }

                Glog.Flag = flag;
                //验证签名数据通过后,一定要判定交易状态代码是否为"1001"
                if (flag == "0")
                {
                    int MID = Convert.ToInt32(Param1);
                    int ID = Convert.ToInt32(Param2); //Order.ID;
                    if (PayStat == "1001")
                    {

                        var OrderInfo = DAL.Get.Order(MID, ID);
                        if (OrderInfo.Status < 10 && OrderInfo.ID > 0)
                        {
                            var r = DAL.Update.CommitOrder(OrderInfo);

                            if (r.Code == 0)
                            {
                                // 订单完成
                                IsSuccess = true;
                                log.Info("CommitOrder Success,{0},{1}", MID, ID);

                            }
                            else
                            {
                                log.Fatal("CommitOrder Error:{0},{1},{2},{3}", MID, ID, r.Code, r.Message);
                                OrderInfo.Status = 9; //订单标记为异常
                                OrderInfo.Memo = r.Message;
                                r = DAL.Update.Order(OrderInfo);
                            }

                        }
                        else
                        {
                            if (OrderInfo.Status == 10)
                            {
                                IsSuccess = true;
                                log.Info("OrderInfo is Success {0},{1}", OrderInfo.OrderID, OrderInfo.Status);
                            }
                            else
                            {
                                log.Fatal("OrderInfo is Error {0},{1}", OrderInfo.OrderID, OrderInfo.Status);
                            }

                        }
                    }
                    else
                    {
                        // 取消订单
                        var p = new Order();
                        p.MID = MID;
                        p.ID = ID;
                        p.Status = 400;
                        p.Memo = PayStat;
                        var r = DAL.Update.Order(p);
                    }
                }

            }
            catch (Exception ex)
            {
                log.Fatal("{0},{1}", ex.Message, ex.StackTrace);
            }
            finally
            {
                // 日志记录
                log.Info("Glog:--{0}--{1}--", IsSuccess, Glog.OrdId);
                var t = Glog.GetType();
                foreach (var item in t.GetProperties())
                {
                    log.Info("{0}:{1}", item.Name, item.GetValue(Glog, null));
                }
                var r = DAL.Update.GatewayLog(Glog);
                log.Info("--LogToDB:{0},{1}", r.Code, r.Message);
                /*

                    商户后台地址接收到请求时,请立即返回包含eduok字样的响应信息。
                    统一支付平台则认为商户接收成功。如果商户不返回eduok这样的信息,
                    则统一支付平台将会每分钟发送1次,最多10次。直到商户返回eduok字样的成功信息。

                    日志记录成功后返回

                */
                if (r.Code == 0 && IsSuccess)
                {
                    retText = "eduok";
                }
                else
                {
                    log.Fatal("OrdId:{0}, CommitOrder Fail Retrying", Glog.OrdId);
                }
            }

            return Content(retText);
        }
Beispiel #6
0
        /// <summary>
        /// 前端调用
        /// </summary>
        /// <returns></returns>
        public ActionResult CallBack_Front()
        {
            var Glog = new GatewayLog();
            try
            {
                string MerId = Request["MerId"];//商户号
                string BusiId = Request["BusiId"];//业务标识
                string OrdId = Request["OrdId"];//订单号
                string OrdAmt = Request["OrdAmt"];//订单金额
                string CuryId = Request["CuryId"];//币种
                string Version = Request["Version"];//版本
                string BgRetUrl = Request["BgRetUrl"];//后台地址
                string PageRetUrl = Request["PageRetUrl"];//前台地址
                string GateId = Request["GateId"];//网关

                string Param1 = Request["Param1"];//参数  MID
                string Param2 = Request["Param2"];//参数  Order.ID
                string Param3 = Request["Param3"];//参数
                string Param4 = Request["Param4"];//参数
                string Param5 = Request["Param5"];//参数
                string Param6 = Request["Param6"];//参数
                string Param7 = Request["Param7"];//参数
                string Param8 = Request["Param8"];//参数
                string Param9 = Request["Param9"];//参数
                string Param10 = Request["Param10"];//参数

                string ShareType = Request["ShareType"];//分账类型
                string ShareData = Request["ShareData"];//分账数据
                string Priv1 = Request["Priv1"];//商户私有域

                string CustomIp = Request["CustomIp"]; //IP

                string ChkValue = Request["ChkValue"]; //
                string PayStat = Request["PayStat"]; //PayStat表示交易状态,只有"1001"表示支付成功,其他状态均表示未成功的交易。因此验证签名数据通过后,还需要判定交易状态代码是否为"1001"
                string PayTime = Request["PayTime"]; //支付时间

                string plain = MerId + BusiId + OrdId + OrdAmt + CuryId + Version + GateId + Param1 + Param2 + Param3 + Param4 + Param5
                    + Param6 + Param7 + Param8 + Param9 + Param10 + ShareType + ShareData + Priv1 + CustomIp + PayStat + PayTime;

                Glog.MerId = MerId;//varchar(20)
                Glog.BusiId = BusiId;//varchar(10)
                Glog.OrdId = OrdId;//varchar(20)
                Glog.OrdAmt = OrdAmt;//decimal(18,0)
                Glog.Version = Version;//decimal(18,0)
                Glog.BgRetUrl = BgRetUrl;//varchar(100)
                Glog.PageRetUrl = PageRetUrl;//varchar(100)
                Glog.GateId = GateId;//decimal(18,0)
                Glog.Param1 = Param1;//nvarchar(100)
                Glog.Param2 = Param2;//nvarchar(100)
                Glog.Param3 = Param3;//nvarchar(100)
                Glog.Param4 = Param4;//nvarchar(100)
                Glog.Param5 = Param5;//nvarchar(100)
                Glog.Param6 = Param6;//nvarchar(100)
                Glog.Param7 = Param7;//nvarchar(100)
                Glog.Param8 = Param8;//nvarchar(100)
                Glog.Param9 = Param9;//nvarchar(100)
                Glog.Param10 = Param10;//nvarchar(100)
                Glog.OrdDesc = "Front";//nvarchar(256)
                Glog.ShareType = ShareType;//varchar(10)
                Glog.ShareData = ShareData;//nvarchar(100)
                Glog.Priv1 = Priv1;//nvarchar(60)
                Glog.CustomIp = CustomIp;//varchar(60)
                Glog.ChkValue = ChkValue;//varchar(256)
                Glog.Plain = plain;//varchar(256)
                Glog.PayStat = PayStat;//varchar(10)
                Glog.PayTime = PayTime;//varchar(20)

                // byte[] buffer = System.Text.UTF8Encoding.UTF8.GetBytes(plain);
                // plain = System.Text.Encoding.Default.GetString(buffer);

                string flag = string.Empty;
                try
                {
                    flag = com.hooyes.chinapay.Core2.checkData(plain, ChkValue);
                }
                catch (Exception ex1)
                {
                    flag = "-1"; //验签异常
                    log.Fatal("{0},{1}", ex1.Message, ex1.StackTrace);
                }

                Glog.Flag = flag;
                //验证签名数据通过后,一定要判定交易状态代码是否为"1001"
                if (flag == "0")
                {
                    int MID = Convert.ToInt32(Param1);
                    int ID = Convert.ToInt32(Param2); //Order.ID;
                    if (PayStat == "1001")
                    {
                        var OrderInfo = DAL.Get.Order(MID, ID);
                        if (OrderInfo.Status < 10 && OrderInfo.ID > 0)
                        {
                            var r = DAL.Update.CommitOrder(OrderInfo);

                            if (r.Code == 0)
                            {
                                // 订单完成
                                log.Info("CommitOrder success,{0},{1}", MID, ID);
                            }
                            else
                            {
                                log.Fatal("CommitOrder Error:{0},{1},{2},{3}", MID, ID, r.Code, r.Message);
                                OrderInfo.Status = 9; //订单标记为异常
                                OrderInfo.Memo = r.Message;
                                r = DAL.Update.Order(OrderInfo);
                            }
                        }
                    }
                    else
                    {
                        // 取消订单
                        var p = new Order();
                        p.MID = MID;
                        p.ID = ID;
                        p.Status = 400;
                        p.Memo = PayStat;
                        var r = DAL.Update.Order(p);
                    }
                }

            }
            catch (Exception ex)
            {
                log.Fatal("{0},{1}", ex.Message, ex.StackTrace);
            }
            finally
            {
                // 日志记录
                log.Info("Glog:");
                var t = Glog.GetType();
                foreach (var item in t.GetProperties())
                {
                    log.Info("{0}:{1}", item.Name, item.GetValue(Glog, null));
                }
                var r = DAL.Update.GatewayLog(Glog);
                log.Info("--LogToDB:{0},{1}", r.Code, r.Message);

                // 进入确认页
                string Url = string.Format("{0}/Payment/OrdersDetail/{1}", C.APP, Glog.Param2);
                Response.Redirect(Url);
            }

            return Content(string.Empty);
        }
Beispiel #7
0
 public static List<Order> Order(int MID)
 {
     var lt = new List<Order>();
     try
     {
         SqlParameter[] param =
         {
             new SqlParameter("@MID",MID)
         };
         var dr = SqlHelper.ExecuteReader(C.conn, CommandType.StoredProcedure, "Get_Order", param);
         while (dr.Read())
         {
             var m = new Order();
             m.ID = Convert.ToInt32(dr["ID"]);
             m.OrderID = Convert.ToString(dr["OrderID"]);
             m.MID = Convert.ToInt32(dr["MID"]);
             m.Amount = Convert.ToDecimal(dr["Amount"]);
             m.Cash = Convert.ToDecimal(dr["Cash"]);
             m.Credit = Convert.ToDecimal(dr["Credit"]);
             m.Status = Convert.ToInt32(dr["Status"]);
             m.Tags = Convert.ToString(dr["Tags"]);
             if (DBNull.Value != dr["CreateDate"])
                 m.CreateDate = Convert.ToDateTime(dr["CreateDate"]);
             if (DBNull.Value != dr["UpdateDate"])
                 m.UpdateDate = Convert.ToDateTime(dr["UpdateDate"]);
             if (DBNull.Value != dr["Memo"])
                 m.Memo = Convert.ToString(dr["Memo"]);
             lt.Add(m);
         }
         dr.Close();
     }
     catch (Exception ex)
     {
         log.Fatal(ex.Message);
         log.Fatal(ex.StackTrace);
     }
     return lt;
 }
Beispiel #8
0
        public static R CreateOrder(Order p)
        {
            var m = new R();
            try
            {
                SqlParameter[] param =
                {
                    new SqlParameter("@r",0),
                    new SqlParameter("@OrderID",0),
                    new SqlParameter("@Code",0),
                    new SqlParameter("@Message",SqlDbType.NVarChar,4000),
                    new SqlParameter("@MID",p.MID),
                    new SqlParameter("@Tags",p.Tags),
                    new SqlParameter("@Memo",p.Memo)
                    
                };
                param[0].Direction = ParameterDirection.ReturnValue;
                param[1].Direction = ParameterDirection.Output; //OrderID
                param[2].Direction = ParameterDirection.Output; //Code
                param[3].Direction = ParameterDirection.Output; //Message
                var r = SqlHelper.ExecuteNonQuery(SqlHelper.Local, CommandType.StoredProcedure, "Update_CreateOrder", param);
                m.Code = Convert.ToInt32(param[2].Value);
                m.Message = Convert.ToString(param[1].Value);
                m.Value = Convert.ToInt32(param[0].Value);

            }
            catch (Exception ex)
            {
                m.Code = 300;
                m.Message = ex.Message;
                log.Fatal(ex.Message);
                log.FatalException(ex.Message, ex);
            }
            return m;
        }
Beispiel #9
0
        public JsonResult ActiveOrders(int ID,string NO, string SN)
        {
            var r = new R();
            var Card = DAL.Get.Cards(NO, SN);
            if (Card.Status == 1)
            {
                #region 卡有效的处理逻辑
                //卡有效
                var p = new Order();
                p.MID = Client.MID;
                p.Tags = ID.ToString();
                p.Memo = ID.ToString();
                var _r = DAL.Update.CreateOrder(p);

                if ((_r.Code == 0 || _r.Code == 1) && _r.Value > 0)
                {
                    //订单生成成功  _r.Value = 返回的内部订单号
                    p.ID = _r.Value;
                    if (_r.Code == 1)
                    {
                        DAL.Update.RefreshOrder(p);
                    }
                    var Order = DAL.Get.Order(Client.MID, _r.Value);
                    // 可以考虑 Card.Amount + Balance.Amount >= Order.Amount
                    if (Card.Amount == Order.Amount)
                    {
                        // 充值
                        var C = new Cards();
                        C.SN = SN;
                        var _r2 = DAL.Update.BalanceTopupByCards(Client.MID, C);
                        if (_r2.Code == 0)
                        {
                            var Balance = DAL.Get.Balance(Client.MID);
                            if (Balance.Amount >= Order.Amount)
                            {
                                DAL.Update.RefreshOrder(p);
                                Order = DAL.Get.Order(Client.MID, _r.Value);
                                r = DAL.Update.CommitOrder(Order);
                                if (r.Code != 0)
                                {
                                    log.Fatal("ActiveOrders.CommitOrder Fail,{0},{1}", Client.MID, ID);
                                }
                                // 订单激活成功!
                            }
                            else
                            {
                                r.Code = 201;
                                r.Message = "Insufficient Balance";

                            }
                        }
                        else
                        {
                            r.Code = 201;
                            r.Message = "充值失败";
                            log.Fatal("ActiveOrders.BalanceTopupByCards Fail,{0},{1}", Client.MID, ID);
                        }
                    }
                    else
                    {
                        r.Code = 102;
                        r.Message = "该卡金额无法激活本订单";
                    }

                }
                else
                {
                    r.Code = 101;
                    r.Message = "订单生成失败";
                }
                #endregion
            }
            else
            {
                //卡无效
                r.Code = 100;
                r.Message = "卡号无效";
                r.Value = Card.Status;
            }

            return Json(r);
        }