类名:Notify 功能:支付宝通知处理类 详细:处理支付宝各接口通知返回 版本:3.3 修改日期:2011-07-05 '说明: 以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。 该代码仅供学习和研究支付宝接口使用,只是提供一个参考。 //////////////////////注意///////////////////////////// 调试通知返回时,可查看或改写log日志的写入TXT里的数据,来检查通知返回是否正常
Пример #1
0
        public async Task <ActionResult> AlipayNotifyUrl()
        {
            var loger = LogManager.GetLogger("Alipay");

            SortedDictionary <string, string> sPara = GetRequestPost();

            Com.Alipay.Notify aliNotify = new Com.Alipay.Notify();
            bool verifyResult           = aliNotify.Verify(sPara, Request.Form["notify_id"], Request.Form["sign"]);

            if (sPara.Count > 0 && verifyResult)
            {
                //商户订单号
                string outTradeNo = Request.Form["out_trade_no"];
                //支付宝交易号
                string tradeNo = Request.Form["trade_no"];
                //交易状态
                string tradeStatus = Request.Form["trade_status"];

                //打日志
                loger.Error("orderNo:{0};tradeStatus:{1};", outTradeNo, tradeStatus);
                if (tradeStatus == "TRADE_FINISHED" || tradeStatus == "TRADE_SUCCESS")
                {
                    //await OrderContract.PayOrder(outTradeNo, tradeNo, PayType.支付宝);
                    return(Content("success"));
                    //注意:
                    //该种交易状态只在两种情况下出现
                    //1、开通了普通即时到账,买家付款成功后。
                    //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。
                    //1、开通了高级即时到账,买家付款成功后。
                }
            }
            return(Content(""));
        }
Пример #2
0
        /// <summary>
        /// 支付宝异步返回订单交易信息 post
        /// </summary>
        /// <param name="context">当前上下文</param>
        /// <returns></returns>
        public ZFBReturnPara_Model ZFBCallBack(HttpContext context)
        {
            ZFBReturnPara_Model zfbpara = new ZFBReturnPara_Model();
            zfbpara.iscallbacksuccess = false;
            SortedDictionary<string, string> sPara = GetRequestPost(context);
            if (sPara.Count > 0)
            {
                Com.Alipay.Notify aliNotify = new Com.Alipay.Notify();
                bool verifyResult = aliNotify.Verify(sPara, context.Request.Form["notify_id"], context.Request.Form["sign"]);
                if (verifyResult)//验证成功
                {
                    #region
                    //退款状态,付款成功 没有此参数
                    string refund_status = "refund_status".GetFormString();
                    //交易状态
                    string trade_status = "trade_status".GetFormString();

                    zfbpara.trade_no = context.Request.Form["trade_no"];
                    zfbpara.order_no = context.Request.Form["out_trade_no"];
                    zfbpara.total_fee = context.Request.Form["total_fee"];
                    zfbpara.ispaysuccess = ((trade_status == "TRADE_SUCCESS" || trade_status == "TRADE_FINISHED") && refund_status == "") ? true : false;
                    zfbpara.isallreturn = ((trade_status == "TRADE_SUCCESS" || trade_status == "TRADE_FINISHED") && refund_status == "REFUND_SUCCESS") ? true : false;
                    #endregion
                    zfbpara.iscallbacksuccess = true;
                    zfbpara.sendzfbcallbackmessage = "success";
                }
                else
                    zfbpara.sendzfbcallbackmessage = "fail";
            }
            else
                zfbpara.sendzfbcallbackmessage = "无通知参数";

            return zfbpara;
        }
Пример #3
0
        protected void Page_Load(object sender, EventArgs e)
        {
            SortedDictionary<string, string> sPara = GetRequestGet();

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

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

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

                    //商户订单号

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

                    //支付宝交易号

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

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

                    if (Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序
                    }
                    else
                    {
                        Response.Write("trade_status=" + Request.QueryString["trade_status"]);
                    }

                    //打印页面
                    Response.Write("验证成功<br />");

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("验证失败");
                }
            }
            else
            {
                Response.Write("无返回参数");
            }
        }
Пример #4
0
        public ActionResult AlipayReturnUrl()
        {
            SortedDictionary <string, string> sPara = GetRequestGet();

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Com.Alipay.Notify aliNotify = new Com.Alipay.Notify();
                bool verifyResult           = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"]);
                if (verifyResult)//验证成功
                {
                    string out_trade_no = Request.QueryString["out_trade_no"];
                    //支付宝交易号
                    string trade_no = Request.QueryString["trade_no"];
                    //交易状态
                    string trade_status = Request.QueryString["trade_status"];
                    if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS")
                    {
                        // PresellOrderContract.OrederPay(out_trade_no, PayTypes.支付宝);
                        return(Content("success"));
                        //注意:
                        //该种交易状态只在两种情况下出现
                        //1、开通了普通即时到账,买家付款成功后。
                        //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。
                        //1、开通了高级即时到账,买家付款成功后。
                    }

                    //打印页面
                    Response.Write("验证成功<br />");

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("验证失败");
                }
            }
            else
            {
                Response.Write("无返回参数");
            }
            return(Content(""));
        }
Пример #5
0
        /// <summary>
        /// 支付宝异步返回订单交易信息 post
        /// </summary>
        /// <param name="context">当前上下文</param>
        /// <returns></returns>
        public ZFBReturnPara_Model ZFBCallBack(HttpContext context)
        {
            ZFBReturnPara_Model zfbpara = new ZFBReturnPara_Model();

            zfbpara.iscallbacksuccess = false;
            SortedDictionary <string, string> sPara = GetRequestPost(context);

            if (sPara.Count > 0)
            {
                Com.Alipay.Notify aliNotify = new Com.Alipay.Notify();
                bool verifyResult           = aliNotify.Verify(sPara, context.Request.Form["notify_id"], context.Request.Form["sign"]);
                if (verifyResult)//验证成功
                {
                    #region
                    //退款状态,付款成功 没有此参数
                    string refund_status = "refund_status".GetFormString();
                    //交易状态
                    string trade_status = "trade_status".GetFormString();

                    zfbpara.trade_no     = context.Request.Form["trade_no"];
                    zfbpara.order_no     = context.Request.Form["out_trade_no"];
                    zfbpara.total_fee    = context.Request.Form["total_fee"];
                    zfbpara.ispaysuccess = ((trade_status == "TRADE_SUCCESS" || trade_status == "TRADE_FINISHED") && refund_status == "") ? true : false;
                    zfbpara.isallreturn  = ((trade_status == "TRADE_SUCCESS" || trade_status == "TRADE_FINISHED") && refund_status == "REFUND_SUCCESS") ? true : false;
                    #endregion
                    zfbpara.iscallbacksuccess      = true;
                    zfbpara.sendzfbcallbackmessage = "success";
                }
                else
                {
                    zfbpara.sendzfbcallbackmessage = "fail";
                }
            }
            else
            {
                zfbpara.sendzfbcallbackmessage = "无通知参数";
            }

            return(zfbpara);
        }
Пример #6
0
        public ActionResult Result()
        {
            Dictionary <string, string> sPara = GetParamGet();

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

                if (verifyResult)//验证成功
                {
                    //商户订单号
                    string out_trade_no = Request.QueryString["out_trade_no"];

                    //支付宝交易号
                    string trade_no = Request.QueryString["trade_no"];

                    //交易状态
                    string result = Request.QueryString["result"];

                    if (string.Compare(result, "success", true) == 0)
                    {
                        return(Redirect("/recentread/index".GetChannelRouteUrl(RouteChannelId)));
                    }

                    //Response.Write("验证成功<br />");
                }
                else//验证失败
                {
                    //Response.Write("验证失败");
                }
            }
            else
            {
                //Response.Write("无返回参数");
            }

            return(Redirect("/order/recharge".GetChannelRouteUrl(RouteChannelId)));
        }
Пример #7
0
        /// <summary>
        /// 支付宝 返回 前端订单交易信息 get
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public ZFBReturnPara_Model ZFBReturn(HttpContext context)
        {
            ZFBReturnPara_Model zfbpara             = new ZFBReturnPara_Model();
            SortedDictionary <string, string> sPara = GetRequestGet(context);

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Com.Alipay.Notify aliNotify = new Com.Alipay.Notify();
                bool verifyResult           = aliNotify.Verify(sPara, context.Request.QueryString["notify_id"], context.Request.QueryString["sign"]);
                if (verifyResult)//验证成功
                {
                    #region
                    //交易状态
                    string trade_status = "trade_status".GetUrlString();

                    zfbpara.trade_no  = "trade_no".GetUrlString();
                    zfbpara.order_no  = "out_trade_no".GetUrlString();
                    zfbpara.total_fee = "total_fee".GetUrlString();

                    zfbpara.ispaysuccess = (trade_status == "TRADE_SUCCESS" || trade_status == "TRADE_FINISHED") ? true : false;
                    zfbpara.isallreturn  = false;
                    #endregion
                    zfbpara.iscallbacksuccess      = true;
                    zfbpara.sendzfbcallbackmessage = "success";
                }
                else
                {
                    zfbpara.sendzfbcallbackmessage = "fail";
                }
            }
            else
            {
                zfbpara.sendzfbcallbackmessage = "无通知参数";
            }

            return(zfbpara);
        }
Пример #8
0
        public ActionResult Payment_Result()
        {
            SortedDictionary<string, string> sPara = GetRequestGet();
            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify = new Notify();
                bool verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"]);

                if (verifyResult)//验证成功
                {
                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //请在这里加上商户的业务逻辑程序代码
                    var account = Request.QueryString["total_fee"];
                    var 当前用户 = currentUser as 供应商;
                    var 会员级别 = 当前用户.供应商用户信息.认证级别.ToString();
                    double amount = 0D;
                    switch (会员级别)
                    {
                        case "军采通标准会员":
                            switch (account)
                            {
                                case "2850":
                                    amount = double.Parse(account) / 0.95;
                                    break;
                                case "5400":
                                    amount = double.Parse(account) / 0.9;
                                    break;
                                case "8500":
                                    amount = double.Parse(account) / 0.85;
                                    break;
                                case "16000":
                                    amount = double.Parse(account) / 0.8;
                                    break;
                            }
                            break;
                        case "军采通高级会员":
                            switch (account)
                            {
                                case "2700":
                                    amount = double.Parse(account) / 0.9;
                                    break;
                                case "5100":
                                    amount = double.Parse(account) / 0.85;
                                    break;
                                case "8000":
                                    amount = double.Parse(account) / 0.8;
                                    break;
                                case "15000":
                                    amount = double.Parse(account) / 0.75;
                                    break;
                            }
                            break;
                        default:
                            switch (account)
                            {
                                case "2940":
                                    amount = double.Parse(account) * 0.98;
                                    break;
                                case "5700":
                                    amount = double.Parse(account) * 0.95;
                                    break;
                                case "9200":
                                    amount = double.Parse(account) * 0.92;
                                    break;
                                case "18000":
                                    amount = double.Parse(account) * 0.9;
                                    break;
                            }
                            break;
                    }


                    var 充值记录 = new 供应商充值记录();
                    充值记录.充值方式 = 充值方式.支付宝;
                    充值记录.充值金额 = (decimal)amount;
                    充值记录.充值时间 = DateTime.Now;
                    充值记录.供应商转款账号 = Request.QueryString["buyer_email"];
                    充值记录.收款账号 = Request.QueryString["seller_email"];
                    充值记录.所属供应商.用户ID = currentUser.Id;
                    供应商充值记录管理.添加供应商充值记录(充值记录);

                    var 余额记录 = 供应商充值余额管理.查询供应商充值余额(0, 0, Query<供应商充值余额>.Where(o => o.所属供应商.用户ID == currentUser.Id));
                    if (余额记录.Count() > 0)
                    {
                        var model = 余额记录.First();
                        model.可用余额 += 充值记录.充值金额;
                        供应商充值余额管理.更新供应商充值余额(model);
                    }
                    else
                    {
                        var 充值余额 = new 供应商充值余额();
                        充值余额.可用余额 = 充值记录.充值金额;
                        充值余额.所属供应商.用户ID = currentUser.Id;
                        供应商充值余额管理.添加供应商充值余额(充值余额);
                    }


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

                    //商户订单号

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

                    //支付宝交易号

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

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


                    if (Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS")
                    {
                        ViewData["Trade_Status"] = 1;//1充值成功,0充值失败
                        ViewData["result"] = amount; //Request.QueryString["total_fee"]; //充值金额
                        //ViewData["result"] = "用户号为" + Request.QueryString["buyer_id"] + "的你已购买价值为" + Request.QueryString["total_fee"] + "军采通产品,流水号位" + Request.QueryString["trade_no"] + "交易状态:" + Request.QueryString["trade_status"] + "验证ID为:" + Request.QueryString["notify_id"];
                    }
                    else
                    {
                        ViewData["Trade_Status"] = 0;
                        //Response.Write("trade_status=" + Request.QueryString["trade_status"]);
                    }

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    //Response.Write("验证失败");
                    ViewData["Trade_Status"] = 0;
                }
            }
            else
            {
                ViewData["result"] = "无返回参数";
                //Response.Write("无返回参数");
            }
            return View();
        }
Пример #9
0
        protected void Page_Load(object sender, EventArgs e)
        {
            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"];

                    if (Request.Form["trade_status"] == "TRADE_FINISHED")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序

                        //注意:
                        //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
                    }
                    else if (Request.Form["trade_status"] == "TRADE_SUCCESS")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序

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

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

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }
Пример #10
0
        ///// <summary>
        ///// 
        ///// </summary>
        ///// <returns></returns>
        //public ActionResult 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"];
        //            if (Request.Form["trade_status"] == "TRADE_FINISHED")
        //            {
        //                //判断该笔订单是否在商户网站中已经做过处理
        //                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
        //                //如果有做过处理,不执行商户的业务程序
        //                //注意:
        //                //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
        //            }
        //            else if (Request.Form["trade_status"] == "TRADE_SUCCESS")
        //            {
        //                //判断该笔订单是否在商户网站中已经做过处理
        //                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
        //                //如果有做过处理,不执行商户的业务程序
        //                //注意:
        //                //付款完成后,支付宝系统发送该交易状态通知
        //            }
        //            else
        //            {
        //            }
        //            //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
        //            Response.Write("success");  //请不要修改或删除
        //            /////////////////////////////////////////////////////////////////////////////////////////////////////////////
        //        }
        //        else//验证失败
        //        {
        //            Response.Write("fail");
        //        }
        //    }
        //    else
        //    {
        //        Response.Write("无通知参数");
        //    }
        //    return View();
        //}
        public ActionResult return_url()
        {
            SortedDictionary<string, string> sPara = GetRequestGet();

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

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

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

                    //商户订单号

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

                    //支付宝交易号

                    string trade_no = Request.QueryString["trade_no"];
                    //获取总金额
                    string total_fee = Request.QueryString["total_fee"];
                    //交易状态
                    string trade_status = Request.QueryString["trade_status"];

                    if (Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS")
                    {

                        return RedirectToAction("TradeSuccess", "ChannelEvent", new RouteValueDictionary { { "area", "Event" }, { "orderNumber", out_trade_no }});
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序
                    }
                    else
                    {
                        Response.Write("trade_status=" + Request.QueryString["trade_status"]);
                    }

                    //打印页面
                    Response.Write("验证成功<br />");

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("验证失败");
                }
            }
            else
            {
                Response.Write("无返回参数");
            }

            return View();
        }
Пример #11
0
        public void Notify()
        {
            string errorMessage = "fail";

            Dictionary <string, string> sPara = GetParamPost();

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

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

                    //XML解析notify_data数据
                    try
                    {
                        XmlHelper xmlHelper = new XmlHelper(sPara["notify_data"]);
                        if (xmlHelper != null)
                        {
                            //商户订单号
                            string out_trade_no = xmlHelper.GetNodeString("/notify/out_trade_no");
                            //支付宝交易号
                            string trade_no = xmlHelper.GetNodeString("/notify/trade_no");
                            //交易状态
                            string trade_status = xmlHelper.GetNodeString("/notify/trade_status");

                            string buyer_email = xmlHelper.GetNodeString("/notify/buyer_email");

                            string seller_id = xmlHelper.GetNodeString("/notify/seller_id");

                            decimal total_fee = xmlHelper.GetNodeDecimal("/notify/total_fee");

                            if (string.Compare(Com.Alipay.Config.Partner, seller_id, true) == 0 && (string.Compare(trade_status, "TRADE_FINISHED", true) == 0 || string.Compare(trade_status, "TRADE_SUCCESS", true) == 0))
                            {
                                int          result = 0;
                                RechargeInfo model  = new RechargeInfo();
                                model.OrderId   = out_trade_no;
                                model.FOrderId  = trade_no;
                                model.Cash      = total_fee * 100;
                                model.PayMobile = "";
                                _rechargeService.Completed(model, out result);     //1:成功 0:失败
                                if (result == (int)ErrorMessage.成功)
                                {
                                    errorMessage = "success";
                                }
                            }
                            else
                            {
                                errorMessage = trade_status;
                            }
                        }
                    }
                    catch
                    {
                    }
                }
            }
            else
            {
                errorMessage = "无通知参数";
            }

            this.Response.Write(errorMessage);
        }
        // 异步调用,支付宝会在24小时内多次调用,直到成功为止
        public ActionResult AlipayNotify()
        {
            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"];

                    if (Request.Form["trade_status"] == "TRADE_FINISHED")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序

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

                        //注意:
                        //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。
                    }
                    else
                    {
                    }

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

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }

            return View();
        }
Пример #13
0
        public void Notify()
        {
            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)//验证成功
                {
                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //请在这里加上商户的业务逻辑程序代码
                    var account = Request.Form["total_fee"];
                    string ordercode = "";
                    /*if (!string.IsNullOrWhiteSpace(Request.Form["body"]))
                    {
                        ordercode = Request.Form["body"];//优惠码
                    }*/
                    string id = Request.Form["extra_common_param"];//传回的商品id和采购数量
                    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                    //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

                    //商户订单号

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

                    //支付宝交易号

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

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

                    if (Request.Form["trade_status"] == "TRADE_FINISHED" || Request.Form["trade_status"] == "TRADE_SUCCESS")
                    {
                        if (订单管理.计数订单(0, 0, Query<订单>.Where(m => m.Id == long.Parse(id))) != 0)
                        {
                            订单 model = 订单管理.查找订单(long.Parse(id));
                            if (!model.已付款)
                            {
                                /*if (优惠码管理.计数优惠码(0, 0, Query<优惠码>.Where(m => m.Code == ordercode&&m.已使用==false))>0)
                                {
                                    model.使用优惠码 = true;
                                    优惠码 yh=优惠码管理.查询优惠码(0, 0, Query<优惠码>.Where(m => m.已使用 == false && m.Code == ordercode)).First();
                                    yh.已使用 = true;
                                    优惠码管理.更新优惠码(yh);
                                }*/
                                model.已付款 = true;
                                订单管理.更新订单(model);
                            }
                        }
                    }
                    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
            }
        }
        public string Contact()
        {

            SqlConnection sqlCnt = DBHelper.getConnection();
            SqlCommand cmd = null;
            SqlTransaction sqlTransaction = null;

            SqlConnection sqlCnt2 = DBHelper.createConnection();
            SqlCommand cmd2 = null;


            SqlDataReader reader = null;

            log4netHelper.info("Notify:" , "Begin--收到异步通知");
            string rtnXML ="",buyerAcount="";
            string out_trade_no = "";

            string content = "";
            bool isSuccess = false;
            string mrnString = "";
            string flowString = "";
            string posString = "";
            double feeRtn = 0;
            DateTime payDate = new DateTime();
            Dictionary<string, string> sPara = GetRequestPost(Request.Form);
            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify = new Notify();
                bool verifyResult = aliNotify.VerifyNotify(sPara, sPara["sign"]);

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

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

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

                    //XML解析notify_data数据
                    try
                    {

                        rtnXML = sPara["notify_data"];
                        XmlDocument xmlDoc = new XmlDocument();
                        xmlDoc.LoadXml(sPara["notify_data"]);
                        //商户订单号
                        out_trade_no = xmlDoc.SelectSingleNode("/notify/out_trade_no").InnerText;
                        //支付宝帐号
                        buyerAcount = xmlDoc.SelectSingleNode("/notify/buyer_email").InnerText;
                        //金额
                        feeRtn = double.Parse(xmlDoc.SelectSingleNode("/notify/total_fee").InnerText);
                        //支付宝交易号
                        string trade_no = xmlDoc.SelectSingleNode("/notify/trade_no").InnerText;
                        //交易状态
                        string trade_status = xmlDoc.SelectSingleNode("/notify/trade_status").InnerText;
                        //
                        payDate = DateTime.Parse(xmlDoc.SelectSingleNode("/notify/gmt_payment").InnerText);

                        posString = xmlDoc.SelectSingleNode("/notify/subject").InnerText;

                        xmlDoc = null;


                        mrnString = "";
                        flowString = "";
                        int posStart = 0;
                        int posEnd = 0;
                        posStart = posString.IndexOf(":{") + 2;
                        posEnd = posString.IndexOf("}");

                        if ((posEnd - posStart) > 3)
                        {
                            mrnString = posString.Substring(posStart, posEnd - posStart);
                            posStart = posString.IndexOf(":[") + 2;
                            posEnd = posString.IndexOf("]");
                            if ((posEnd - posStart) > 3)
                            {
                                flowString = posString.Substring(posStart, posEnd - posStart);
                                posString = flowString.Substring(flowString.Length - 4, 4);
                                flowString = flowString.Substring(0, flowString.Length - 4);
                            }
                            else
                            {
                                mrnString = "";
                                flowString = "";
                                posString = "";
                            }
                        }
                        else
                        {
                            mrnString = "";
                            flowString = "";
                            posString = "";
                        }

                        

                        log4netHelper.info("Notify:" + trade_status, "RTN:" + rtnXML);
                        log4netHelper.info("Notify:", "流水号:" + out_trade_no);
                        log4netHelper.info("Notify:", "淘宝订单号:" + trade_no);
                        log4netHelper.info("Notify:", "支付宝帐号:" + buyerAcount);
                        log4netHelper.info("Notify:", "金额:" + feeRtn.ToString());
                        log4netHelper.info("Notify", "mrn:" + mrnString);
                        log4netHelper.info("Notify", "flowid:" + flowString);
                        log4netHelper.info("Notify", "pos:" + posString);
                        if (trade_status == "TRADE_FINISHED")
                        {
                            //判断该笔订单是否在商户网站中已经做过处理
                            //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                            //如果有做过处理,不执行商户的业务程序

                            //注意:
                            //该种交易状态只在两种情况下出现
                            //1、开通了普通即时到账,买家付款成功后。
                            //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。

                            status = 2;
                            //return "异步通知:交易完成";
                            //Response.Write("success");  //请不要修改或删除
                        }
                        else if (trade_status == "TRADE_SUCCESS")
                        {
                            //判断该笔订单是否在商户网站中已经做过处理
                            //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                            //如果有做过处理,不执行商户的业务程序

                            //注意:
                            //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。

                            status = 1;
                            //return "异步通知:交易成功";
                            
                            //Response.Write("success");  //请不要修改或删除
                        }
                        else
                        {
                            status = -1;
                            //Response.Write(trade_status);
                            //return "异步通知:交易类型为其他";
                        }

                    }
                    catch (Exception exc)
                    {
                        status = -9;
                        content = "解析报表有误:" + exc.Message;
                        log4netHelper.info("Notify", "解析报表有误!");
                        //return "异步通知:解析报表出错";
                    }
                    finally
                    {
                        log4netHelper.info("Notify", "解析走完!");
                    }


                    if (status > 0)
                    {
                        if (out_trade_no.Length > 10 && mrnString.Length>4 && posString.Length==4 && flowString.Length >10)
                        {
                            Socket clientSocket = null;
                            Guid guid = new Guid();
                            try
                            {
                                guid = new Guid(out_trade_no);

                                string pcid ="";
                                int count = 0;

                                sqlCnt.Open();
                                sqlCnt2.Open();

                                cmd = sqlCnt.CreateCommand();              //创建SqlCommand对象
                                cmd2 = sqlCnt2.CreateCommand();


                                cmd.CommandType = CommandType.Text;
                                cmd.CommandText = "select COUNT(*) from BankMsgSwitch where GUID =@GUID";   //sql语句

                                cmd.Parameters.Add("@GUID", SqlDbType.UniqueIdentifier);
                                cmd.Parameters["@GUID"].Value = guid;

                                cmd2.CommandType = CommandType.Text;
                                cmd2.CommandText = "select COUNT(*) from BankMsgSwitch where GUID =@GUID";   //sql语句

                                cmd2.Parameters.Add("@GUID", SqlDbType.UniqueIdentifier);
                                cmd2.Parameters["@GUID"].Value = guid;
                                
                                
                                cmd.Parameters.Add("@RMsg_xml", SqlDbType.Xml);
                                cmd.Parameters["@RMsg_xml"].Value = rtnXML;

                                cmd.Parameters.Add("@RMsg_txt", SqlDbType.Text);
                                cmd.Parameters["@RMsg_txt"].Value = rtnXML;

                                cmd.Parameters.Add("@BuyerAcount", SqlDbType.Text);
                                cmd.Parameters["@BuyerAcount"].Value = buyerAcount;

                                cmd.Parameters.Add("@Rdatetime", SqlDbType.DateTime);
                                cmd.Parameters["@Rdatetime"].Value = DateTime.Now;

                                cmd.Parameters.Add("@PayDate", SqlDbType.DateTime);
                                cmd.Parameters["@PayDate"].Value = payDate;

                                cmd.Parameters.Add("@FeeRtn", SqlDbType.Decimal);
                                cmd.Parameters["@FeeRtn"].Value = feeRtn;

                                cmd.Parameters.Add("@Mrn", SqlDbType.Int);
                                cmd.Parameters["@Mrn"].Value = int.Parse(mrnString);


                                count = (int)cmd.ExecuteScalar();

                                //cmd.CommandText = "select COUNT(*) from BankTradeTitle where GInterID =@GUID";
                                //count *= (int)cmd.ExecuteScalar();

                               
                                if (count == 1 )
                                {
                                   
                                        cmd.CommandText = "select b.pcid as 'pcid' from pmain b where mrn =@Mrn";

                                        reader = cmd.ExecuteReader();

                                        if (reader.HasRows)
                                        {
                                            reader.Read();

                                            pcid = reader["pcid"].ToString();
                                            cmd.Parameters.Add("@Pcid", SqlDbType.Text);
                                            cmd.Parameters["@Pcid"].Value = reader["pcid"].ToString();

                                            reader.Close();
                                            reader.Dispose();
                                            try
                                            {

                                                cmd.CommandText = "select RMsgText from BankMsgSwitch where GUID =@GUID";
                                                string rMsgText = cmd.ExecuteScalar().ToString().Trim();
                                                if (rMsgText.Length<3)
                                                 {
                                                     sqlTransaction = sqlCnt.BeginTransaction();
                                                     cmd.Transaction = sqlTransaction;
                                                     cmd.CommandText = "update BankMsgSwitch set RMsg = @RMsg_xml ,RMsgText = @RMsg_txt,RDateTime=@Rdatetime,socketflag='0' where GUID = @GUID";   //sql语句
                                                     cmd.ExecuteNonQuery();

                                                     //cmd.CommandText = "insert into BankMnyFlow (FlowID,CrdNO,Mrn,DoType,DoMoney,Operater,Updatetime,BankID) values (@GUID,@Pcid,@Mrn,'1',@FeeRtn,@Operater,@Rdatetime,'100040')";   //sql语句
                                                     //cmd.ExecuteNonQuery();


                                                     //转账

                                                     sqlTransaction.Commit();
                                                     content = "更新日志表成功,待发送Socket";
                                                     log4netHelper.info("Notify", "SWITCH表Commit成功!");
                                                     log4netHelper.info("Notify", "身份证:" + pcid);
                                                     log4netHelper.info("Notify", "GUID:" + guid.ToString());

                                                     log4netHelper.info("Notify", "更新日志表成功" );
                                                 }
                                                if (null != sqlTransaction)
                                                    sqlTransaction.Dispose();

                                                sqlTransaction = sqlCnt2.BeginTransaction();
                                                cmd2.Transaction = sqlTransaction;
                                                cmd2.CommandText = "select socketflag from BankMsgSwitch where GUID =@GUID";
                                                rMsgText = cmd2.ExecuteScalar().ToString().Trim();
                                                if ("0".Equals(rMsgText))
                                                {
                                                    IPAddress ip = IPAddress.Parse(MyUtils.SystemParms.socketIP);
                                                    clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                                                    clientSocket.Connect(new IPEndPoint(ip, MyUtils.SystemParms.socketPort)); //配置服务器IP与端口  

                                                    //通过clientSocket接收数据  
                                                    //int receiveLength = clientSocket.Receive(result);
                                                    //log4netHelper.fatal("Socket",Encoding.ASCII.GetString(result, 0, receiveLength));
                                                    ////Console.WriteLine("接收服务器消息:{0}", Encoding.ASCII.GetString(result, 0, receiveLength));
                                                    ////通过 clientSocket 发送数据  

                                                    string sendMessage = "<Root><TransCode>801</TransCode><Date>" + payDate.ToString("yyyyMMdd") + "</Date><BankTrace></BankTrace><BankNumber></BankNumber>"
                                                        + "<idno>" + pcid + "</idno><AMT>" + feeRtn.ToString("f2") + "</AMT><TradeCode>" + flowString + "</TradeCode><PosId>" + posString + "</PosId><Guid>" + out_trade_no + "</Guid></Root>";

                                                    clientSocket.Send(Encoding.GetEncoding("gb18030").GetBytes(sendMessage));
                                                    log4netHelper.info("Notify", "Socket:" + "发送");

                                                    Thread.Sleep(300);
                                                    string recStr = "";
                                                    byte[] recBytes = new byte[4096];
                                                    int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0);
                                                    recStr = Encoding.GetEncoding("gb18030").GetString(recBytes, 0, bytes);
                                                    //recStr += Encoding.Default.GetString(recBytes, 0, bytes);
                                                    recStr = recStr.Substring(10, recStr.Length - 10);
                                                    XmlDocument xmlDoc = new XmlDocument();
                                                    xmlDoc.LoadXml(recStr);
                                                    //商户订单号
                                                    recStr = xmlDoc.SelectSingleNode("/Response/TransReturn").InnerText;


                                                    xmlDoc = null;
                                                    log4netHelper.info("Notify", "Socket:" + "接受,TransReturn:" + recStr);
                                                }

                                                content = "成功发送Socket";
                                     
                                                isSuccess = true;
                                            }
                                            catch (Exception e)
                                            {
                                                sqlTransaction.Rollback();
                                                content = "更新日志表出错" + e.Message;
                                                isSuccess = false;

                                                //log4netHelper.info("Notify", );
                                            }
                                            finally
                                            {
                                                if (null != sqlTransaction)
                                                {
                                                    sqlTransaction.Dispose();
                                                    sqlTransaction = null;
                                                }
                                                if (null != clientSocket)
                                                {
                                                    clientSocket.Shutdown(SocketShutdown.Both);
                                                    clientSocket.Close();
                                                }
                                            }

                                    }
                                    else
                                    {
                                        content = "无该订单信息";
                                        isSuccess = false;
                                        //log4netHelper.info("Notify", "End:无该订单信息!");
                                        //return "无该订单信息";
                                    }

                                }
                                else
                                {
                                    content = "BankMsgSwitch表记录有误!";
                                    isSuccess = false;
                                    //log4netHelper.info("Notify", "BankMnyFlow、BankTradeTitle、BankMsgSwitch三个表记录有误!");
                                    //return "BankMnyFlow、BankTradeTitle、BankMsgSwitch三个表记录有误!";
                                }

                            }
                            catch (Exception e)
                            {
                                content = "操作数据库有误:" + e.Message;
                                isSuccess = false;
                                log4netHelper.info("Notify", "操作数据库有误:" + e.Message);
                            }
                            finally
                            {
                                if (null != reader)
                                {
                                    reader.Dispose();
                                }
                                if (null != cmd)
                                {
                                    cmd.Dispose();
                                }
                                if (null != cmd2)
                                {
                                    cmd2.Dispose();
                                }
                                sqlCnt.Close();
                                sqlCnt2.Close();
                                sqlCnt2 = null;
                                sqlCnt = null;
                                
                            }
                            log4netHelper.info("Notify", "End:----");
                        }
                        else
                        {
                            content = "GUID有误";
                            isSuccess = false;
                            //log4netHelper.info("Notify", "End:GUID有误!");
                            //return "GUID有误";
                        }

                    }
                    else
                    {
                        content = "交易状态为其他";
                        isSuccess = false;
                        //log4netHelper.info("Notify", "End:交易状态为其他");
                        //return "交易状态为其他";
                    }


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




                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    content = "验证失败";
                    isSuccess = false;
                    //log4netHelper.info("Notify:", "End:验证失败!");
                    //return "验证失败";
                }
            }
            else
            {
                //log4netHelper.info("Notify:", "End:无通知参数");
                //return "无通知参数";
                content = "无通知参数:" + sPara.Count;
                isSuccess = false;
            }

            if (isSuccess)
            {
                log4netHelper.info("Notify", "Success:" + content);
                log4netHelper.info("Notify:", "    ");
                return "success";
            }
            else
            {
                log4netHelper.info("Notify:", "Fail:" + content);
                log4netHelper.info("Notify:", "    ");
                return "fail";
            }
            


        }
Пример #15
0
        protected void Page_Load(object sender, EventArgs e)
        {
            SortedDictionary<string, string> sPara = GetRequestPost();

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

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

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

                    //商户订单号

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

                    //支付宝交易号

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

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

                    Eyousoft_yhq.BLL.Order OrderType = new Eyousoft_yhq.BLL.Order();
                    var OrderModel = new Eyousoft_yhq.Model.Order();
                    string res = string.Empty;
                    if (trade_status == "TRADE_FINISHED")
                    {

                    }

                    else if (Request.QueryString["trade_status"] == "TRADE_SUCCESS")
                    {
                        OrderModel = OrderType.GetModel(out_trade_no);
                        if (OrderModel != null && OrderModel.PayState != Eyousoft_yhq.Model.PaymentState.已支付)
                        {

                            Eyousoft_yhq.Model.MConDetaile jilu = new Eyousoft_yhq.Model.MConDetaile()
                            {
                                HuiYuanID = OrderModel.MemberID,
                                XFway = Eyousoft_yhq.Model.XFfangshi.消费,
                                DingDanBianHao = OrderModel.OrderCode,
                                JiaoYiHao = DateTime.Now.ToString("yyyyMMddHHmm") + Eyousoft_yhq.SQLServerDAL.Utils.GetRandomString(5),
                                JiaoYiShiJian = DateTime.Now,
                                DDCarrtes = Eyousoft_yhq.Model.DDleibie.旅游订单,
                                JinE = OrderModel.OrderPrice
                            };
                            new Eyousoft_yhq.BLL.BConDetaile().Add(jilu);//消费记录

                            string Ra = Eyousoft_yhq.SQLServerDAL.Utils.GetRandomString(12);
                            while (OrderType.Exists(Ra))
                            {
                                Ra = Eyousoft_yhq.SQLServerDAL.Utils.GetRandomString(12);
                            }
                            Eyousoft_yhq.Model.Order OrderInfo = new Eyousoft_yhq.Model.Order()
                            {
                                OrderID = out_trade_no,
                                PayState = Eyousoft_yhq.Model.PaymentState.已支付,
                                ConfirmCode = Ra,
                                OrderState = Eyousoft_yhq.Model.OrderState.已成交
                            };
                            int Sum = OrderType.UpdatePayState(OrderInfo);
                            if (Sum > 0)
                            {
                                Eyousoft_yhq.BLL.Member UM = new Eyousoft_yhq.BLL.Member();
                                bool Mo = UM.GetModel(OrderModel.MemberID).valiUser;
                                if (!Mo)
                                {
                                    #region 短信发送
                                    string code = string.Empty;
                                    IList<Eyousoft_yhq.Model.SMSChannel> channel = Eyousoft_yhq.Web.BsendMsg.CommonProcess.GetSMSChannels();
                                    code = string.Format("下单成功,确认码:{0}!【惠旅游】", Ra);
                                    Eyousoft_yhq.Web.BsendMsg.CommonProcess.SendSMS(OrderModel.MemberTel, code, channel[0], out res);//发送
                                    #endregion
                                    #region  短信日志
                                    Eyousoft_yhq.Model.MsgLog MsLog = new Eyousoft_yhq.Model.MsgLog
                                    {
                                        TelCode = OrderModel.MemberTel,
                                        MsgText = code,
                                        ReResult = res
                                    };
                                    new Eyousoft_yhq.BLL.MsgLog().Add(MsLog);
                                    #endregion
                                }
                            }
                        }
                        var chongzhiModel = new Eyousoft_yhq.BLL.BChongZhi().GetModel(out_trade_no);
                        if (chongzhiModel != null && chongzhiModel.PayState == Eyousoft_yhq.Model.PaymentState.未支付)
                        {
                            var member = new Eyousoft_yhq.BLL.Member().GetModel(chongzhiModel.OperatorID);
                            if (member != null)
                            {
                                member.YuE = member.YuE + chongzhiModel.OptMoney;
                                bool result = new Eyousoft_yhq.BLL.Member().Update(member);
                            }
                            new Eyousoft_yhq.BLL.BChongZhi().SheZhiZhiFus(out_trade_no, Eyousoft_yhq.Model.PaymentState.已支付);
                        }
                    }
                    else
                    {
                    }

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

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }
Пример #16
0
        protected void Page_Load(object sender, EventArgs e)
        {
            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"];

                    if (Request.Form["trade_status"] == "TRADE_FINISHED")
                    {
                        Response.Write("success");
                    }
                    else if (Request.Form["trade_status"] == "TRADE_SUCCESS")
                    {

                        var OrderModel = new Eyousoft_yhq.Model.Order();
                        var OrderBll = new Eyousoft_yhq.BLL.Order();
                        OrderModel = OrderBll.GetModel(out_trade_no);
                        if (OrderModel != null && OrderModel.PayState == Eyousoft_yhq.Model.PaymentState.未支付)
                        {
                            string result = string.Empty;
                            string Ra = Eyousoft_yhq.SQLServerDAL.Utils.GetRandomString(12);
                            while (OrderBll.Exists(Ra))
                            {
                                Ra = Eyousoft_yhq.SQLServerDAL.Utils.GetRandomString(12);
                            }
                            OrderModel.OrderID = out_trade_no;
                            OrderModel.PayState = Eyousoft_yhq.Model.PaymentState.已支付;
                            OrderModel.OrderState = Eyousoft_yhq.Model.OrderState.已成交;
                            OrderModel.ConfirmCode = Ra;
                            int Sum = OrderBll.UpdatePayState(OrderModel);
                            if (Sum > 0)
                            {
                                Eyousoft_yhq.BLL.Member UM = new Eyousoft_yhq.BLL.Member();
                                bool Mo = UM.GetModel(OrderModel.MemberID).valiUser;
                                if (!Mo)
                                {
                                    #region 短信发送
                                    string code = string.Empty;
                                    IList<Eyousoft_yhq.Model.SMSChannel> channel = Eyousoft_yhq.Web.BsendMsg.CommonProcess.GetSMSChannels();
                                    code = string.Format("下单成功,确认码:{0}!【惠旅游】", Ra);
                                    Eyousoft_yhq.Web.BsendMsg.CommonProcess.SendSMS(OrderModel.MemberTel, code, channel[0], out result);//发送
                                    #region  短信日志
                                    Eyousoft_yhq.Model.MsgLog MsLog = new Eyousoft_yhq.Model.MsgLog
                                    {
                                        TelCode = OrderModel.MemberTel,
                                        MsgText = code,
                                        ReResult = result
                                    };
                                    new Eyousoft_yhq.BLL.MsgLog().Add(MsLog);
                                    #endregion

                                    #endregion
                                }
                            }
                        }
                        var chongzhiModel = new Eyousoft_yhq.BLL.BChongZhi().GetModel(out_trade_no);
                        if (chongzhiModel != null && chongzhiModel.PayState == Eyousoft_yhq.Model.PaymentState.未支付)
                        {
                            var member = new Eyousoft_yhq.BLL.Member().GetModel(chongzhiModel.OperatorID);
                            if (member != null)
                            {
                                member.YuE = member.YuE + chongzhiModel.OptMoney;
                                bool result = new Eyousoft_yhq.BLL.Member().Update(member);
                            }
                            new Eyousoft_yhq.BLL.BChongZhi().SheZhiZhiFus(out_trade_no, Eyousoft_yhq.Model.PaymentState.已支付);
                        }
                    }
                    else
                    {
                    }

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

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }
Пример #17
0
        protected void Page_Load(object sender, EventArgs e)
        {
            SortedDictionary<string, string> sPara = GetRequestGet();

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

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

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

                    //商户订单号

                    string out_trade_no = Request.QueryString["out_trade_no"];
                    orderID = out_trade_no;
                    //支付宝交易号

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

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

                    if (Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS")
                    {
                        succ = true;
                        if (out_trade_no.Contains("C"))
                        {
                            ordertype = 1;
                        }
                        else if (out_trade_no.Contains("P"))
                        {
                            ordertype = 2;
                        }
                        ORD_CashMod m_mod = ORD_CashBll.GetInstance().GetModelByOrderID(out_trade_no);
                        if (m_mod == null)
                        {
                            ShowError("");//订单号错误
                        }
                        if (m_mod.Status == (int)AppEnum.CashOrderStatus.beforepay)
                        {
                            m_mod.CurrentID = trade_no;//记录支付流水号
                            ORD_CashBll.GetInstance().SetPaySucc(m_mod);
                        }
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序
                    }
                    else
                    {
                        LogManagement.getInstance().WriteTrace("订单" + orderID + "支付宝返回"+Request.QueryString["trade_status"], "PayReturnForAlipay",base.Request.UserHostAddress );
                    }

                    //打印页面
                    ShowResult();

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    LogManagement.getInstance().WriteTrace("订单" + orderID + "支付宝返回验证失败", "PayReturnForAlipay", base.Request.UserHostAddress);
                }
            }
            else
            {
                LogManagement.getInstance().WriteTrace("支付宝返回无参数", "PayReturnForAlipay", base.Request.UserHostAddress);
                ShowError("请从正确的入口进入");
            }
        }
Пример #18
0
        protected void Page_Load(object sender, EventArgs e)
        {
            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"].Filter();

                    //支付宝交易号

                    string trade_no = Request.Form["trade_no"].Filter();

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

                    //买家支付宝账号
                    string buyer_email = Request.Form["buyer_email"];

                    int orderStatus = 1;// (int)XHZ.Model.UOrderStatus.等待付款;
                    if (trade_status.ToUpper() == "TRADE_FINISHED")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序

                        //注意:
                        //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知
                        orderStatus = (int)UOrderStatus.付款成功;
                    }
                    else if (trade_status.ToUpper() == "TRADE_SUCCESS")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序

                        //注意:
                        //付款完成后,支付宝系统发送该交易状态通知
                        orderStatus = (int)UOrderStatus.付款成功;
                    }
                    else
                    {
                    }

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

                    Rc.Web.Payment.Core.LogHandler.WriteLogForPay(out_trade_no, "付款成功", trade_no);

                    #region 付款成功 异步更新订单表 author:Ethan
                    Model_UserOrder model = new Model_UserOrder();
                    BLL_UserOrder   bll   = new BLL_UserOrder();
                    model = bll.GetModelByOrderNo(out_trade_no);

                    if (orderStatus == (int)UOrderStatus.付款成功 && model.UserOrder_Status == (int)UOrderStatus.待付款)
                    {
                        model.UserOrder_Paytool    = UserOrder_PaytoolEnum.ALIPAY.ToString();
                        model.UsreOrder_Buyeremail = buyer_email;
                        model.trade_no             = trade_no;
                        model.trade_status         = trade_status;
                        model.UserOrder_Status     = (int)UOrderStatus.完成;
                        model.UserOrder_FinishTime = DateTime.Now;

                        bool executeFlag = false;
                        if (new BLL_UserBuyResources().GetRecordCount(string.Format("UserId='{0}' and Book_id='{1}' ", model.UserId, model.Book_Id)) == 0)
                        {
                            #region 用户购买资源表
                            Model_UserBuyResources buyModel = new Model_UserBuyResources();
                            buyModel.UserBuyResources_ID = Guid.NewGuid().ToString();
                            buyModel.UserId     = model.UserId;
                            buyModel.Book_id    = model.Book_Id;
                            buyModel.BookPrice  = model.Book_Price;
                            buyModel.BuyType    = UserOrder_PaytoolEnum.ALIPAY.ToString();
                            buyModel.CreateTime = DateTime.Now;
                            buyModel.CreateUser = "******";
                            #endregion
                            executeFlag = bll.UpdateAndAddUserBuyResources(model, buyModel);
                        }
                        else
                        {
                            executeFlag = bll.Update(model);
                        }

                        if (executeFlag)
                        {
                            //try
                            //{
                            //    P_User userModel = new P_UserBLL().GetModel(model.user_id);
                            //    pfunction.SendSMS(userModel.moblie, "您的订单" + model.OrderNo + "已支付成功");
                            //}
                            //catch
                            //{

                            //}
                            //if (new U_OrdersHandleBLL().GetRecordCount("OrderId='" + model.OrderId + "' and OperateUser='******'") == 0)
                            //{
                            //    pfunction.InsertOrderHandle(model.OrderId, "您已" + XHZ.Common.EnumService.GetDescription<UOrderStatus>(orderStatus), "支付接口异步回调");
                            //}
                            new Rc.Cloud.BLL.BLL_clsAuth().AddLogFromBS(Request.Url.ToString(), string.Format("支付宝回调。购买资源成功,购买人:{0},资源标识:{1}"
                                                                                                              , model.UserId, model.Book_Id));
                            Response.Write("success");  //请不要修改或删除
                        }
                    }
                    #endregion

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }
Пример #19
0
        public void Notify()
        {
            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"]);
                // WriteTxt(Request.Form["notify_id"]+"\r\n" + Request.Form["sign"]);
                if (verifyResult)//验证成功
                {
                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //请在这里加上商户的业务逻辑程序代码
                    var account = Request.QueryString["total_fee"];
                    var 当前用户 = currentUser as 供应商;
                    var 会员级别 = 当前用户.供应商用户信息.认证级别.ToString();
                    double amount = 0D;
                    switch (会员级别)
                    {
                        case "军采通标准会员":
                            switch (account)
                            {
                                case "2850":
                                    amount = double.Parse(account) / 0.95;
                                    break;
                                case "5400":
                                    amount = double.Parse(account) / 0.9;
                                    break;
                                case "8500":
                                    amount = double.Parse(account) / 0.85;
                                    break;
                                case "16000":
                                    amount = double.Parse(account) / 0.8;
                                    break;
                            }
                            break;
                        case "军采通高级会员":
                            switch (account)
                            {
                                case "2700":
                                    amount = double.Parse(account) / 0.9;
                                    break;
                                case "5100":
                                    amount = double.Parse(account) / 0.85;
                                    break;
                                case "8000":
                                    amount = double.Parse(account) / 0.8;
                                    break;
                                case "15000":
                                    amount = double.Parse(account) / 0.75;
                                    break;
                            }
                            break;
                        default:
                            switch (account)
                            {
                                case "2940":
                                    amount = double.Parse(account) * 0.98;
                                    break;
                                case "5700":
                                    amount = double.Parse(account) * 0.95;
                                    break;
                                case "9200":
                                    amount = double.Parse(account) * 0.92;
                                    break;
                                case "18000":
                                    amount = double.Parse(account) * 0.9;
                                    break;
                            }
                            break;
                    }


                    var 充值记录 = new 供应商充值记录();
                    充值记录.充值方式 = 充值方式.支付宝;
                    充值记录.充值金额 = (decimal)amount;
                    充值记录.充值时间 = DateTime.Now;
                    充值记录.供应商转款账号 = Request.QueryString["buyer_email"];
                    充值记录.收款账号 = Request.QueryString["seller_email"];
                    充值记录.所属供应商.用户ID = currentUser.Id;
                    供应商充值记录管理.添加供应商充值记录(充值记录);

                    var 余额记录 = 供应商充值余额管理.查询供应商充值余额(0, 0, Query<供应商充值余额>.Where(o => o.所属供应商.用户ID == currentUser.Id));
                    if (余额记录.Count() > 0)
                    {
                        var model = 余额记录.First();
                        model.可用余额 += 充值记录.充值金额;
                        供应商充值余额管理.更新供应商充值余额(model);
                    }
                    else
                    {
                        var 充值余额 = new 供应商充值余额();
                        充值余额.可用余额 = 充值记录.充值金额;
                        充值余额.所属供应商.用户ID = currentUser.Id;
                        供应商充值余额管理.添加供应商充值余额(充值余额);
                    }



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

                    //商户订单号

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

                    //支付宝交易号

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

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


                    if (Request.Form["trade_status"] == "TRADE_FINISHED" || Request.Form["trade_status"] == "TRADE_SUCCESS")
                    {
                        WriteTxt("订单号:" + out_trade_no + "交易号:" + trade_no + "交易状态:" + trade_status);
                    }
                    else
                    {
                    }
                    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
                    Response.Write("success");  //请不要修改或删除

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }
Пример #20
0
        public ActionResult Notify2()
        {
            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"];

                    var amount = decimal.Parse(Request.Form["total_fee"]);
                    if (trade_status == "TRADE_FINISHED" ||
                        trade_status == "TRADE_SUCCESS")
                    {
                        var paymentEntity = Context.Set<OrderTransactionEntity>().Where(p => p.OrderNo == out_trade_no
                            && p.PaymentCode == Config.PaymentCode).FirstOrDefault();
                        var orderEntity = Context.Set<OrderEntity>().Where(o => o.OrderNo == out_trade_no).FirstOrDefault();
                        if (paymentEntity == null && orderEntity != null)
                        {
                            OrderTransactionEntity orderTransaction = null;
                            using (var ts = new TransactionScope())
                            {
                                _paymentNotifyRepo.Insert(new PaymentNotifyLogEntity()
                                {
                                    CreateDate = DateTime.Now,
                                    OrderNo = out_trade_no,
                                    PaymentCode = Config.PaymentCode,
                                    PaymentContent = JsonConvert.SerializeObject(sPara)
                                });

                                orderTransaction = _orderTranRepo.Insert(new OrderTransactionEntity()
                                {
                                    Amount = amount,
                                    OrderNo = out_trade_no,
                                    CreateDate = DateTime.Now,
                                    IsSynced = false,
                                    PaymentCode = Config.PaymentCode,
                                    TransNo = trade_no,
                                    OrderType = (int)PaidOrderType.Self
                                });
                                if (orderEntity.Status != (int)OrderStatus.Paid && orderEntity.TotalAmount<=amount)
                                {
                                    orderEntity.Status = (int)OrderStatus.Paid;
                                    orderEntity.UpdateDate = DateTime.Now;
                                    orderEntity.RecAmount = amount;
                                    _orderRepo.Update(orderEntity);

                                    _orderlogRepo.Insert(new OrderLogEntity()
                                    {
                                        CreateDate = DateTime.Now,
                                        CreateUser = 0,
                                        CustomerId = orderEntity.CustomerId,
                                        Operation = "支付订单",
                                        OrderNo = out_trade_no,
                                        Type = (int)OrderOpera.CustomerPay
                                    });
                                }
                                ts.Complete();
                               
                            }
                            //notify sync async
                            Task.Factory.StartNew(() =>
                            {
                                OrderRule.OrderPaid2Erp(orderTransaction);
                            });
                        }

                    }
                    return Content("success");

                }
                else
                {
                    return Content("fail");
                }
            }
            else
            {
                return Content("无通知参数");
            }
        }
Пример #21
0
        public ActionResult return_url()
        {
            SortedDictionary<string, string> sPara = GetRequestGet();

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

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

                    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                    //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
                    string trade_no = Request.QueryString["trade_no"];              //支付宝交易号
                    string order_no = Request.QueryString["out_trade_no"];	        //获取订单号
                    string total_fee = Request.QueryString["price"];	            //获取总金额
                    string subject = Request.QueryString["subject"];                //商品名称、订单名称
                    string body = Request.QueryString["body"];                      //商品描述、订单备注、描述
                    string buyer_email = Request.QueryString["buyer_email"];        //买家支付宝账号
                    string receive_name = Request.QueryString["receive_name"];      //收货人姓名
                    string receive_address = Request.QueryString["receive_address"];//收货人地址
                    string receive_zip = Request.QueryString["receive_zip"];        //收货人邮编
                    string receive_phone = Request.QueryString["receive_phone"];    //收货人电话
                    string receive_mobile = Request.QueryString["receive_mobile"];  //收货人手机
                    string trade_status = Request.QueryString["trade_status"];      //交易状态

                    ViewBag.message = null;
                    if (Request.QueryString["trade_status"] == "WAIT_SELLER_SEND_GOODS")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理(可参考“集成教程”中“3.4返回数据处理”)
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序
                    }
                    else
                    {
                        ViewBag.message = "trade_status=" + Request.QueryString["trade_status"];
                    }

                    //打印页面
                    ViewBag.message = "验证成功<br />" + "trade_no=" + trade_no;

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    ViewBag.message = "验证失败";
                }
            }
            else
            {
               ViewBag.message = "无返回参数";
            }
            return View();
        }
Пример #22
0
        protected void Page_Load(object sender, EventArgs e)
        {
            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"];
                    orderID = out_trade_no;
                    //支付宝交易号

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

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

                    if (Request.Form["trade_status"] == "TRADE_FINISHED" || Request.Form["trade_status"] == "TRADE_SUCCESS")
                    {
                        succ = true;
                        if (out_trade_no.Contains("C"))
                        {
                            ordertype = 1;
                        }
                        else if (out_trade_no.Contains("P"))
                        {
                            ordertype = 2;
                        }
                        ORD_CashMod m_mod = ORD_CashBll.GetInstance().GetModelByOrderID(out_trade_no);
                        if (m_mod == null)
                        {
                            ShowError("");//订单号错误
                        }
                        if (m_mod.Status == (int)AppEnum.CashOrderStatus.beforepay)
                        {
                            m_mod.CurrentID = trade_no;//记录支付流水号
                            ORD_CashBll.GetInstance().SetPaySucc(m_mod);
                        }
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序

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

                    //    //注意:
                    //    //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。
                    //}
                    else
                    {
                        LogManagement.getInstance().WriteTrace("订单" + orderID + "支付宝返回" + Request.QueryString["trade_status"], "PayReturnForAlipay", base.Request.UserHostAddress);
                    }

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

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }
Пример #23
0
        protected void Page_Load(object sender, EventArgs e)
        {
            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 batch_no = Request.Form["batch_no"];

                    //批量退款数据中转账成功的笔数

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

                    //批量退款数据中的详细信息
                    string result_details = Request.Form["result_details"];


                    //判断是否在商户网站中已经做过了这次通知返回的处理
                    //如果没有做过处理,那么执行商户的业务程序
                    //如果有做过处理,那么不执行商户的业务程序

                    #region 退款 异步更新数据 author:Ethan
                    //XHZ.BLL.U_OrdersBLL bll = new XHZ.BLL.U_OrdersBLL();
                    //XHZ.Model.U_Orders model = new XHZ.Model.U_Orders();
                    //model = bll.GetmodelByBatchNo(batch_no);
                    //if (model.OrderStatus == (int)XHZ.Model.UOrderStatus.已退款)
                    //{
                    //    Response.Write("success");  //请不要修改或删除
                    //}
                    //else
                    //{
                    //    model.OrderStatus = (int)XHZ.Model.UOrderStatus.已退款;
                    //    model.result_details = string.Format("退款明细[{0}],退款时间[{1}]", result_details, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));

                    //    XHZ.Web.Payment.Core.LogHandler.WriteLogForPay(model.OrderNo, "退款成功", model.result_details);

                    //    if (bll.Update(model))
                    //    {
                    //        try
                    //        {
                    //            P_User userModel = new P_UserBLL().GetModel(model.user_id);
                    //            pfunction.SendSMS(userModel.moblie, "您的订单" + model.OrderNo + "已退款成功");
                    //        }
                    //        catch
                    //        {

                    //        }
                    //        XHZ.Web.Common.pfunction.InsertOrderHandle(model.OrderId, "您的订单退款成功", "支付宝退款接口异步调用");
                    //        XHZ.Common.SYS_LOG.AddCommonLog(Request.Url.AbsolutePath, "【退款成功】", "支付宝退款异接口步调用");

                    //        Response.Write("success");  //请不要修改或删除
                    //    }
                    //    else
                    //    {
                    //        XHZ.Common.SYS_LOG.AddCommonLog(Request.Url.AbsolutePath, "【退款失败】", "支付宝退款接口异步调用");
                    //    }
                    //}
                    #endregion

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

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }
Пример #24
0
        public ActionResult Payment_Result()
        {
            try
            {
                SortedDictionary<string, string> sPara = GetRequestGet();
                if (sPara.Count > 0)//判断是否有带返回参数
                {
                    Notify aliNotify = new Notify();
                    bool verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"]);
                    if (verifyResult)//验证成功
                    {
                        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                        //请在这里加上商户的业务逻辑程序代码
                        var account = Request.QueryString["total_fee"];
                        string id = Request.QueryString["extra_common_param"];//传回的商品id和采购数量
                        //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                        //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表

                        //商户订单号

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

                        //支付宝交易号

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

                        //交易状态
                        string trade_status = Request.QueryString["trade_status"];
                        string ordercode="";
                        /*if(!string.IsNullOrWhiteSpace(Request.QueryString["body"]))
                        {
                            ordercode=Request.QueryString["body"];//优惠码
                        }*/

                        if (Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS")
                        {
                            if (订单管理.计数订单(0, 0, Query<订单>.Where(m => m.Id == long.Parse(id))) == 0)
                            {
                                ViewData["Trade_Status"] = 0;
                                ViewData["result"] = "不存在此订单";
                            }
                            else
                            {
                                订单 model = 订单管理.查找订单(long.Parse(id));
                                if (!model.已付款)
                                {
                                    /*if (优惠码管理.计数优惠码(0, 0, Query<优惠码>.Where(m => m.Code == ordercode && m.已使用 == false)) > 0)
                                    {
                                        model.使用优惠码 = true;
                                        优惠码 yh = 优惠码管理.查询优惠码(0, 0, Query<优惠码>.Where(m => m.已使用 == false && m.Code == ordercode)).First();
                                        yh.已使用 = true;
                                        优惠码管理.更新优惠码(yh);
                                    }*/
                                    model.已付款 = true;
                                    订单管理.更新订单(model);
                                    ViewData["userid"] = model.订单所属用户.用户ID;
                                }
                                else
                                {
                                    ViewData["userid"] = -1;
                                }
                                ViewData["Trade_Status"] = 1;//1订单付款成功,0订单付款失败
                                ViewData["result"] = "您已经成功购买价值为"+ account.ToString() + "的商品。";
                            }
                        }
                        else
                        {
                            ViewData["userid"] = -1;
                            ViewData["Trade_Status"] = 0;
                            ViewData["result"] = "交易为完成";
                            //Response.Write("trade_status=" + Request.QueryString["trade_status"]);
                        }

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

                        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    }
                    else//验证失败
                    {
                        //Response.Write("验证失败");
                        ViewData["userid"] = -1;
                        ViewData["Trade_Status"] = 0;
                        ViewData["result"] = "验证失败";
                    }
                }
                else
                {
                    ViewData["userid"] = -1;
                    ViewData["Trade_Status"] = 0;
                    ViewData["result"] = "无返回参数";
                    //Response.Write("无返回参数");
                }
                return View();
            }
            catch
            {
                ViewData["userid"] = -1;
                ViewData["Trade_Status"] = 0;
                ViewData["result"] = "支付出错!";
                return View();
            }
        }
Пример #25
0
        /// <summary>
        /// 支付宝 返回 前端订单交易信息 get
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public ZFBReturnPara_Model ZFBReturn(HttpContext context)
        {
            ZFBReturnPara_Model zfbpara = new ZFBReturnPara_Model();
            SortedDictionary<string, string> sPara = GetRequestGet(context);
            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Com.Alipay.Notify aliNotify = new Com.Alipay.Notify();
                bool verifyResult = aliNotify.Verify(sPara, context.Request.QueryString["notify_id"], context.Request.QueryString["sign"]);
                if (verifyResult)//验证成功
                {
                    #region
                    //交易状态
                    string trade_status = "trade_status".GetUrlString();

                    zfbpara.trade_no = "trade_no".GetUrlString();
                    zfbpara.order_no = "out_trade_no".GetUrlString();
                    zfbpara.total_fee = "total_fee".GetUrlString();

                    zfbpara.ispaysuccess = (trade_status == "TRADE_SUCCESS" || trade_status == "TRADE_FINISHED") ? true : false;
                    zfbpara.isallreturn = false;
                    #endregion
                    zfbpara.iscallbacksuccess = true;
                    zfbpara.sendzfbcallbackmessage = "success";
                }
                else
                    zfbpara.sendzfbcallbackmessage = "fail";
            }
            else
                zfbpara.sendzfbcallbackmessage = "无通知参数";

            return zfbpara;

        }
        // 同步调用,只发生一次
        public ActionResult AlipayReturn()
        {
            var model = new AlipayReturnViewModel();
            SortedDictionary<string, string> sPara = GetRequestGet();

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

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

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

                    //商户订单号
                    model.out_trade_no = Request.QueryString["out_trade_no"];

                    //支付宝交易号
                    model.trade_no = Request.QueryString["trade_no"];

                    //交易状态
                    model.trade_status = Request.QueryString["trade_status"];

                    if (Request.QueryString["trade_status"] == "TRADE_FINISHED" || Request.QueryString["trade_status"] == "TRADE_SUCCESS")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序
                        model.message = "支付成功";
                    }
                    else
                    {
                        model.message = "支付失败";
                    }

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    model.message = ("验证失败");
                }
            }
            else
            {
                model.message = ("无返回参数");
            }
            return View(model);
        }
Пример #27
0
        protected void Page_Load(object sender, EventArgs e)
        {
            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"]);

                //TODO:
                //上线需要verifyResult==true
                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"];

                    if (Request.Form["trade_status"] == "TRADE_FINISHED")
                    {
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序

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

                        //注意:
                        //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。
                    }
                    else
                    {
                    }

                    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
                    try
                    {
                        //更新自己数据库的订单语句,请自己填写一下
                        string SOsysno = Request.Form["out_trade_no"];
                        int sosysno = Int32.Parse(SOsysno);

                        if (NetPayManager.GetInstance().IsPayedForAlipay(sosysno))
                        {
                            Response.Write("fail");
                            return;
                        }

                        SOInfo order = SaleManager.GetInstance().LoadSOMaster(sosysno);

                        if (order != null)
                        {
                            NetPayInfo netpay = new NetPayInfo();

                            netpay.SOSysNo = Int32.Parse(SOsysno);
                            netpay.PayTypeSysNo = order.PayTypeSysNo;
                            netpay.InputTime = DateTime.Now;
                            netpay.Source = (int)AppEnum.NetPaySource.Bank;
                            netpay.PayAmount = decimal.Parse(Request.Form["total_fee"]);
                            netpay.Status = (int)AppEnum.NetPayStatus.Origin;
                            //netpay.Note = Request.QueryString["msg"];
                            NetPayManager.GetInstance().Insert(netpay);

                            if (netpay.PayAmount >= order.GetTotalAmt())
                            {
                                //客人通过网上支付后,自动修改订单状态为已付款,默认为ias审核,userSysNo=33
                                NetPayManager.GetInstance().Verify(netpay.SysNo, 33);
                                Response.Write("success");
                            }
                            else
                            {
                                Response.Write("success");
                            }
                        }
                        else
                        {
                            Response.Write("fail");
                        }
                    }
                    catch
                    {
                        Response.Write("fail");
                    }
                }
                else//验证失败
                {
                    Response.Write("fail");
                }
            }
            else
            {
                Response.Write("无通知参数");
            }
        }