/** 获取带参数的请求URL @return String */ public virtual string getRequestURL() { this.createSign(); StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = (string)parameters[k]; if (null != v && "key".CompareTo(k) != 0 && "spbill_create_ip".CompareTo(k) != 0) { sb.Append(k + "=" + TenpayUtil.UrlEncode(v, getCharset()) + "&"); } else if ("spbill_create_ip".CompareTo(k) == 0) { sb.Append(k + "=" + v.Replace(".", "%2E") + "&"); } } //去掉最后一个& if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } return(this.getGateUrl() + "?" + sb.ToString()); }
//获取package带参数的签名包 public string getRequestURL() { this.createSign(); StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = (string)parameters[k]; if (null != v && "key".CompareTo(k) != 0) { sb.Append(k + "=" + TenpayUtil.UrlEncode(v, getCharset()) + "&"); } } //去掉最后一个& if (sb.Length > 0) { sb.Remove(sb.Length - 1, 1); } return(sb.ToString()); }
protected void Page_Load(object sender, EventArgs e) { //商户号 string bargainor_id = ConfigurationManager.AppSettings["bargainor_id"].ToString(); //密钥 string key = ConfigurationManager.AppSettings["tenpay_key"].ToString(); //创建请求对象 RequestHandler reqHandler = new RequestHandler(Context); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); //当前时间 yyyyMMdd string domain_url = ConfigurationManager.AppSettings["domain_url"].ToString(); string date = DateTime.Now.ToString("yyyyMMdd"); string sp_billno = Request["order_no"]; string product_name = Request["product_name"]; string order_price = Request["order_price"];; string remarkexplain = Request["remarkexplain"]; double money = 0; if (null == Request["order_price"]) { Response.End(); return; } try { money = Convert.ToDouble(order_price); } catch { //Response.Write("支付金额格式错误!"); //Response.End(); //return; } if (null == sp_billno) { //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一 sp_billno = DateTime.Now.ToString("HHmmss") + TenpayUtil.BuildRandomStr(4); } else { sp_billno = Request["order_no"].ToString(); } reqHandler.init(); //设置密钥 reqHandler.setKey(key); reqHandler.setGateUrl("https://wap.tenpay.com/cgi-bin/wappayv2.0/wappay_init.cgi"); //----------------------------- //设置支付初始化参数 //----------------------------- reqHandler.setParameter("ver", "2.0"); reqHandler.setParameter("charset", "1"); reqHandler.setParameter("bank_type", "0"); reqHandler.setParameter("desc", "订单" + sp_billno); reqHandler.setParameter("bargainor_id", bargainor_id); reqHandler.setParameter("sp_billno", sp_billno); reqHandler.setParameter("total_fee", (money * 100).ToString()); reqHandler.setParameter("fee_type", "1"); reqHandler.setParameter("notify_url", domain_url + "/PayRetrun/ZFPay/tenpay/payNotifyUrl.aspx"); reqHandler.setParameter("callback_url", domain_url + "/PayRetrun/ZFPay/tenpay/payCallbackUrl.aspx"); reqHandler.setParameter("attach", "attach"); string initRequestUrl = reqHandler.getRequestURL(); //设置请求内容 httpClient.setReqContent(initRequestUrl); //设置超时 httpClient.setTimeOut(5); string rescontent = ""; string payRequestUrl = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); //设置结果参数 resHandler.setContent(rescontent); string token_id = resHandler.getParameter("token_id"); //成功,则token_id有只 if (token_id != "") { //生成支付请求 payRequestUrl = "https://wap.tenpay.com/cgi-bin/wappayv2.0/wappay_gate.cgi?token_id=" + TenpayUtil.UrlEncode(token_id, Request.ContentEncoding.BodyName); //Get的实现方式 string a_link = "<script type='text/javascript'>window.location = '" + payRequestUrl + "';</script>"; Response.Write(a_link); } else { //获取token_id调用失败 ,显示错误 页面 Response.Write("支付初始化错误:" + resHandler.getParameter("err_info") + "<br>"); } } else { //后台调用通信失败 Response.Write("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>"); //有可能因为网络原因,请求已经处理,但未收到应答。 } //获取debug信息,建议把请求、应答内容、debug信息,通信返回码写入日志,方便定位问题 /* * Response.Write("http res:" + httpClient.getResponseCode() + "," + httpClient.getErrInfo() + "<br>"); * Response.Write("req url:" + initRequestUrl + "<br/>"); * Response.Write("req debug:" + reqHandler.getDebugInfo() + "<br/>"); * Response.Write("res content:" + Server.HtmlEncode(rescontent) + "<br/>"); * Response.Write("res debug:" + Server.HtmlEncode(resHandler.getDebugInfo()) + "<br/>"); * Response.Write("pay req url:" + payRequestUrl + "<br/>"); */ }
/// <summary> /// 财付通支付接口 /// </summary> /// <returns></returns> public ActionResult Index(string id) //传入订单ID 输入订单价格等信息 订单必须是未支付状态 { try { var order = psv.GetOrderByOrderNo(id); var tenpay_id = ConfigurationManager.AppSettings["tenpay_bargainor_id"]; //商户号 var tenpay_key = ConfigurationManager.AppSettings["tenpay_key"]; //密钥 //创建RequestHandler实例 RequestHandler reqHandler = new RequestHandler(HttpContext); //通信对象 TenpayHttpClient httpClient = new TenpayHttpClient(); //应答对象 ClientResponseHandler resHandler = new ClientResponseHandler(); reqHandler.init(); //设置密钥 reqHandler.setKey(TenpayUtil.tenpay_key); reqHandler.setGateUrl("https://wap.tenpay.com/cgi-bin/wappayv2.0/wappay_init.cgi"); //----------------------------- //设置支付初始化参数 //----------------------------- reqHandler.setParameter("ver", "2.0"); reqHandler.setParameter("charset", "1"); reqHandler.setParameter("bank_type", "0"); reqHandler.setParameter("desc", "蛋糕"); //订单描述 reqHandler.setParameter("bargainor_id", tenpay_id); reqHandler.setParameter("sp_billno", order.No); //订单号 reqHandler.setParameter("total_fee", (Convert.ToDouble(order.NeedPay) * 100).ToString()); reqHandler.setParameter("fee_type", "1"); reqHandler.setParameter("notify_url", ConfigurationManager.AppSettings["tenpay_notify"]); reqHandler.setParameter("callback_url", ConfigurationManager.AppSettings["tenpay_return"]); reqHandler.setParameter("attach", "attach"); string initRequestUrl = reqHandler.getRequestURL(); //设置请求内容 httpClient.setReqContent(initRequestUrl); //设置超时 httpClient.setTimeOut(5); string rescontent = ""; string payRequestUrl = ""; //后台调用 if (httpClient.call()) { //获取结果 rescontent = httpClient.getResContent(); //设置结果参数 resHandler.setContent(rescontent); string token_id = resHandler.getParameter("token_id"); //成功,则token_id有只 if (token_id != "") { //生成支付请求 payRequestUrl = "https://wap.tenpay.com/cgi-bin/wappayv2.0/wappay_gate.cgi?token_id=" + TenpayUtil.UrlEncode(token_id, Request.ContentEncoding.BodyName); return(Redirect(payRequestUrl)); } else { return(Content("支付初始化错误:" + resHandler.getParameter("err_info") + "<br>")); } } else { return(Content("call err:" + httpClient.getErrInfo() + "<br>" + httpClient.getResponseCode() + "<br>")); } } catch { return(Content("支付失败")); } }