Exemple #1
0
 private ActionResult CompleteOrder(string out_trade_no, string trade_no, OrderBuss obll)
 {
     DAO.OrderPay op = obll.GetOrderPay(out_trade_no);
     if (op != null)
     {
         if (op.PayState == "未支付")
         {
             op.PayState = "已支付";
             if (op.PayType == 0)
             {
                 op.Bank = "支付宝";
             }
             op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no);
             //修改OrderPay
             log.Info("*********即将修改OrderPay**************");
             bool r = obll.upDataOrderPay(op);
             log.Info("orderPay 更新结果:" + r);
             log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + "  op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no);
             //支付成功修改订单状态
             log.Info("*********即将修改Order状态**************");
             DAO.Order order = obll.GetOrder(out_trade_no);
             //计算组合支付总金额==订单金额
             bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice);
             log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price);
             if (r_vali_price)
             {
                 bool r_oder = obll.upOrder(out_trade_no);
                 log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder);
             }
             else
             {
                 log.Info("订单:" + op.OrderId + " 修改状态失败,金额验证不通过");
                 return(Redirect(string.Format("/Order/Detail/{0}", out_trade_no)));
             }
         }
     }
     else
     {
         log.Info("OrderPay is Null");
         return(Redirect(string.Format("/Order/Detail/{0}", out_trade_no)));
     }
     //打印页面
     //orderpay 订单支付类型 0 正常订单 1 充值订单
     if (op.OrderType == 0)
     {
         return(Redirect(string.Format("/Order/Detail/{0}", out_trade_no)));
     }
     else if (op.OrderType == 1)
     {
         return(Redirect("/pay/recharge_success.html"));
     }
     else
     {
         return(Redirect(string.Format("/Order/Detail/{0}", out_trade_no)));
     }
 }
Exemple #2
0
        //异步通知
        public ActionResult autoreceive()
        {
            log.Info("**********************支付宝回调autoreceive**********************");
            SortedDictionary <string, string> sPara = GetRequestPost();

            log.Info("参数个数:" + sPara.Count);
            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify    = new Notify();
                bool   verifyResult = aliNotify.Verify(sPara, Request.Form["notify_id"], Request.Form["sign"]);
                log.Info("autoreceive是否支付宝发出的验证:" + verifyResult + "参数sPara:" + sPara + "参数sign:" + Request.Form["sign"]);

                if (verifyResult)//验证成功
                {
                    log.Info("autoreceive验证成功");
                    //商户订单号
                    string out_trade_no = Request.Form["out_trade_no"];
                    //支付宝交易号
                    string trade_no = Request.Form["trade_no"];
                    //交易状态
                    string trade_status = Request.Form["trade_status"];
                    log.Info("autoreceive商户订单号:" + out_trade_no + "支付宝交易号:" + trade_no + "支付宝交易状态:" + trade_status);

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

                            //注意:
                            //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。
                            DAO.OrderPay op = obll.GetOrderPay(out_trade_no);
                            if (op.PayState == "未支付")
                            {
                                op.PayState = "已支付";
                                if (op.PayType == 0)
                                {
                                    op.Bank = "支付宝";
                                }
                                op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no);
                                //修改OrderPay
                                log.Info("*********即将修改OrderPay**************");
                                bool r = obll.upDataOrderPay(op);
                                log.Info("orderPay 更新结果:" + r);
                                log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + "  op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no);
                                //支付成功修改订单状态
                                log.Info("*********即将修改Order状态**************");
                                DAO.Order order = obll.GetOrder(out_trade_no);
                                //计算组合支付总金额==订单金额
                                bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice);
                                log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price);
                                if (r_vali_price)
                                {
                                    bool r_oder = obll.upOrder(out_trade_no);
                                    log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder);
                                }
                            }
                        }
                        else
                        {
                            Response.Write(trade_status);
                        }

                        Response.Write("success");  //请不要修改或删除
                    }
                    catch (Exception exc)
                    {
                        Response.Write(exc.ToString());
                    }
                    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
                }
                else//验证失败
                {
                    Response.Write("fail");
                }


                Response.End();
            }
            log.Info("**********************支付宝回调autoreceive结束**********************");
            return(View());
        }
Exemple #3
0
        // GET: /Alipay/
        //同步通知
        public ActionResult receive()
        {
            log.Info("**********************支付宝回调receive**********************");
            //商户订单号
            string out_trade_no = Request.QueryString["out_trade_no"];
            SortedDictionary <string, string> sPara = GetRequestGet();

            //日志
            log.Info("商户订单号" + out_trade_no + ",参数个数:" + sPara.Count);
            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify    = new Notify();
                bool   verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"]);//Request.Form["notify_id"], Request.Form["sign"]
                log.Info("是否支付宝发出的验证:" + verifyResult + "参数sPara:" + sPara.ToString() + "参数sign:" + Request.QueryString["sign"]);
                //日志
                //   Common.Log(out_trade_no + ",回调判断:" + verifyResult, Common.LogLevel.low, "微网站支付宝回调");
                if (verifyResult)//验证成功 verifyResult
                {
                    log.Info("支付宝返回验证成功");
                    //支付宝交易号
                    string trade_no = Request.QueryString["trade_no"];
                    //交易状态
                    string trade_status = Request.QueryString["trade_status"];
                    log.Info("支付宝交易号:" + trade_no + "支付宝交易状态:" + trade_status);
                    OrderBuss obll = new OrderBuss();
                    if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS")
                    {
                        DAO.OrderPay op = obll.GetOrderPay(out_trade_no);
                        if (op != null)
                        {
                            if (op.PayState == "未支付")
                            {
                                op.PayState = "已支付";
                                if (op.PayType == 0)
                                {
                                    op.Bank = "支付宝";
                                }
                                op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no);
                                //修改OrderPay
                                log.Info("*********即将修改OrderPay**************");
                                bool r = obll.upDataOrderPay(op);
                                log.Info("orderPay 更新结果:" + r);
                                log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + "  op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no);
                                //支付成功修改订单状态
                                log.Info("*********即将修改Order状态**************");
                                DAO.Order order = obll.GetOrder(out_trade_no);
                                //计算组合支付总金额==订单金额
                                bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice);
                                log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price);
                                if (r_vali_price)
                                {
                                    bool r_oder = obll.upOrder(out_trade_no);
                                    log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder);
                                }
                            }
                        }
                        else
                        {
                            log.Info("OrderPay is Null");
                        }
                        //打印页面
                        //orderpay 订单支付类型 0 正常订单 1 充值订单
                        if (op.OrderType == 0)
                        {
                            return(Redirect(string.Format("/Order/Detail?oid={0}", out_trade_no)));
                        }
                        else if (op.OrderType == 1)
                        {
                            return(Redirect("/pay/recharge_success.html"));
                        }
                    }
                    else
                    {
                        log.Info("支付宝交易状态未通过");
                    }
                }
                else  //验证失败
                {
                    log.Info("支付宝返回验证失败");
                    Response.Write("验证失败");
                }
            }
            else
            {
                Response.Write("无返回参数");
            }
            log.Info("**********************支付宝回调receive结束**********************");
            return(View());
        }
Exemple #4
0
        public override void ProcessNotify()
        {
            WxPayData notifyData = GetNotifyData();
            WxPayData res        = new WxPayData();

            if (notifyData.GetValue("return_code").ToString() == "SUCCESS")
            {
                log.Info("return_code:SUCCESS");
                bool result = notifyData.GetValue("result_code").ToString() == "SUCCESS"?true:false;
                // out_trade_no
                if (result)
                {
                    string out_trade_no = notifyData.GetValue("out_trade_no").ToString();
                    log.Info("获得订单号:" + out_trade_no);
                    DAO.OrderPay op = obll.GetOrderPay(out_trade_no);
                    if (op != null)
                    {
                        if (op.PayState == "未支付")
                        {
                            op.PayState = "已支付";
                            if (op.PayType == 0)
                            {
                                op.Bank = "微信支付";
                            }
                            op.Remark = string.Format("{1},微信支付{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, out_trade_no);
                            //修改OrderPay
                            log.Info("*********即将修改OrderPay**************");
                            bool r = obll.upDataOrderPay(op);
                            log.Info("orderPay 更新结果:" + r);
                            log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + "  op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + out_trade_no);
                            //支付成功修改订单状态
                            log.Info("*********即将修改Order状态**************");
                            DAO.Order order = obll.GetOrder(out_trade_no);
                            //计算组合支付总金额==订单金额
                            bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice);
                            log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price);
                            if (r_vali_price)
                            {
                                bool r_oder = obll.upOrder(out_trade_no);
                                log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder);
                            }
                        }
                        res.SetValue("return_code", "SUCCESS");
                        res.SetValue("return_msg", "OK");
                        log.Info("return_code :SUCCESS");
                        page.Response.Write(res.ToXml());
                        page.Response.End();
                    }
                    else
                    {
                        res.SetValue("result_code", "FAIL");
                        res.SetValue("return_msg", "OrderPay is Null");
                        log.Error("支付结果失败result_code :FAil ==>OrderPay is Null");
                        page.Response.Write(res.ToXml());
                        page.Response.End();
                    }
                }
                else
                {
                    res.SetValue("result_code", "FAIL");
                    res.SetValue("return_msg", "result_code fail");
                    log.Error("支付结果失败result_code :FAil ==>" + res.ToXml());
                    page.Response.Write(res.ToXml());
                    page.Response.End();
                }
            }
            else
            {
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "retrun_code fail");
                log.Error("return_code :FAil ==>" + res.ToXml());
                page.Response.Write(res.ToXml());
                page.Response.End();
            }

            /**
             * //检查支付结果中transaction_id是否存在
             * if (!notifyData.IsSet("transaction_id"))
             * {
             *    //若transaction_id不存在,则立即返回结果给微信支付后台
             *    WxPayData res = new WxPayData();
             *    res.SetValue("return_code", "FAIL");
             *    res.SetValue("return_msg", "支付结果中微信订单号不存在");
             *    Log.Error("The Pay result is error : " + res.ToXml());
             *    page.Response.Write(res.ToXml());
             *    page.Response.End();
             * }
             *
             * string transaction_id = notifyData.GetValue("transaction_id").ToString();
             *
             * //查询订单,判断订单真实性
             * if (!QueryOrder(transaction_id))
             * {
             *    //若订单查询失败,则立即返回结果给微信支付后台
             *    WxPayData res = new WxPayData();
             *    res.SetValue("return_code", "FAIL");
             *    res.SetValue("return_msg", "订单查询失败");
             *    Log.Error("Order query failure : " + res.ToXml());
             *    page.Response.Write(res.ToXml());
             *    page.Response.End();
             * }
             * //查询订单成功
             * else
             * {
             *    WxPayData res = new WxPayData();
             *    res.SetValue("return_code", "SUCCESS");
             *    res.SetValue("return_msg", "OK");
             *    Log.Info("order query success : " + res.ToXml());
             *    page.Response.Write(res.ToXml());
             *    page.Response.End();
             * }*****/
        }
Exemple #5
0
        public void ProcessRequest(HttpContext context)
        {
            log.Debug("**********************支付宝回调autoreceive**********************");
            Dictionary <string, string> sPara = GetRequestPost();

            log.Debug("参数个数:" + sPara.Count);
            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify    = new Notify();
                bool   verifyResult = aliNotify.VerifyNotify(sPara, context.Request.Form["sign"]);
                log.Debug("autoreceive是否支付宝发出的验证:" + verifyResult + "参数sPara:" + sPara + "参数sign:" + context.Request.Form["sign"]);

                if (verifyResult)//验证成功
                {
                    log.Debug("autoreceive验证成功");
                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //请在这里加上商户的业务逻辑程序代码
                    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                    //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表

                    //解密(如果是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;
                        log.Debug("autoreceive商户订单号:" + out_trade_no + "支付宝交易号:" + trade_no + "支付宝交易状态:" + trade_status);
                        OrderBuss obll = new OrderBuss();
                        if (trade_status == "TRADE_FINISHED")
                        {
                            //判断该笔订单是否在商户网站中已经做过处理
                            //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                            //如果有做过处理,不执行商户的业务程序

                            //注意:
                            //该种交易状态只在两种情况下出现
                            //1、开通了普通即时到账,买家付款成功后。
                            //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。
                            DAO.OrderPay op = obll.GetOrderPay(out_trade_no);
                            if (op.PayState == "未支付")
                            {
                                op.PayState = "已支付";
                                if (op.PayType == 0)
                                {
                                    op.Bank = "支付宝";
                                }
                                op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no);
                                //修改OrderPay
                                log.Info("*********即将修改OrderPay**************");
                                bool r = obll.upDataOrderPay(op);
                                log.Info("orderPay 更新结果:" + r);
                                log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + "  op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no);
                                //支付成功修改订单状态
                                log.Info("*********即将修改Order状态**************");
                                DAO.Order order = obll.GetOrder(out_trade_no);
                                //计算组合支付总金额==订单金额
                                bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice);
                                log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price);
                                if (r_vali_price)
                                {
                                    bool r_oder = obll.upOrder(out_trade_no);
                                    log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder);
                                }
                            }
                            context.Response.Write("success");    //请不要修改或删除
                        }
                        if (trade_status == "TRADE_SUCCESS")
                        {
                            DAO.OrderPay op = obll.GetOrderPay(out_trade_no);
                            //判断该笔订单是否在商户网站中已经做过处理
                            //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                            //如果有做过处理,不执行商户的业务程序

                            //注意:
                            //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。
                            if (op.PayState == "未支付")
                            {
                                op.PayState = "已支付";
                                if (op.PayType == 0)
                                {
                                    op.Bank = "支付宝";
                                }
                                op.Remark = string.Format("{1},由支付宝电子对账单更新{0:yyyy-MM-dd HH:mm:ss},状态为:已支付", DateTime.Now, trade_no);
                                //修改OrderPay
                                log.Info("*********即将修改OrderPay**************");
                                bool r = obll.upDataOrderPay(op);
                                log.Info("orderPay 更新结果:" + r);
                                log.Info("orderPay 更新参数:op.Orderid=" + op.OrderId + "  op.PayState-" + op.PayState + "op.Bank-" + op.Bank + "trade_no-" + trade_no);
                                //支付成功修改订单状态
                                log.Info("*********即将修改Order状态**************");
                                DAO.Order order = obll.GetOrder(out_trade_no);
                                //计算组合支付总金额==订单金额
                                bool r_vali_price = obll.ValidataPayPrice(out_trade_no, order.TotalPrice);
                                log.Info("订单:" + op.OrderId + "金额,支付金额校验--" + r_vali_price);
                                if (r_vali_price)
                                {
                                    bool r_oder = obll.upOrder(out_trade_no);
                                    log.Info("订单:" + op.OrderId + " 修改结果--" + r_oder);
                                }
                            }

                            context.Response.Write("success");  //请不要修改或删除
                        }
                        else
                        {
                            context.Response.Write(trade_status);
                        }
                    }
                    catch (Exception exc)
                    {
                        context.Response.Write(exc.ToString());
                        //MJZCake.Utility.Common.Log(exc.Message, MJZCake.Utility.Common.LogLevel.high, "mjz");
                    }



                    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    context.Response.Write("fail");
                }


                context.Response.End();
            }
        }