Exemple #1
0
        public string BuildRequest(PayRequestCriteria criteria)
        {
            if (!isInitialized)
            {
                throw new ArgumentException("The Tenpay payment configuration has not been initialized yet.");
            }

            if (criteria == null)
            {
                throw new System.ArgumentException("The criteria is null.");
            }

            CheckNullOrEmpty("OrderId", criteria.OrderId);
            CheckNullOrEmpty("Subject", criteria.Subject);
            //CheckNullOrEmpty("Body", criteria.Body);

            string amount = criteria.Amount;
            ParseAmountFromYuanToFen(ref amount);

            //创建RequestHandler实例
            RequestHandler reqHandler = new RequestHandler();

            //-----------------------------
            //设置支付参数
            //-----------------------------
            reqHandler.setParameter("partner", TenpayConfig.PartnerId.Trim());		        //商户号
            reqHandler.setParameter("out_trade_no", criteria.OrderId);		//商家订单号
            reqHandler.setParameter("total_fee", amount);			        //商品金额,以分为单位
            reqHandler.setParameter("return_url", TenpayConfig.ReturnUrl.Trim());		    //交易完成后跳转的URL
            reqHandler.setParameter("notify_url", TenpayConfig.NotifyUrl.Trim());		    //接收财付通通知的URL
            reqHandler.setParameter("bank_type", TenpayConfig.BankType.Trim());		    //银行类型(中介担保时此参数无效)
            reqHandler.setParameter("body", criteria.Body);
            reqHandler.setParameter("subject", criteria.Subject);
            reqHandler.setParameter("spbill_create_ip", criteria.ClientIP);
            reqHandler.setParameter("fee_type", TenpayConfig.FeeType);

            //系统可选参数
            reqHandler.setParameter("sign_type", TenpayConfig.SignType);
            reqHandler.setParameter("service_version", TenpayConfig.ServiceVersion);
            reqHandler.setParameter("input_charset", TenpayConfig.InputCharset.Trim().ToUpper());
            reqHandler.setParameter("sign_key_index", TenpayConfig.SignKeyIndex);

            //string attach = "[subject=" + criteria.Subject + "][body=" + criteria.Body;
            //if (attach.Length >= 127)
            //{
            //    attach = attach.Substring(0, 125);
            //}

            //attach += "]";

            //reqHandler.setParameter("attach", attach);

            // Other parameters
            if (criteria.CustormParameters != null && criteria.CustormParameters.Count > 0)
            {
                foreach (var item in criteria.CustormParameters)
                {
                    reqHandler.setParameter(item.Key, item.Value);
                }
            }

            // create sign here
            reqHandler.createSign();

            //post实现方式
            StringBuilder sbHtml = new StringBuilder();

            sbHtml.Append("<form id='chinabankpaymentsubmit' name='tenpaysubmit' action='" + TenpayConfig.Gateway.Trim() + "' method='post'>");

            Hashtable ht = reqHandler.getAllParameters();
            foreach (DictionaryEntry de in ht)
            {
                sbHtml.Append(BuildHtml(de.Key.ToString(), de.Value.ToString()));
            }

            //submit按钮控件请不要含有name属性
            sbHtml.Append("<input type='submit' value='确认付款' style='display:none;'></form>");

            sbHtml.Append("<script>document.forms['tenpaysubmit'].submit();</script>");

            return sbHtml.ToString();
        }
Exemple #2
0
        public bool Verify(System.Collections.Specialized.NameValueCollection requestParamamters)
        {
            if (!isInitialized)
            {
                throw new ArgumentException("The Tenpay payment configuration has not been initialized yet.");
            }

            bool isValid = false;

            //创建ResponseHandler实例
            ResponseHandler resHandler = new ResponseHandler(requestParamamters);
            resHandler.setKey(TenpayConfig.TenpayKey);

            //判断签名
            if (resHandler.isTenpaySign())
            {
                ///通知id
                string notify_id = resHandler.getParameter("notify_id");
                //通过通知ID查询,确保通知来至财付通
                //创建查询请求
                RequestHandler queryReq = new RequestHandler();
                queryReq.init();
                queryReq.setGateUrl(TenpayConfig.VerifyUrl);
                queryReq.setParameter("partner", TenpayConfig.PartnerId);
                queryReq.setParameter("notify_id", notify_id);

                //通信对象
                TenpayHttpClient httpClient = new TenpayHttpClient();
                httpClient.setTimeOut(10);
                //设置请求内容
                httpClient.setReqContent(queryReq.getRequestURL());
                //后台调用
                if (httpClient.call())
                {
                    //设置结果参数
                    ClientResponseHandler queryRes = new ClientResponseHandler();
                    queryRes.setContent(httpClient.getResContent());
                    queryRes.setKey(TenpayConfig.TenpayKey);
                    //判断签名及结果
                    if (queryRes.isTenpaySign())
                    {
                        isValid = true;
                    }
                }
            }

            return isValid;
        }