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);
}
}
}