using System; using System.Collections; using System.Text; using System.Web; namespace JumbotCms.API.Tenpay { /// /// RequestHandler µÄժҪ˵Ã÷¡£ /// public class RequestHandler { public RequestHandler(HttpContext httpContext) { parameters = new Hashtable(); this.httpContext = httpContext; this.setGateUrl("https://www.tenpay.com/cgi-bin/v1.0/service_gate.cgi"); } /** Íø¹ØurlµØÖ· */ private string gateUrl; /** ÃÜÔ¿ */ private string key; /** ÇëÇóµÄ²ÎÊý */ protected Hashtable parameters; /** debugÐÅÏ¢ */ private string debugInfo; protected HttpContext httpContext; /** ³õʼ»¯º¯Êý¡£*/ public virtual void init() { //nothing to do } /** »ñÈ¡Èë¿ÚµØÖ·,²»°üº¬²ÎÊýÖµ */ public String getGateUrl() { return gateUrl; } /** ÉèÖÃÈë¿ÚµØÖ·,²»°üº¬²ÎÊýÖµ */ public void setGateUrl(String gateUrl) { this.gateUrl = gateUrl; } /** »ñÈ¡ÃÜÔ¿ */ public String getKey() { return key; } /** ÉèÖÃÃÜÔ¿ */ public void setKey(string key) { this.key = key; } /** »ñÈ¡´ø²ÎÊýµÄÇëÇó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) { sb.Append(k + "=" + TenpayUtil.UrlEncode(v, getCharset()) + "&"); } } //È¥µô×îºóÒ»¸ö& if(sb.Length > 0) { sb.Remove(sb.Length-1, 1); } return this.getGateUrl() + "?" + sb.ToString(); } /** * ´´½¨md5ÕªÒª,¹æÔòÊÇ:°´²ÎÊýÃû³Æa-zÅÅÐò,Óöµ½¿ÕÖµµÄ²ÎÊý²»²Î¼ÓÇ©Ãû¡£ */ protected virtual void 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 && "".CompareTo(v) != 0 && "sign".CompareTo(k) != 0 && "key".CompareTo(k) != 0) { sb.Append(k + "=" + v + "&"); } } sb.Append("key=" + this.getKey()); string sign = MD5Util.GetMD5(sb.ToString(), getCharset()).ToLower(); this.setParameter("sign", sign); //debugÐÅÏ¢ this.setDebugInfo(sb.ToString() + " => sign:" + sign); } /** »ñÈ¡²ÎÊýÖµ */ public string getParameter(string parameter) { string s = (string)parameters[parameter]; return (null == s) ? "" : s; } /** ÉèÖòÎÊýÖµ */ public void setParameter(string parameter,string parameterValue) { if(parameter != null && parameter != "") { if(parameters.Contains(parameter)) { parameters.Remove(parameter); } parameters.Add(parameter,parameterValue); } } public void doSend() { this.httpContext.Response.Redirect(this.getRequestURL()); } /** »ñÈ¡debugÐÅÏ¢ */ public String getDebugInfo() { return debugInfo; } /** ÉèÖÃdebugÐÅÏ¢ */ public void setDebugInfo(String debugInfo) { this.debugInfo = debugInfo; } public Hashtable getAllParameters() { return this.parameters; } protected virtual string getCharset() { return this.httpContext.Request.ContentEncoding.BodyName; } } }