예제 #1
0
        public void AddPayLog(bool isNotify)
        {
            PayLog log = new PayLog();

            log.ID      = DataHelper.GetSystemID();
            log.OrderNo = Request.QueryString["out_trade_no"];
            if (isNotify)
            {
                log.Message = Request.Form.ToString();
            }
            else
            {
                log.Message = Request.Url.ToString();;
            }
            log.LogTime = DateTime.Now;
            PayLogService ps = new PayLogService();

            ps.Add(log);
        }
예제 #2
0
 /// <summary>
 /// 接收code参数
 /// </summary>
 /// <returns></returns>
 public ActionResult ResponseParam()
 {
     try
     {
         var code = Request["code"];
         if (code != null)
         {
             Session["code"] = code;
         }
         return(Redirect("/Tenpay/WXPay/" + Session["orderid"]));
     }
     catch (Exception e)
     {
         PayLog model = new PayLog();
         model.ID      = FCake.Core.Common.DataHelper.GetSystemID();
         model.LogTime = DateTime.Now;
         model.Message = "error:" + e.Message;
         log.Add(model);
         return(Redirect("/"));
     }
 }
예제 #3
0
        public ActionResult AlipayNotify()
        {
            try
            {
                AddPayLog(true);
            }
            catch (Exception e)
            {
                PayLogService ps = new PayLogService();
                PayLog        pl = new PayLog();
                pl         = new PayLog();
                pl.ID      = DataHelper.GetSystemID();
                pl.LogTime = DateTime.Now;
                pl.Message = e.Message;
                ps.Add(pl);
            }
            Dictionary <string, string> sPara = GetRequestPost();

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify    = new Notify();
                bool   verifyResult = aliNotify.VerifyNotify(sPara, Request.Form["sign"]);

                if (verifyResult)//验证成功
                {
                    //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

                    //解密(如果是RSA签名需要解密,如果是MD5签名则下面一行清注释掉)
                    //sPara = aliNotify.Decrypt(sPara);

                    //XML解析notify_data数据
                    try
                    {
                        XmlDocument xmlDoc = new XmlDocument();
                        xmlDoc.LoadXml(sPara["notify_data"]);
                        //商户订单号
                        string out_trade_no = xmlDoc.SelectSingleNode("/notify/out_trade_no").InnerText;
                        //支付宝交易号
                        string trade_no = xmlDoc.SelectSingleNode("/notify/trade_no").InnerText;
                        //交易状态
                        string trade_status = xmlDoc.SelectSingleNode("/notify/trade_status").InnerText;

                        if (trade_status == "TRADE_FINISHED")
                        {
                            //判断该笔订单是否在商户网站中已经做过处理
                            //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                            //如果有做过处理,不执行商户的业务程序
                            psv.FinishOrder(out_trade_no, trade_no, FeeType.ALiPay);
                            //注意:
                            //该种交易状态只在两种情况下出现
                            //1、开通了普通即时到账,买家付款成功后。
                            //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。

                            return(Content("success"));  //请不要修改或删除
                        }
                        else if (trade_status == "TRADE_SUCCESS")
                        {
                            //判断该笔订单是否在商户网站中已经做过处理
                            //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                            //如果有做过处理,不执行商户的业务程序
                            psv.FinishOrder(out_trade_no, trade_no, FeeType.ALiPay);
                            //注意:
                            //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。


                            return(Content("success"));  //请不要修改或删除
                        }
                        else
                        {
                            return(Content(trade_status));
                        }
                    }
                    catch (Exception exc)
                    {
                        return(Content(exc.ToString()));
                    }
                }
                else//验证失败
                {
                    return(Content("fail"));
                }
            }
            else
            {
                return(Content("无通知参数"));
            }
        }
        /// <summary>
        /// 微信的异步支付返回
        /// </summary>
        /// <returns></returns>
        public ActionResult WetChatNotify()
        {
            try
            {
                //PayLog notity1 = new PayLog();
                //notity1.ID = FCake.Core.Common.DataHelper.GetSystemID();
                //notity1.LogTime = DateTime.Now;
                //notity1.Message = "notity:返回结果通知开始执行";
                //log.Add(notity1);
                //需验证支付结果
                WxPayData notifyData = GetNotifyData();

                PayLog notity2 = new PayLog();
                notity2.ID      = FCake.Core.Common.DataHelper.GetSystemID();
                notity2.LogTime = DateTime.Now;
                notity2.Message = "notity2接收到的数据:" + notifyData.ToJson().ToString();
                log.Add(notity2);

                WxPayData res = new WxPayData();
                //检查支付结果中transaction_id是否存在
                if (!notifyData.IsSet("transaction_id"))
                {
                    //若transaction_id不存在,则立即返回结果给微信支付后台
                    res.SetValue("return_code", "FAIL");
                    res.SetValue("return_msg", "支付结果中微信订单号不存在");
                    PayLog notity3 = new PayLog();
                    notity3.ID      = FCake.Core.Common.DataHelper.GetSystemID();
                    notity3.LogTime = DateTime.Now;
                    notity3.Message = "notity3接收到的数据:没有transaction_id";
                    log.Add(notity3);
                }

                string transaction_id = notifyData.GetValue("transaction_id").ToString();

                //查询订单,判断订单真实性
                if (!QueryOrder(transaction_id))
                {
                    //若订单查询失败,则立即返回结果给微信支付后台
                    res.SetValue("return_code", "FAIL");
                    res.SetValue("return_msg", "订单查询失败");
                }
                //查询订单成功
                else
                {
                    res.SetValue("return_code", "SUCCESS");
                    res.SetValue("return_msg", "OK");
                    var orderId = notifyData.GetValue("out_trade_no").ToString();

                    PayLog notity4 = new PayLog();
                    notity4.ID      = FCake.Core.Common.DataHelper.GetSystemID();
                    notity4.LogTime = DateTime.Now;
                    notity4.Message = "notity4接收到的out_trade_no数据:" + orderId;
                    log.Add(notity4);

                    var preInfo = new PrePayInfoService().GetPrePayByPrePayNo(orderId);

                    var order = psv.GetOrderByOrderNo(preInfo.OrderNo);//获取订单信息
                    if (order.Status == OrderStatus.NotPay)
                    {
                        PayLog notity5 = new PayLog();
                        notity5.ID      = FCake.Core.Common.DataHelper.GetSystemID();
                        notity5.LogTime = DateTime.Now;
                        notity5.Message = "notity5开始修改" + order.No + "订单状态:";
                        log.Add(notity5);
                        psv.FinishOrder(order.No, transaction_id, FeeType.WXPay);
                    }
                }
                return(Content(res.ToString()));
            }
            catch (Exception e)
            {
                PayLog notity99 = new PayLog();
                notity99.ID      = FCake.Core.Common.DataHelper.GetSystemID();
                notity99.LogTime = DateTime.Now;
                notity99.Message = "回调发生异常" + e.Message;
                log.Add(notity99);
                return(Content("error"));
            }
        }