示例#1
0
        public string Notify <T>(PayMointor <T> proc) where T : class
        {
            var request = HttpContext.Current.Request;

            string MerId     = request["MerId"];        //商户号
            string OrdId     = request["OrderNo"];      //订单号
            string TransAmt  = request["Amount"];       //订单金额
            string CuryId    = request["CurrencyCode"]; //货币代码
            string TransDate = request["TransDate"];    //订单日期
            string TransType = request["TransType"];    //交易类型
            string Priv1     = request["Priv1"];        //备注
            string GateId    = request["GateId"];       //网关
            string status    = request["status"];

            proc.Init(OrdId);

            string CheckValue = request["checkvalue"];//签名数据
            bool   res        = ChinaPaySignData.check(MerId, OrdId, TransAmt, CuryId, TransDate, TransType, status, CheckValue);

            if (res)
            {
                proc.PaidFail();
                return("0");
            }
            else
            {
                proc.PaidSuccess();
                return("1");
            }
        }
示例#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 = AlipayMobileConfig.Partner;
            //密钥
            string key = AlipayMobileConfig.Key;

            Dictionary <string, string> sPara = this.GetRequestPost();

            if (sPara.Count > 0)//判断是否有带返回参数
            {
                Notify aliNotify    = new 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;


                        proc.Init(out_trade_no);

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

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


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

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

                            proc.PaidSuccess();

                            return("success"); //请不要修改或删除
                        }
                        else
                        {
                            return(trade_status);
                        }
                    }
                    catch (Exception exc)
                    {
                        return(exc.Message);
                    }


                    proc.PaidSuccess();

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


            proc.PaidFail();

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

            return("fail");
        }
示例#3
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("无通知参数");
            }
        }
示例#4
0
文件: Tenpay.cs 项目: zyuhua/devfw
        public string Notify <T>(PayMointor <T> proc) where T : class
        {
            //商户号
            string partner = TenpayUtil.bargainor_id;
            //密钥
            string key = TenpayUtil.tenpay_key;


            //创建ResponseHandler实例
            ResponseHandler resHandler = new ResponseHandler(System.Web.HttpContext.Current);

            resHandler.setKey(key);

            //判断签名
            if (resHandler.isTenpaySign())
            {
                ///通知id
                string notify_id = resHandler.getParameter("notify_id");


                //通过通知ID查询,确保通知来至财付通
                //创建查询请求
                RequestHandler queryReq = new RequestHandler(System.Web.HttpContext.Current);
                queryReq.init();
                queryReq.setKey(key);
                queryReq.setGateUrl("https://gw.tenpay.com/gateway/verifynotifyid.xml");
                queryReq.setParameter("partner", partner);
                queryReq.setParameter("notify_id", notify_id);

                //通信对象
                TenpayHttpClient httpClient = new TenpayHttpClient();
                httpClient.setTimeOut(5);
                //设置请求内容
                httpClient.setReqContent(queryReq.getRequestURL());

                //后台调用
                if (httpClient.call())
                {
                    //设置结果参数
                    ClientResponseHandler queryRes = new ClientResponseHandler();
                    queryRes.setContent(httpClient.getResContent());
                    queryRes.setKey(key);

                    //判断签名及结果
                    //只有签名正确,retcode为0,trade_state为0才是支付成功
                    if (queryRes.isTenpaySign() && queryRes.getParameter("retcode") == "0" && queryRes.getParameter("trade_state") == "0" && queryRes.getParameter("trade_mode") == "1")
                    {
                        //取结果参数做业务处理
                        string out_trade_no = queryRes.getParameter("out_trade_no");
                        //财付通订单号
                        string transaction_id = queryRes.getParameter("transaction_id");
                        //金额,以分为单位
                        string total_fee = queryRes.getParameter("total_fee");
                        //如果有使用折扣券,discount有值,total_fee+discount=原请求的total_fee
                        string discount = queryRes.getParameter("discount");
                        //支付结果
                        string trade_state = resHandler.getParameter("trade_state");
                        //交易模式,1即时到帐 2中介担保
                        string trade_mode = resHandler.getParameter("trade_mode");

                        proc.Init(out_trade_no);


                        //判断签名及结果
                        if (queryRes.isTenpaySign() && "0".Equals(queryRes.getParameter("retcode")))
                        {
                            // Response.Write("id验证成功");

                            if ("1".Equals(trade_mode))
                            {       //即时到账
                                if ("0".Equals(trade_state))
                                {
                                    proc.PaidSuccess();

                                    return("Success");
                                }
                                else
                                {
                                    proc.PaidFail();
                                    //SetLogMessage("即时到账支付失败");
                                    return("即时到账支付失败");
                                }
                            }
                            else if ("2".Equals(trade_mode))
                            { //中介担保
                              //------------------------------
                              //中介担保处理业务开始
                              //------------------------------
                              //处理数据库逻辑
                              //注意交易单不要重复处理
                              //注意判断返回金额

                                int iStatus = 0;
                                switch (iStatus)
                                {
                                case 0:                 //付款成功

                                    break;

                                case 1:                 //交易创建

                                    break;

                                case 2:                 //收获地址填写完毕

                                    break;

                                case 4:                 //卖家发货成功

                                    break;

                                case 5:                 //买家收货确认,交易成功

                                    break;

                                case 6:                 //交易关闭,未完成超时关闭

                                    break;

                                case 7:                 //修改交易价格成功

                                    break;

                                case 8:                 //买家发起退款

                                    break;

                                case 9:                 //退款成功

                                    break;

                                case 10:        //退款关闭

                                    break;
                                }


                                //------------------------------
                                //中介担保处理业务开始
                                //------------------------------


                                //给财付通系统发送成功信息,财付通系统收到此结果后不再进行后续通知

                                proc.PaidSuccess();
                                return("Success");
                            }
                        }
                        else
                        {
                            //错误时,返回结果可能没有签名,写日志trade_state、retcode、retmsg看失败详情。
                            //通知财付通处理失败,需要重新通知\



                            // SetLogMessage("查询验证签名失败或id验证失败\r\nretcode:" + queryRes.getParameter("retcode"));

                            proc.PaidFail();
                            return("查询验证签名失败或id验证失败retcode:" + queryRes.getParameter("retcode"));;
                        }
                    }
                    else
                    {
                        //通知财付通处理失败,需要重新通知

                        //SetLogMessage("后台调用通信失败\r\ncall err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>");

                        proc.PaidFail();

                        return("后台调用通信失败call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>");
                    }
                }
                else
                {
                    proc.PaidFail();
                    return("通知签名验证失败");
                }
            }
            return("");
        }
示例#5
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("无通知参数");
            }
        }