Exemplo n.º 1
0
        public string AlipayNotify <T>(PayMointor <T> proc) where T : class
        {
            SortedDictionary <string, string> sPara = PayUtil.GetRequestPost();
            var request = HttpContext.Current.Request;

            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"];


                    proc.Init(out_trade_no);


                    if (request.Form["trade_status"] == "WAIT_BUYER_PAY")
                    {
                        proc.AsyncState(PaymentAsyncState.WAIT_BUYER_PAY);
                    }
                    else if (request.Form["trade_status"] == "WAIT_SELLER_SEND_GOODS")
                    {
                        proc.PaidSuccess();

                        //该判断示买家已在支付宝交易管理中产生了交易记录且付款成功,但卖家没有发货

                        //判断该笔订单是否在商户网站中已经做过处理
                        //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                        //如果有做过处理,不执行商户的业务程序
                    }
                    else if (request.Form["trade_status"] == "WAIT_BUYER_CONFIRM_GOODS")
                    {//该判断表示卖家已经发了货,但买家还没有做确认收货的操作
                     //判断该笔订单是否在商户网站中已经做过处理
                     //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                     //如果有做过处理,不执行商户的业务程序
                    }
                    else if (request.Form["trade_status"] == "TRADE_FINISHED")
                    {//该判断表示买家已经确认收货,这笔交易完成
                     //判断该笔订单是否在商户网站中已经做过处理
                     //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序
                     //如果有做过处理,不执行商户的业务程序
                    }
                    else
                    {
                    }

                    return("success");

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

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    proc.PaidFail();

                    //log.Append("fail:" + request.Form["trade_status"] + "\r\n");

                    return("fail");
                }
            }
            else
            {
                return("无通知参数");
            }
        }
Exemplo n.º 2
0
        public string Notify <T>(PayMointor <T> proc) where T : class
        {
            /*
             * http://localhost:8080/pay/notify_1_3.html?body=%d6%a7%b8%b6%b6%a9%b5%a5&[email protected]&buyer_id=2088302384317810&exterface=create_direct_pay_by_user&is_success=T&notify_id=RqPnCoPT3K9%2Fvwbh3I73%2FBJ%2FCypvvG4k72c8QSXT5yE44%2FMSUK0zqoTBaXxNf4BPOKZI&notify_time=2013-03-21+11:42:53&notify_type=trade_status_sync&out_trade_no=20130125033249408&payment_type=1&[email protected]&seller_id=2088801968591818&subject=%E6%94%AF%E4%BB%98%E8%AE%A2%E5%8D%95&total_fee=0.01&trade_no=2013032154249581&trade_status=TRADE_SUCCESS&sign=af01b9aa0bd11df2a723eb5ef52e9298&sign_type=MD5
             */
            var request = HttpContext.Current.Request;
            //商户号
            string partner = AlipayConfig.Partner;
            //密钥
            string key = AlipayConfig.Key;

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

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

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

                    //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——
                    //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表
                    string trade_no     = request.Form["trade_no"];     //支付宝交易号
                    string order_no     = request.Form["out_trade_no"]; //获取订单号
                    string total_fee    = request.Form["total_fee"];    //获取总金额
                    string subject      = request.Form["subject"];      //商品名称、订单名称
                    string body         = request.Form["body"];         //商品描述、订单备注、描述
                    string buyer_email  = request.Form["buyer_email"];  //买家支付宝账号
                    string trade_status = request.Form["trade_status"]; //交易状态


                    proc.Init(order_no);

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

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

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

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

                    proc.PaidSuccess();

                    //log.Append("success:" + request.Form["trade_status"]+"\r\n"+order_no+"\r\n");
                    return("success");  //请不要修改或删除

                    /////////////////////////////////////////////////////////////////////////////////////////////////////////////
                }
                else//验证失败
                {
                    proc.PaidFail();

                    //log.Append("fail:" + request.Form["trade_status"] + "\r\n");

                    return("fail");
                }
            }
            else
            {
                //log.Append("无通知参数:" + request.Form["trade_status"] + "\r\n");
                return("无通知参数");
            }
        }