C#公众号开发之给用户发红包

2019-12-30 19:48:09刘景俊

2、处理参数的类:

 


public class RequestHandler
  {

    public RequestHandler(HttpContext httpContext)
    {
      Parameters = new Hashtable();

      this.HttpContext = httpContext ?? HttpContext.Current;

    }
    /// <summary>
    /// 密钥
    /// </summary>
    private string Key;

    protected HttpContext HttpContext;

    /// <summary>
    /// 请求的参数
    /// </summary>
    protected Hashtable Parameters;

    /// <summary>
    /// debug信息
    /// </summary>
    private string DebugInfo;

    /// <summary>
    /// 初始化函数
    /// </summary>
    public virtual void Init()
    {
    }
    /// <summary>
    /// 获取debug信息
    /// </summary>
    /// <returns></returns>
    public String GetDebugInfo()
    {
      return DebugInfo;
    }
    /// <summary>
    /// 获取密钥
    /// </summary>
    /// <returns></returns>
    public string GetKey()
    {
      return Key;
    }
    /// <summary>
    /// 设置密钥
    /// </summary>
    /// <param name="key"></param>
    public void SetKey(string key)
    {
      this.Key = key;
    }

    /// <summary>
    /// 设置参数值
    /// </summary>
    /// <param name="parameter"></param>
    /// <param name="parameterValue"></param>
    public void SetParameter(string parameter, string parameterValue)
    {
      if (parameter != null && parameter != "")
      {
        if (Parameters.Contains(parameter))
        {
          Parameters.Remove(parameter);
        }

        Parameters.Add(parameter, parameterValue);
      }
    }


    /// <summary>
    /// 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名
    /// </summary>
    /// <param name="key">参数名</param>
    /// <param name="value">参数值</param>
    /// key和value通常用于填充最后一组参数
    /// <returns></returns>
    public virtual string CreateMd5Sign(string key, string value)
    {
      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 + "=" + value);
      string sign = MD5UtilHelper.GetMD5(sb.ToString(), GetCharset()).ToUpper();

      return sign;
    }

    /// <summary>
    /// 输出XML
    /// </summary>
    /// <returns></returns>
    public string ParseXML()
    {
      StringBuilder sb = new StringBuilder();
      sb.Append("<xml>");
      foreach (string k in Parameters.Keys)
      {
        string v = (string)Parameters[k];
        if (Regex.IsMatch(v, @"^[0-9.]$"))
        {

          sb.Append("<" + k + ">" + v + "</" + k + ">");
        }
        else
        {
          sb.Append("<" + k + "><![CDATA[" + v + "]]></" + k + ">");
        }

      }
      sb.Append("</xml>");
      return sb.ToString();
    }


    /// <summary>
    /// 设置debug信息
    /// </summary>
    /// <param name="debugInfo"></param>
    public void SetDebugInfo(String debugInfo)
    {
      this.DebugInfo = debugInfo;
    }

    public Hashtable GetAllParameters()
    {
      return this.Parameters;
    }

    protected virtual string GetCharset()
    {
      return this.HttpContext.Request.ContentEncoding.BodyName;
    }
  }