using System; using System.Collections; using System.Collections.Specialized; using System.Text; using System.Web; namespace JumbotCms.API.Tenpay { /// /// ResponseHandler µÄժҪ˵Ã÷¡£ /// public class ResponseHandler { /** ÃÜÔ¿ */ private string key; /** Ó¦´ðµÄ²ÎÊý */ protected Hashtable parameters; /** debugÐÅÏ¢ */ private string debugInfo; protected HttpContext httpContext; //»ñÈ¡·þÎñÆ÷֪ͨÊý¾Ý·½Ê½£¬½øÐвÎÊý»ñÈ¡ public ResponseHandler(HttpContext httpContext) { parameters = new Hashtable(); this.httpContext = httpContext; NameValueCollection collection; if(this.httpContext.Request.HttpMethod == "POST") { collection = this.httpContext.Request.Form; } else { collection = this.httpContext.Request.QueryString; } foreach(string k in collection) { string v = (string)collection[k]; this.setParameter(k, v); } } /** »ñÈ¡ÃÜÔ¿ */ public string getKey() { return key;} /** ÉèÖÃÃÜÔ¿ */ public void setKey(string key) { this.key = key;} /** »ñÈ¡²ÎÊýÖµ */ 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); } } /** ÊÇ·ñ²Æ¸¶Í¨Ç©Ãû,¹æÔòÊÇ:°´²ÎÊýÃû³Æa-zÅÅÐò,Óöµ½¿ÕÖµµÄ²ÎÊý²»²Î¼ÓÇ©Ãû¡£ * @return boolean */ public virtual Boolean isTenpaySign() { 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(); //debugÐÅÏ¢ this.setDebugInfo(sb.ToString() + " => sign:" + sign); return getParameter("sign").ToLower().Equals(sign); } /** * ÏÔʾ´¦Àí½á¹û¡£ * @param show_url ÏÔʾ´¦Àí½á¹ûµÄurlµØÖ·,¾ø¶ÔurlµØÖ·µÄÐÎʽ(http://www.xxx.com/xxx.aspx)¡£ * @throws IOException */ public void doShow(string show_url) { string strHtml = "\r\n" + "\r\n" + "\r\n" + ""; this.httpContext.Response.Write(strHtml); this.httpContext.Response.End(); } /** »ñÈ¡debugÐÅÏ¢ */ public string getDebugInfo() { return debugInfo;} /** ÉèÖÃdebugÐÅÏ¢ */ protected void setDebugInfo(String debugInfo) { this.debugInfo = debugInfo;} protected virtual string getCharset() { return this.httpContext.Request.ContentEncoding.BodyName; } /** ÊÇ·ñ²Æ¸¶Í¨Ç©Ãû,¹æÔòÊÇ:°´²ÎÊýÃû³Æa-zÅÅÐò,Óöµ½¿ÕÖµµÄ²ÎÊý²»²Î¼ÓÇ©Ãû¡£ * @return boolean */ public virtual Boolean _isTenpaySign(ArrayList akeys) { StringBuilder sb = new StringBuilder(); 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(); //debugÐÅÏ¢ this.setDebugInfo(sb.ToString() + " => sign:" + sign); return getParameter("sign").ToLower().Equals(sign); } } }