コード例 #1
0
ファイル: PayController.cs プロジェクト: kucenchen/ASP.NET
        public async Task <QueryReturnModel> Query(string mchid, string orderid, string sign)
        {
            QueryReturnModel r = new QueryReturnModel();
            SortedDictionary <string, string> para = new SortedDictionary <string, string>();

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

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

            Dos.Common.LogHelper.Debug(temp);

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

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

            if (cusSign.ToLower() != sign.ToLower())
            {
                Dos.Common.LogHelper.Debug(" Query 签名错误");
                r.ReturnMsg = "签名错误";
                return(r);
            }

            return(await PayOrderBll._.Query(mchid, orderid));
        }
コード例 #2
0
ファイル: Pay_OrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <summary>
        /// 通知接口
        /// </summary>
        /// <param name="pid"></param>
        /// <param name="mid"></param>
        /// <param name="Request"></param>
        /// <returns></returns>
        public async Task <NotifyReturn> Notify(int pid, int mid, Microsoft.AspNetCore.Http.HttpRequest Request)
        {
            Pay_plat  p         = OnlinePay.GetPlat(pid);
            Pay_mch   m         = OnlinePay.GetMch(mid);
            OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m);

            NotifyReturn r = await onlinepay.Notify(Request);

            if (r.IsCheck)
            {
                if (r.IsPay)
                {
                    Pay_order order = DB.Context.From <Pay_order>().Where(o => o.Order_id == r.OrderNumber).ToFirstDefault();

                    if (order != null && !string.IsNullOrEmpty(order.Order_id))
                    {
                        if (order.Status == 0)
                        {
                            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();
                            DB.Context.Save(order);
                        }
                    }
                }
                return(r);
            }
            else
            {
                return(r);
            }
        }
コード例 #3
0
ファイル: PayController.cs プロジェクト: kucenchen/ASP.NET
        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}", OnlinePay.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 Pay_OrderBll.Instance.Query(mchid, orderid));
        }
コード例 #4
0
ファイル: PayOrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <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)
        {
            PayPlat   p         = OnlinePay.GetPlat(pid);
            PayMch    m         = OnlinePay.GetMch(mid);
            OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m);

            NotifyReturnModel r = await onlinepay.CallBack(Request);

            if (r.IsCheck)
            {
                if (r.IsPay)
                {
                    PayOrder order = DbContext._.Db.From <PayOrder>().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();
                            DbContext._.Db.Save(order);
                        }
                    }
                }
            }

            if (string.IsNullOrEmpty(r.OrderNumber))
            {
                PayOrder order = DbContext._.Db.From <PayOrder>().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}", OnlinePay.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, OnlinePay.GetParamSrc(para)));
                }
            }
            return(r);
        }
コード例 #5
0
ファイル: PayOrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <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)
        {
            NotifyReturnModel r = null;

            try
            {
                PayPlat   p         = OnlinePay.GetPlat(pid);
                PayMch    m         = OnlinePay.GetMch(mid);
                OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(p.Plat_class), p, m);
                r = await onlinepay.Notify(Request);
            }
            catch (Exception ex)
            {
                Dos.Common.LogHelper.Debug("第三方回调初始化失败:" + ex.Message);
                throw ex;
            }


            if (r.IsCheck)
            {
                if (r.IsPay)
                {
                    PayOrder order = DbContext._.Db.From <PayOrder>().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;
                            int res = DbContext._.Db.Save(order);
                        }
                    }
                }
                return(r);
            }
            else
            {
                return(r);
            }
        }
コード例 #6
0
ファイル: PayController.cs プロジェクト: kucenchen/ASP.NET
        public async Task <UnifiedorderReturn> Unifiedorder(string mchid, string orderid, string body, int paytype, 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("body", body);
            para.Add("paytype", paytype.ToString());
            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}", OnlinePay.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 Pay_OrderBll.Instance.Unifiedorder(mchid, orderid, body, paytype, amount, attach, ip, callbackurl, notifyurl));
        }
コード例 #7
0
ファイル: PayController.cs プロジェクト: kucenchen/ASP.NET
        public async Task <UnifiedOrderReturnModel> Unifiedorder([FromForm] PayOrderModel payOrder)
        {
            //string mchid, string orderid, string body, int paytype, string amount, string attach, string ip, string callbackurl, string notifyurl, string sign
            SortedDictionary <string, string> para = new SortedDictionary <string, string>();

            para.Add("mchid", payOrder.MchId);
            para.Add("orderid", payOrder.OrderId);
            para.Add("body", payOrder.Body);
            para.Add("paytype", payOrder.PayType.ToString());
            para.Add("amount", payOrder.Amount);
            para.Add("attach", payOrder.Attach);
            para.Add("ip", payOrder.Ip);
            para.Add("callbackurl", payOrder.CallBackUrl);
            para.Add("notifyurl", payOrder.NotifyUrl);

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

            Dos.Common.LogHelper.Debug(temp);

            UnifiedOrderReturnModel r = new UnifiedOrderReturnModel();

            if (payOrder.MchId != WebConfig.MchId)
            {
                Dos.Common.LogHelper.Debug("商户号不存在");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "商户号不存在";
                return(r);
            }
            string cusSign = Dos.Common.EncryptHelper.MD5EncryptWeChat(temp, "utf-8");

            if (cusSign.ToLower() != payOrder.Sign.ToLower())
            {
                Dos.Common.LogHelper.Debug("签名错误");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "签名错误";
                return(r);
            }
            return(await PayOrderBll._.Unifiedorder(payOrder.MchId, payOrder.OrderId, payOrder.Body, payOrder.PayType, payOrder.Amount, payOrder.Attach, payOrder.Ip, payOrder.CallBackUrl, payOrder.NotifyUrl));
        }
コード例 #8
0
    protected void Button1_Click(object sender, EventArgs e)
    {
        this.Label1.Text = "";
        this.Label2.Text = "";
        string    alipayPaymentNumber = "";
        string    returnDescription   = "";
        OnlinePay pay   = new OnlinePay();
        DataTable table = new Views.V_UserPayDetails().Open("ID, Name, DateTime, Money, PayType, FormalitiesFees, UserID", "Result = 1", "");
        double    num2  = 0.0;

        foreach (DataRow row in table.Rows)
        {
            alipayPaymentNumber = "";
            if ((pay.Query(row["PayType"].ToString().Trim(), row["ID"].ToString(), ref alipayPaymentNumber, ref returnDescription) != 0) && (returnDescription == "等待买家付款"))
            {
                num2 += _Convert.StrToDouble(row["Money"].ToString(), 0.0);
                string text = this.Label1.Text;
                this.Label1.Text = text + "用户名:" + row["Name"].ToString() + ", 用户ID:" + row["UserID"].ToString() + ", 系统交易号:" + row["ID"].ToString() + ", 金额:" + row["Money"].ToString() + "<br />";
            }
        }
        this.Label2.Text = "合计总金额:" + num2.ToString();
    }
コード例 #9
0
ファイル: Pay_OrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <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 body, int paytype, 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);
            }
            Pay_mch m = null;

            try
            {
                m = OnlinePay.MchList.FindAll(pp => pp.Nullity == false && ("" + pp.Open_time + ",").Contains("," + DateTime.Now.Hour.ToString() + ",") &&
                                              ("," + pp.Open_pay_type_list + ",").Contains("," + paytype + ",") &&
                                              ("," + pp.Pay_money_list + ",").Contains("," + amount + ",")).OrderBy(i => Guid.NewGuid()).First();
            }
            catch (Exception ex)
            {
                string b = ex.ToString();
            }

            if (m == null)
            {
                r.Type = PayReturnType.Err;

                r.Content = "平台没有可用的支付渠道";
                return(r);
            }

            Pay_plat p = OnlinePay.GetPlat(m.Plat_id);

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

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

            Pay_order order = new Pay_order();

            order.Order_id        = orderid;
            order.Mch_id          = m.Id;
            order.Order_amount    = fee;
            order.Pay_amount      = 0;
            order.Pay_type        = paytype;
            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;
            order.Attach(EntityState.Added);
            OnlinePay onlinepay = null;

            try
            {
                string vDllName = "PayProject";
                //System.Reflection.Assembly tempAssembly = System.Reflection.Assembly.LoadFrom(vDllName);
                System.Reflection.Assembly tempAssembly = System.Reflection.Assembly.Load(vDllName);
                //Type _type = Type.GetType("PayProject.Pay." + p.Plat_class);
                Type _type = tempAssembly.GetType("PayProject.Pay." + p.Plat_class);
                onlinepay = (OnlinePay)Activator.CreateInstance(_type);
                onlinepay.setInfo(p.Plat_id, m.Mch_id);
                //onlinepay = (OnlinePay)tempAssembly.CreateInstance("PayProject.Pay." + p.Plat_class);
                // onlinepay = (OnlinePay)Activator.CreateInstance(typeof(plat_class), new object[] { p.Plat_id, m.Mch_id });
            }
            catch (Exception ex)
            {
                string a = ex.ToString();
            }


            r = await onlinepay.Unifiedorder(orderid, paytype.ToString(), fee, ip, body, attach);

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

            DB.Context.Save(order);
            return(r);
        }
コード例 #10
0
ファイル: Pay_OrderBll.cs プロジェクト: kucenchen/ASP.NET
        public async Task <string> SendNotify(string orderid)
        {
            Pay_order o = DB.Context.From <Pay_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("status", o.Status.ToString());

            string sign = string.Format("{0}&key={1}", OnlinePay.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);
        }
コード例 #11
0
ファイル: Pay_OrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <summary>
        /// 查询接口
        /// </summary>
        /// <param name="mchid"></param>
        /// <param name="orderid"></param>
        /// <param name="sign"></param>
        /// <returns></returns>
        public async Task <QueryReturn> Query(string mchid, string orderid)
        {
            QueryReturn r = new QueryReturn();



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


            Pay_order order = DB.Context.From <Pay_order>().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        = true;
                r.OrderNumber  = order.Order_id;
                r.SerialNumber = order.Plat_order_id;
                r.Totalfee     = order.Pay_amount;
                r.Attach       = order.Attach;
                return(r);
            }
            else
            {
                Pay_mch mch = OnlinePay.GetMch(order.Mch_id);

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

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

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


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

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

                    order.Finish_time = DateTime.Now.ToTimeStamp();

                    DB.Context.Save(order);
                }

                return(r);
            }
        }
コード例 #12
0
 protected void g_ItemCommand(object source, DataGridCommandEventArgs e)
 {
     if (((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem)) || (e.Item.ItemType == ListItemType.EditItem))
     {
         string str6;
         int    num             = -9999;
         long   userID          = _Convert.StrToLong(e.Item.Cells[9].Text, 0L);
         string text            = e.Item.Cells[10].Text;
         double money           = _Convert.StrToDouble(e.Item.Cells[3].Text, 0.0);
         double formalitiesFees = _Convert.StrToDouble(e.Item.Cells[5].Text, 0.0);
         string paymentNumber   = e.Item.Cells[8].Text;
         string payBank         = this.getBankName(text);
         _Convert.StrToDateTime(e.Item.Cells[2].Text, DateTime.Now.ToString("yyyyMMdd"));
         string str4              = _Convert.StrToDateTime(e.Item.Cells[2].Text, DateTime.Now.ToString("yyyyMMdd")).ToString("yyyyMMdd");
         int    returnValue       = -1;
         string returnDescription = "";
         if ((e.CommandName == "Query") && ((str6 = text.Split(new char[] { '_' })[0].ToUpper()) != null))
         {
             if (str6 == "ALIPAY")
             {
                 string    alipayPaymentNumber = "";
                 OnlinePay pay = new OnlinePay();
                 try
                 {
                     num = pay.Query(e.Item.Cells[10].Text.Trim(), paymentNumber, ref alipayPaymentNumber, ref returnDescription);
                 }
                 catch
                 {
                     JavaScript.Alert(this.Page, "查询失败,可能是网络通讯故障。请重试一次。");
                     return;
                 }
                 if (num < 0)
                 {
                     JavaScript.Alert(this.Page, "支付号为 " + paymentNumber + " 的支付记录没有充值成功,描述:" + returnDescription);
                     return;
                 }
                 string memo = "系统交易号:" + paymentNumber + ",支付宝交易号:" + alipayPaymentNumber;
                 returnDescription = "";
                 if (Procedures.P_UserAddMoney(base._Site.ID, userID, money, formalitiesFees, paymentNumber, payBank, memo, ref returnValue, ref returnDescription) < 0)
                 {
                     JavaScript.Alert(this.Page, "数据库读写错误");
                     return;
                 }
                 if (returnValue < 0)
                 {
                     JavaScript.Alert(this.Page, returnDescription);
                     return;
                 }
                 JavaScript.Alert(this.Page, "此笔充值记录已到帐并已处理成功!");
             }
             else if (str6 == "51ZFK")
             {
                 this.frmmain.Attributes.Add("src", "../Home/Room/OnlinePay/ZhiFuKa/PayQuery.aspx?sdcustomno=" + paymentNumber);
             }
             else if (str6 == "TENPAY")
             {
                 this.frmmain.Attributes.Add("src", "../Home/Room/OnlinePay/Tenpay/PayQuery.aspx?sp_billno=" + paymentNumber + "&date=" + str4);
             }
             else if (str6 == "007KA")
             {
                 this.frmmain.Attributes.Add("src", "../Home/Room/OnlinePay/007ka/PayQuery.aspx?OrderID=" + paymentNumber);
             }
             else if (str6 == "99BILL")
             {
                 string dealID       = "";
                 string errorMessage = "";
                 if (this.Check99BillPay(long.Parse(paymentNumber), ref dealID, ref errorMessage) && (errorMessage == ""))
                 {
                     string str11 = "系统交易号:" + paymentNumber + ",快钱交易号:" + dealID;
                     returnDescription = "";
                     returnValue       = -1;
                     if (Procedures.P_UserAddMoney(base._Site.ID, userID, money, formalitiesFees, paymentNumber, payBank, str11, ref returnValue, ref returnDescription) < 0)
                     {
                         JavaScript.Alert(this.Page, string.Concat(new object[] { "数据库读写错误:", base._Site.ID, " , ", userID, " , ", money, " , ", formalitiesFees, " , ", paymentNumber, " , ", payBank, " , ", str11 }));
                         return;
                     }
                     if (returnValue < 0)
                     {
                         JavaScript.Alert(this.Page, returnDescription);
                         return;
                     }
                     JavaScript.Alert(this.Page, "此笔充值记录已到帐并已处理成功!");
                     this.BindData();
                 }
                 else
                 {
                     JavaScript.Alert(this.Page, errorMessage);
                 }
             }
         }
         if (e.CommandName == "Accept")
         {
             string str12 = "手动处理充值" + ((TextBox)e.Item.Cells[4].FindControl("tbDescription")).Text.Trim();
             num = -1;
             if (Procedures.P_UserAddMoney(base._Site.ID, userID, money, formalitiesFees, paymentNumber, payBank, str12, ref returnValue, ref returnDescription) < 0)
             {
                 returnDescription = "数据库读写错误";
                 return;
             }
             if (returnValue < 0)
             {
                 JavaScript.Alert(this.Page, returnDescription);
             }
             JavaScript.Alert(this.Page, "此笔充值处理成功!");
         }
         if (e.CommandName == "Del")
         {
             try
             {
                 new Tables.T_UserPayDetails().Delete("ID=" + paymentNumber + " and Result = 0");
             }
             catch
             {
                 JavaScript.Alert(this.Page, "此笔充值删除失败!");
             }
             JavaScript.Alert(this.Page, "此笔充值删除成功!");
         }
         this.BindData();
     }
 }
コード例 #13
0
ファイル: PayOrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <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 mchid, string orderid, string body, int paytype, string amount, string attach, string ip, string callbackurl, string notifyurl)
        {
            UnifiedOrderReturnModel r = new UnifiedOrderReturnModel();
            //if (mchid != WebConfig.MchId)
            //{
            //    Dos.Common.LogHelper.Debug("商户号不存在");
            //    r.Type = PayReturnTypeEnum.Err;
            //    r.Content = "商户号不存在";
            //    return r;
            //}

            decimal fee = 0;

            decimal.TryParse(amount, out fee);

            if (fee <= 0)
            {
                Dos.Common.LogHelper.Debug("支付金额必须大于0");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "支付金额必须大于0";
                return(r);
            }

            PayMch payMchModel = OnlinePay.MchList.FindAll(pp => pp.Nullity == false && ("," + pp.Open_time + ",").Contains("," + DateTime.Now.Hour.ToString() + ",") && ("," + pp.Open_pay_type_list + ",").Contains("," + paytype + ",") && ("," + pp.Pay_money_list + ",").Contains("," + amount + ",")).OrderBy(i => Guid.NewGuid()).FirstOrDefault();

            if (payMchModel == null)
            {
                Dos.Common.LogHelper.Debug("平台没有可用的支付渠道");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "平台没有可用的支付渠道";
                return(r);
            }
            //1:随机加减0-9分 2:随机加减0-9元
            if (payMchModel.Israndom == 1)
            {
                int randomNum = new Random().Next(-9, 10);
                if (randomNum != 0)
                {
                    fee += Convert.ToDecimal(randomNum) / 100;
                }
            }
            else if (payMchModel.Israndom == 2)
            {
                int randomNum = new Random().Next(-9, 10);
                if (randomNum != 0)
                {
                    fee += Convert.ToDecimal(randomNum);
                }
            }

            if (fee <= 0)
            {
                Dos.Common.LogHelper.Debug("支付金额必须大于0  2");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "支付金额必须大于0";
                return(r);
            }

            PayPlat payPlatModel = OnlinePay.GetPlat(payMchModel.Plat_id);

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

            if (DbContext._.Db.Exists <PayOrder>(d => d.Order_id == orderid.SqlFilters()))
            {
                Dos.Common.LogHelper.Debug("订单号已经存在");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "订单号已经存在";
                return(r);
            }

            PayOrder order = new PayOrder();

            order.Order_id        = orderid;
            order.Plat_order_id   = "";
            order.Mch_id          = payMchModel.Id;
            order.Order_amount    = fee;
            order.Pay_amount      = 0;
            order.Pay_type        = paytype;
            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 <PayOrder>(order) > 0;
            }
            catch (Exception e)
            {
                Dos.Common.LogHelper.Debug("创建订单失败:" + e.Message);
                string err = e.Message;
                throw;
            }

            if (!isSuccess)
            {
                Dos.Common.LogHelper.Debug("创建订单失败02");
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = "创建订单失败";
                return(r);
            }

            try
            {
                OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(payPlatModel.Plat_class), payPlatModel, payMchModel);
                r = await onlinepay.Unifiedorder(orderid, paytype.ToString(), fee, ip, body, attach);
            }
            catch (Exception ex)
            {
                string err = ex.Message;
                Dos.Common.LogHelper.Debug("选用支付API接口失败:" + err);
                r.Type    = PayReturnTypeEnum.Err;
                r.Content = err;
                return(r);
            }

            if (r.Type != 0)
            {
                order.Plat_order_id = r.SerialNumber;
                order.Pay_amount    = decimal.Parse(r.RealPrice);
            }
            return(r);
        }
コード例 #14
0
ファイル: PayOrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <summary>
        /// 发送通知
        /// </summary>
        /// <param name="orderid"></param>
        /// <param name="isSystem"></param>
        /// <returns></returns>
        public async Task <string> SendNotify(string orderid, bool isSystem = true, bool isAsyn = true)
        {
            PayOrder o = DbContext._.Db.From <PayOrder>().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("订单通知地址不误");
            }
            //AopDictionary para = new AopDictionary();
            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("status", o.Status.ToString());

            string sign = string.Format("{0}&key={1}", OnlinePay.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);
            }



            #region
            //if (o.Notify_status != 1)
            //{
            //    o.Attach(EntityState.Modified);
            //    if (msg == "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);
            //}
            #endregion
        }
コード例 #15
0
ファイル: PayOrderBll.cs プロジェクト: kucenchen/ASP.NET
        /// <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)
            {
                Dos.Common.LogHelper.Debug("商户号不存在");
                r.ReturnMsg = "商户号不存在";
                return(r);
            }

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

            if (order == null || string.IsNullOrEmpty(order.Order_id))
            {
                Dos.Common.LogHelper.Debug("订单不存在");
                r.ReturnMsg = "订单不存在";
                return(r);
            }
            if (order.Status == 1)
            {
                r.ReturnMsg    = "ok";
                r.IsPay        = true;
                r.OrderNumber  = order.Order_id;
                r.SerialNumber = order.Plat_order_id;
                r.Totalfee     = order.Pay_amount;
                r.Attach       = order.Attach;
                return(r);
            }
            else
            {
                PayMch mch = OnlinePay.GetMch(order.Mch_id);

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

                PayPlat plat = OnlinePay.GetPlat(mch.Plat_id);
                if (plat == null)
                {
                    Dos.Common.LogHelper.Debug("平台渠道信息错误");
                    r.ReturnMsg = "平台渠道信息错误";
                    return(r);
                }
                try
                {
                    OnlinePay onlinepay = (OnlinePay)Activator.CreateInstance(Type.GetType(plat.Plat_class), plat, mch);

                    r = await onlinepay.OrderQuery(order.Order_id);
                }
                catch (Exception ex)
                {
                    Dos.Common.LogHelper.Debug("第三方查询下单失败1:" + ex.Message);
                    throw ex;
                }

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

                        order.Finish_time = DateTime.Now.ToTimeStamp();
                        DbContext._.Db.Save(order);
                    }
                    else
                    {
                        Dos.Common.LogHelper.Debug("第三方查询结果:ReturnMsg " + r.ReturnMsg + "## IsPay " + r.IsPay);
                    }
                }
                catch (Exception ex)
                {
                    Dos.Common.LogHelper.Debug("第三方查询下单失败2:" + ex.Message);
                    throw ex;
                }

                return(r);
            }
        }