using System;
|
using System.Collections;
|
using System.Text;
|
using System.Web;
|
|
namespace JumbotCms.API.Tenpay
|
{
|
/// <summary>
|
/// RequestHandler µÄժҪ˵Ã÷¡£
|
/// </summary>
|
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;
|
}
|
}
|
}
|