Exemplo n.º 1
0
        /// <summary>
        /// 支付宝回调
        /// </summary>
        /// <returns></returns>
        public ActionResult OrderTrade()
        {
            bool   flag  = false;
            string error = string.Empty;
            Dictionary <string, string> sPara = GetRequestGet();
            string out_trade_no = string.Empty;

            int hotelId = 0;

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

                if (verifyResult)//验证成功
                {
                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    //请在这里加上商户的业务逻辑程序代码
                    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                    //获取支付宝的通知返回参数,可参考技术文档中页面跳转同步通知参数列表
                    //商户订单号
                    out_trade_no = Request.QueryString["out_trade_no"];
                    //支付宝交易号
                    string trade_no = Request.QueryString["trade_no"];
                    //交易状态
                    string result = Request.QueryString["result"];
                    //判断是否在商户网站中已经做过了这次通知返回的处理
                    //如果没有做过处理,那么执行商户的业务程序
                    //如果有做过处理,那么不执行商户的业务程序
                    //打印页面
                    //日志记录
                    logger.ErrorFormat("wap支付同步回调信息{0}-{1}", out_trade_no, Request.Url);
                    if (result == "success")
                    {
                        flag = OrderHandle(false, out_trade_no, trade_no, "TRADE_FINISHED", "0", out hotelId);
                    }
                    //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    error = "验证失败";
                }
            }
            else
            {
                error = "无返回参数";
            }
            if (flag)
            {
                error = "success";
            }
            Session["alipay_error"] = error;
            return(RedirectToAction("AliPaySuccess", new { hotelId = hotelId, code = (flag == true ? "0000" : "1000"), key = HotelHotel.Utility.Utility.GetGuidString(), d = out_trade_no.Replace(Prefix, "") }));
        }
Exemplo n.º 2
0
        public string Notify()
        {
            bool   flag  = false;
            string error = string.Empty;

            try
            {
                logger.ErrorFormat("wap支付异步回调");
                int hotelId = 0;
                Dictionary <string, string> sPara = GetRequestPost();
                if (sPara.Count > 0)//判断是否有带返回参数
                {
                    WayAlipay.Alipay.Notify aliNotify = new WayAlipay.Alipay.Notify();
                    bool verifyResult = aliNotify.VerifyNotify(sPara, Request.Form["sign"]);
                    if (verifyResult)//验证成功
                    {
                        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                        //请在这里加上商户的业务逻辑程序代码
                        //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                        //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
                        //解密(如果是RSA签名需要解密,如果是MD5签名则下面一行清注释掉)
                        sPara = aliNotify.Decrypt(sPara);
                        //XML解析notify_data数据
                        try
                        {
                            XmlDocument xmlDoc = new XmlDocument();
                            xmlDoc.LoadXml(sPara["notify_data"]);
                            //商户订单号
                            string out_trade_no = xmlDoc.SelectSingleNode("/notify/out_trade_no").InnerText;
                            //支付宝交易号
                            string trade_no = xmlDoc.SelectSingleNode("/notify/trade_no").InnerText;
                            //交易状态
                            string trade_status = xmlDoc.SelectSingleNode("/notify/trade_status").InnerText;

                            //日志记录
                            logger.ErrorFormat("wap支付异步回调信息{0}-{1}", out_trade_no, xmlDoc.InnerXml.ToString());
                            if (trade_status == "TRADE_FINISHED" || trade_status == "TRADE_SUCCESS")
                            {
                                //判断该笔订单是否在商户网站中已经做过处理
                                //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                                //如果有做过处理,不执行商户的业务程序
                                //注意:
                                //该种交易状态只在两种情况下出现
                                //1、开通了普通即时到账,买家付款成功后。
                                //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。
                                flag = OrderHandle(true, out_trade_no, trade_no, trade_status, xmlDoc.SelectSingleNode("/notify/total_fee").InnerText, out hotelId);
                            }
                            else
                            {
                                error = trade_status;
                            }
                        }
                        catch (Exception exc)
                        {
                            flag = false;
                            logger.ErrorFormat("wap支付异步回调异常-{0}", exc.Message.ToString());
                        }
                        //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——
                        /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                    }
                    else//验证失败
                    {
                        error = "fail";
                    }
                }
                else
                {
                    error = "无通知参数";
                }
            }
            catch (Exception ex)
            {
                flag = false;
                logger.ErrorFormat("wap支付异步回调异常-{0}", ex.Message.ToString());
            }
            if (flag)
            {
                error = "success";
            }
            string result = flag == true ? "success" : "fail";

            return(result);
        }