예제 #1
0
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            SortedDictionary <string, string> sPara = GetRequestGet();

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify = new Notify();

                bool verifyResult;
#if TestAlipay
                verifyResult = true;
#else
                verifyResult = aliNotify.Verify(sPara, Request.QueryString["notify_id"], Request.QueryString["sign"], " Return ");
#endif

                string userName = Request.QueryString["extra_common_param"];

                //SuperMinersWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 1.  verifyResult:" + verifyResult);


                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")
                    {
                        DateTime timeNow = DateTime.Now;
                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序
                        string  buyer_email = Request.QueryString["buyer_email"];
                        decimal total_fee;
                        if (!decimal.TryParse(Request.QueryString["total_fee"], out total_fee))
                        {
                            SuperMinersWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 2 Failed, 充值金额错误.  userName:" + userName + "; out_trade_no=" + out_trade_no + ";trade_status=" + trade_status + ";total_fee=" + total_fee);

                            //打印页面
                            Response.Write("充值金额错误<br />");
                            return;
                        }
                        //int result = WcfClient.Instance.CheckAlipayOrderBeHandled(userName, out_trade_no, trade_no, total_fee, buyer_email, timeNow.ToString());

                        //SuperMinersWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 2.1.  CheckAlipayOrderBeHandled:" + result);
                        //if (result == OperResult.RESULTCODE_TRUE)
                        //{
                        //    //表示该订单已经被处理过
                        //    //打印页面
                        //    Response.Write("操作成功<br />本页面将在3秒后关闭");
                        //    Response.Write("<script>setTimeout(' window.opener = null;window.close();',3000);</script>");

                        //    return;
                        //}

                        int result = WcfClient.Instance.AlipayCallback(userName, out_trade_no, trade_no, total_fee, buyer_email, timeNow.ToString());
                        if (result == OperResult.RESULTCODE_EXCEPTION)
                        {
                            result = WcfClient.Instance.AlipayCallback(userName, out_trade_no, trade_no, total_fee, buyer_email, timeNow.ToString());
                        }
                        //SuperMinersWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 3 Result: " + result + ".  userName:" + userName + "; out_trade_no=" + out_trade_no + ";trade_no=" + trade_no + ";trade_status=" + trade_status + ";total_fee=" + total_fee);

                        if (result != OperResult.RESULTCODE_TRUE && result != OperResult.RESULTCODE_ORDER_BUY_SUCCEED)
                        {
                            string message = "支付成功,但是服务器操作失败,原因为:" + OperResult.GetMsg(result) + "。请联系客服,并将以下信息发送给客服。\r\n商品订单号:" + out_trade_no + ",支付宝订单号:" + trade_no + ",付款账户:" + buyer_email;
                            DBOper.AddExceptionAlipayRechargeRecord(userName, out_trade_no, trade_no, total_fee, buyer_email, timeNow.ToString());
                            SuperMinersWeb.AlipayCode.Core.LogResult(userName, message);

                            Response.Write(message);
                            return;
                        }
                    }
                    else
                    {
                        //SuperMinersWeb.AlipayCode.Core.LogResult(userName, DateTime.Now.ToString() + " ------ Return End Pay 4 Failed.  userName:" + userName + "; out_trade_no=" + out_trade_no + ";trade_status=" + trade_status);

                        Response.Write("trade_status=" + trade_status);
                    }

                    //打印页面
                    Response.Write("操作成功<br />本页面将在3秒后关闭");
                    Response.Write("<script>setTimeout(' window.opener = null;window.close();',3000);</script>");

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    Response.Write("支付失败");
                }
            }
            else
            {
                Response.Write("无返回参数");
            }
        }
        catch (Exception exc)
        {
            SuperMinersWeb.AlipayCode.Core.LogResult("", DateTime.Now.ToString() + " ------ Return Exception: " + exc.Message + ". \r\n" + exc.Source);
        }
    }