예제 #1
0
        public void GoPay(string tnum, string sign)
        {
            if (tnum.IsNullOrEmpty() || sign.IsNullOrEmpty())
            {
                Response.Redirect("/mobile/error.html?msg=参数错误[01]");
                return;
            }
            if ((tnum + "NewPay").GetMD5().Substring(8, 8) != sign)
            {
                Response.Redirect("/mobile/error.html?msg=参数错误[00]");
                return;
            }
            Orders Orders    = Entity.Orders.FirstOrDefault(o => o.TNum == tnum);
            Users  baseUsers = Entity.Users.FirstOrDefault(n => n.Id == Orders.UId);

            if (baseUsers == null)//用户不存在
            {
                Response.Redirect("/mobile/error.html?msg=用户不存在或信息有误");
                return;
            }
            if (baseUsers.State != 1)//用户被锁定
            {
                Response.Redirect("/mobile/error.html?msg=用户被锁定");
                return;
            }
            if (Orders == null)
            {
                Response.Redirect("/mobile/error.html?msg=订单不存在");
                return;
            }
            //if (Orders.InState != 1)
            //{
            //    Response.Redirect("/mobile/error.html?msg=订单状态异常");
            //    return;
            //}
            if (Orders.TType != 6 && Orders.TType != 10)
            {
                Response.Redirect("/mobile/error.html?msg=订单类型错误");
                return;
            }
            if (Orders.PayState == 1)
            {
                Response.Redirect("/mobile/error.html?msg=订单已支付");
                return;
            }
            PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.DllName == "AliPay");

            if (PayConfig == null)
            {
                Response.Redirect("/mobile/error.html?msg=无支付通道");
                return;
            }

            //获取支付方式并提交
            string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });//接口信息 商户号,密钥,支付宝号
            if (PayConfigArr.Length != 3)
            {
                Response.Redirect("/mobile/error.html?msg=配置错误");
                return;
            }
            AliPayCom Com    = new AliPayCom();
            string    app_id = PayConfigArr[2];

            Com.app_id     = app_id;
            Com.method     = "alipay.trade.precreate";
            Com.notify_url = PayPath + "/paycenter/alipay/alipaynotice.html";
            Dictionary <string, string> Dic = new Dictionary <string, string>();

            Dic.Add("out_trade_no", Orders.TNum);
            Dic.Add("total_amount", Orders.Amoney.ToMoney());
            Dic.Add("timeout_express ", "30m");
            string subject = "用户升级VIP";

            if (Orders.TType == 10)
            {
                subject = "用户升级代理商";
            }
            Dic.Add("subject", subject);
            string  response = Com.Send(Dic);
            JObject JObj     = (JObject)JsonConvert.DeserializeObject(response);
            JObject Obj      = (JObject)JObj["alipay_trade_precreate_response"];
            string  code     = Obj["code"].ToString();

            if (code == "10000")
            {
                string qr_code = Obj["qr_code"].ToString();
                Response.Redirect(qr_code);
            }
            else
            {
                string msg = Obj["msg"].ToString();
                Response.Redirect("/mobile/error.html?msg=" + msg);
            }
        }
예제 #2
0
        //支付宝直接支付
        public void AlipayNotice()
        {
            SortedDictionary <string, string> sPara = new SortedDictionary <string, string>();

            NameValueCollection coll = Request.Form;

            String[] requestItem = coll.AllKeys;
            int      i           = 0;

            for (i = 0; i < requestItem.Length; i++)
            {
                sPara.Add(requestItem[i], Request.Form[requestItem[i]]);
            }
            if (sPara.Count > 0)
            {
                string out_trade_no = Request.Form["out_trade_no"]; //商户订单号
                string trade_no     = Request.Form["trade_no"];     //支付宝交易号
                Orders Orders       = Entity.Orders.FirstOrDefault(n => n.TNum == out_trade_no);
                if (Orders == null)
                {
                    Response.Write("E4");
                    return;
                }
                PayConfig PayConfig = Entity.PayConfig.FirstOrDefault(n => n.Id == Orders.PayWay && n.State == 1);
                if (PayConfig == null)
                {
                    Response.Write("E0");
                    return;
                }
                string[] PayConfigArr = PayConfig.QueryArray.Split(new char[] { ',' });//接口信息 商户号,密钥,支付宝号
                if (PayConfigArr.Length != 3)
                {
                    Response.Write("E1");
                    return;
                }
                if (Orders.TType != 6 && Orders.TType != 10)
                {
                    Response.Write("E1");
                    return;
                }
                if (Orders.PayState == 1)//已支付
                {
                    Response.Write("0000");
                    return;
                }
                //================================================
                //记录通知信息
                string AllString = Request.Form.ToString();
                AllString = System.Web.HttpUtility.UrlDecode(AllString);
                PayLog PayLog = new PayLog();
                PayLog.PId     = PayConfig.Id;
                PayLog.OId     = out_trade_no;
                PayLog.TId     = trade_no;
                PayLog.Amount  = Orders.Amoney;
                PayLog.Way     = "POST";
                PayLog.AddTime = DateTime.Now;
                PayLog.Data    = AllString;
                PayLog.State   = 1;
                Entity.PayLog.AddObject(PayLog);

                Entity.SaveChanges();
                //================================================
                Dictionary <string, string> Dic = Utils.FilterPara(sPara, "sign|sign_type");
                string    SignString            = Utils.CreateLinkString(Dic);
                string    sign      = sPara["sign"];
                string    sign_type = sPara["sign_type"];
                AliPayCom Com       = new AliPayCom();
                string    app_id    = PayConfigArr[2];
                Com.app_id = app_id;
                //==========================
                //读取公钥
                string FilePath = AppDomain.CurrentDomain.BaseDirectory;
                string file     = FilePath + "certs\\";
                //==========================
                //对异步通知进行验签
                if (Com.CheckSign(SignString, sign))
                {
                    string trade_status = sPara["trade_status"];
                    if (trade_status == "TRADE_FINISHED")
                    {
                        //退款及关闭处理
                        //支付完成超退款时间
                    }
                    else if (trade_status == "TRADE_SUCCESS")
                    {
                        //付款完成后
                        Orders = Orders.PaySuccess(Entity);
                    }
                    else
                    {
                    }
                    Response.Write("success");//请不要修改或删除
                }
                else
                {
                    Response.Write("E99");
                }
            }
            else
            {
                Response.Write("E0");
                return;
            }
        }