Example #1
0
	protected void Page_Load(object sender, EventArgs e)
    {
        //商户号
        string partner = "1900000109";

        //密钥
        string key = "8934e7d15453e97507ef794cf7b0519d";


        //创建ResponseHandler实例
        ResponseHandler resHandler = new ResponseHandler(Context);
        resHandler.setKey(key);

        //判断签名
        if (resHandler.isTenpaySign())
        {

            ///通知id
            string notify_id = resHandler.getParameter("notify_id");

            //通过通知ID查询,确保通知来至财付通
            //创建查询请求
            RequestHandler queryReq = new RequestHandler(Context);
            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");

                    //------------------------------
                    //处理业务开始
                    //------------------------------

                    //处理数据库逻辑
                    //注意交易单不要重复处理
                    //注意判断返回金额

                    //------------------------------
                    //处理业务完毕
                    //------------------------------
                    //通知财付通已经处理成功,无需重新通知
                    Response.Write("支付成功");

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

                //获取查询的debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题
                /*
                Response.Write("http res:" + httpClient.getResponseCode() + "," + httpClient.getErrInfo() + "<br>");
                Response.Write("query req url:" + queryReq.getRequestURL() + "<br/>");
                Response.Write("query req debug:" + queryReq.getDebugInfo() + "<br/>");
                Response.Write("query res content:" + Server.HtmlEncode(httpClient.getResContent()) + "<br/>");
                Response.Write("query res debug:" + Server.HtmlEncode(queryRes.getDebugInfo()) + "<br/>");
                 */
                


            }
            else
            {
                //通知财付通处理失败,需要重新通知
                Response.Write("后台通信失败");
                //写错误日志,注意实际应用中,不要返回给用户
                Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>");

            }

            //获取debug信息,建议把debug信息写入日志,方便定位问题
            /*
            string debuginfo = resHandler.getDebugInfo();
            Response.Write("<br/>debuginfo:" + debuginfo + "<br/>");
            */
        }
    }
Example #2
0
        protected override string OnNotify(System.Web.HttpContext context)
        {
            var handler = new ResponseHandler(context);
            handler.setKey(key);
            if (handler.isTenpaySign())
            {
                ///通知id
                string notify_id = handler.getParameter("notify_id");
                //通过通知ID查询,确保通知来至财富通
                //创建查询请求
                RequestHandler queryReq = new RequestHandler(context);
                queryReq.init();
                queryReq.setKey(key);
                queryReq.setGateUrl("https://gw.tenpay.com/gateway/verifynotifyid.xml");
                queryReq.setParameter("partner", bargainor_id);
                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");

                        IPayHistory order = OnlinePayBusiness.Instance.GetOrder(out_trade_no, ThisCompanyType);
                        if (order == null)
                        {
                            CoreHelper.EventLog.Log(string.Format("在线支付确认时找不到订单{0} 订单号{1}", ThisCompanyType, out_trade_no), true);
                            //context.Response.Write("fail");
                            return "fail";
                        }
                        order.spBillno = transaction_id;
                        decimal fee = Convert.ToDecimal(total_fee);

                        lock (thisLock)
                        {
                            Confirm(order, GetType(), fee / 100);
                        }
                        //context.Response.Write("success");
                        return "success";
                    }
                }
            }
            //context.Response.Write("fail");
            return "fail";
        }