// GET: /WeChat/FourthPay/ResultNotifyPage/
        public ActionResult ResultNotifyPage(PayResponse result)
        {
            var redirectAction = "";

            //检查支付结果中transaction_id是否存在
            string transaction_id = result.mercOrderId;

            if (transaction_id.HasValue())
            {
                //1.开始处理
                var chargePayOrder = _accountPayService.FindPayOrder(transaction_id);
                if (chargePayOrder != null)
                {
                    chargePayOrder.ToNextState(transaction_id);
                    _accountPayService.SyncPayOrder(chargePayOrder);

                    if (result.Successful &&
                        chargePayOrder.IsValid(transaction_id))
                    {
                        //防止重复处理
                        if (!chargePayOrder.IsEnd)
                        {
                            chargePayOrder.ToNextState();
                            //2.同步支付订单
                            _accountPayService.SyncPayOrder(chargePayOrder);
                        }

                        redirectAction = "ChargeOK";
                    }
                    else
                    {
                        redirectAction = "ChargeFailed";
                    }
                }
            }
            else
            {
                //若transaction_id不存在,则立即返回结果给微信支付后台
                //Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
                redirectAction = "ChargeFailed";
            }
            return(RedirectToAction(redirectAction));
        }
Пример #2
0
        public void notify_url()
        {
            SortedDictionary <string, string> sPara = GetRequestPost();

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

                if (verifyResult)//验证成功
                {
                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //请在这里加上商户的业务逻辑程序代码


                    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                    //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表



                    //商户订单号

                    string out_trade_no = Request.Form["out_trade_no"];

                    //支付宝交易号

                    string trade_no = Request.Form["trade_no"];

                    //交易状态
                    string trade_status = Request.Form["trade_status"];


                    //1.开始处理
                    var chargePayOrder = _accountPayService.FindPayOrder(out_trade_no);
                    chargePayOrder.Pending(trade_no);
                    if (Request.Form["trade_status"] == "TRADE_FINISHED")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                        //如果有做过处理,不执行商户的业务程序

                        //注意:
                        //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知

                        if (chargePayOrder.IsValid(trade_no))
                        {
                            chargePayOrder.Finished();
                            //2.同步支付订单
                            _accountPayService.SyncPayOrder(chargePayOrder);
                        }
                        else
                        {
                            //忽略
                        }
                    }
                    else if (Request.Form["trade_status"] == "TRADE_SUCCESS")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的
                        //如果有做过处理,不执行商户的业务程序

                        //注意:
                        //付款完成后,支付宝系统发送该交易状态通知

                        if (chargePayOrder.IsValid(trade_no))
                        {
                            chargePayOrder.Successful();
                            //2.同步支付订单
                            _accountPayService.SyncPayOrder(chargePayOrder);
                        }
                        else
                        {
                            //忽略
                        }
                    }
                    else
                    {
                        if (chargePayOrder.IsValid(trade_no))
                        {
                            chargePayOrder.Pending(trade_no);
                            //2.同步支付订单
                            _accountPayService.SyncPayOrder(chargePayOrder);
                        }
                    }

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

                    Response.Write("success");  //请不要修改或删除

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }
        // GET: /WeChat/WeChatPay/ResultNotifyPage/
        public void ResultNotifyPage()
        {
            var redirectAction = "";

            var res            = new WxPayData <Qx.Account.Configs.Setting.WxPayConfig.Sports>();
            var appid          = RequstParam["appid"];
            var attach         = RequstParam["attach"];
            var bank_type      = RequstParam["bank_type"];
            var cash_fee       = RequstParam["cash_fee"];
            var fee_type       = RequstParam["fee_type"];
            var is_subscribe   = RequstParam["is_subscribe"];
            var mch_id         = RequstParam["mch_id"];
            var nonce_str      = RequstParam["nonce_str"];
            var openid         = RequstParam["openid"];
            var out_trade_no   = RequstParam["out_trade_no"];
            var result_code    = RequstParam["result_code"];
            var return_code    = RequstParam["return_code"];
            var sign           = RequstParam["sign"];
            var time_end       = RequstParam["time_end"];
            var total_fee      = RequstParam["total_fee"];
            var transaction_id = RequstParam["transaction_id"];

            //检查支付结果中transaction_id是否存在
            if (transaction_id.HasValue() && out_trade_no.HasValue())
            {
                //1.开始处理
                var chargePayOrder = _accountPayService.FindPayOrder(out_trade_no);
                if (chargePayOrder != null)
                {
                    chargePayOrder.ToNextState(transaction_id);
                    _accountPayService.SyncPayOrder(chargePayOrder);

                    if (result_code.ToUpper().Contains("SUCCESS") &&
                        return_code.ToUpper().Contains("SUCCESS") &&
                        chargePayOrder.IsValid(transaction_id))
                    {
                        //防止重复处理
                        if (!chargePayOrder.IsEnd)
                        {
                            chargePayOrder.ToNextState();
                            //2.同步支付订单
                            _accountPayService.SyncPayOrder(chargePayOrder);

                            //3.发送成功通知
                            //var url = "http://wx.52xyj.cn/WeChat/BookTiketWeb/MyWallet";
                            //var acc = _accountPayService.FindAccount(openid);
                            //_wechatServices.Send_Charge_Ok_Msg(openid, url,
                            //    acc.Account.LastUpdateTime.ToStr(),
                            //    (int.Parse(total_fee)/100.0)+"元",
                            //   (acc.Account.Balance/100.0) + "元");
                        }
                        res.SetValue("return_code", "SUCCESS");
                        res.SetValue("return_msg", "OK");
                        //Log.Info(this.GetType().ToString(), "order query success : " + res.ToXml());
                        redirectAction = "ChargeOK";
                    }
                    else
                    {
                        // chargePayOrder.Failed();
                        // _accountPayService.SyncPayOrder(chargePayOrder);

                        res.SetValue("return_code", "FAIL");
                        res.SetValue("return_msg", "订单查询失败");
                        // Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml());
                        redirectAction = "ChargeFailed";
                    }
                }
            }
            else
            {
                //若transaction_id不存在,则立即返回结果给微信支付后台
                res.SetValue("return_code", "FAIL");
                res.SetValue("return_msg", "支付结果中微信订单号不存在");
                //Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
                redirectAction = "ChargeFailed";
            }
            // Response.Write(res.ToXml());
            // Response.End();
            var resultNotify = new ResultNotify <Qx.Account.Configs.Setting.WxPayConfig.Sports>(HttpContext);

            resultNotify.ProcessNotify();
            // return RedirectToAction(redirectAction, "BookTiketWeb", new { transaction_id = transaction_id });
        }
Пример #4
0
        // /Demo/TestPay
        public ActionResult TestPay()
        {
            const string DEMO_ACCOUNT_ONE = "plate-alipay";
            const string DEMO_ACCOUNT_TWO = "test-panda";
            const string DEMO_ORDER       = "10385-14093-8587258378306281019-10385-14093-8587258377194947454-8587258371564275398";
            const string DEMO_ALIPAY_ID   = "123456415645121346313548454";

            ////1.创建账户
            //var account = _accountPayService.CreateAccount(DataContext, AccountTypeEnum.Personal);
            ////2.改变账户类型
            //account.ChangeType(AccountTypeEnum.Orgnization);
            ////3.为账户充值
            //account.Charge(1000);
            ////4.账户消费
            //account.Expense(200);
            ////5.同步账户
            //_accountPayService.SyncAccount(account);
            //6.查找账户
            var payer   = _accountPayService.FindAccount(DEMO_ACCOUNT_ONE);
            var recever = _accountPayService.FindAccount(DEMO_ACCOUNT_TWO);
            ////7.删除账户
            //_accountPayService.DeleteAccount(DEMO_ACCOUNT_TWO);
            //8.账户支付记录
            var payerRecords = payer.Account.account_record;
            //1.创建支付订单
            var payOrder = _accountPayService.CreatePayOrder(payer, recever, 100, PayOrderTypeEnum.Nomal, PaymentTypeEnum.Jkb);

            //2.订单支付
            payOrder.Successful();
            //3.同步支付订单
            _accountPayService.SyncPayOrder(payOrder);
            //4.查找支付订单
            var findPayOrder = _accountPayService.FindPayOrder(DEMO_ORDER);

            ////5.删除支付订单
            //_accountPayService.DeletePayOrder(DEMO_ORDER);


            const string DEMO_CHARGE_ACCOUNT  = "test-panda";
            const string PLATE_ALIPAY_ACCOUNT = "plate-alipay";
            //1.创建支付订单
            var chargePayOrder = _accountPayService.CreatePayOrder(PLATE_ALIPAY_ACCOUNT, DEMO_CHARGE_ACCOUNT, 1000, PayOrderTypeEnum.AliPay, PaymentTypeEnum.Rmb);

            _accountPayService.SyncPayOrder(chargePayOrder);
            //2.订单支付激活
            chargePayOrder.Pending(DEMO_ALIPAY_ID);
            _accountPayService.SyncPayOrder(chargePayOrder);
            //3.订单验证并付款
            if (chargePayOrder.IsValid(DEMO_ALIPAY_ID))
            {
                chargePayOrder.Successful();
            }
            else
            {
                //忽略
            }
            _accountPayService.SyncPayOrder(chargePayOrder);
            //4.订单验证并结束
            if (chargePayOrder.IsValid(DEMO_ALIPAY_ID))
            {
                chargePayOrder.Finished();
            }
            else
            {
                //忽略
            }
            _accountPayService.SyncPayOrder(chargePayOrder);
            //5.同步支付订单
            // _accountPayService.SyncPayOrder(chargePayOrder);

            return(Alert("测试成功!"));
        }