• 章节:26
  • 访问:700
  • 时长:00:11:40
  • 日期:2019-12-28 09:55

因为微信公众号开发 是调用微信服务器提供的各种接口 使用post get等方式来获取数据

数据的交互使用的是json或者xml文档 所有我们先封装好这些帮助类

缓存类:用来存储 一些不经常刷新的数据 可以使用该类来缓存

public class CacheHelper
    {
        private static MemoryCache cache = MemoryCache.Default;

        /// <summary>
        /// 设置缓存(绝对过期时间),默认两个小时
        /// </summary>
        /// <param name="key"></param>
        /// <param name="obj"></param>
        /// <param name="seconds"></param>
        public static void Set(string key, object obj, int seconds = 7200)
        {
            var policy = new CacheItemPolicy
            {
                AbsoluteExpiration = DateTime.Now.AddSeconds(seconds)
            };

            cache.Set(key, obj, policy);
        }

        /// <summary>
        /// 获取缓存,不存在返回null
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public static T Get<T>(string key) where T : class
        {
            try
            {
                return (T)cache[key];
            }
            catch (Exception)
            {
                return null;
            }
        }

        /// <summary>
        /// 取缓存项,如果不存在则返回空
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="key"></param>
        /// <returns></returns>
        public static T GetCacheItem<T>(String key)
        {
            try
            {
                return (T)cache[key];
            }
            catch
            {
                return default(T);
            }
        }

        /// <summary>
        /// 移除指定键的缓存项
        /// </summary>
        /// <param name="key"></param>
        public static void RemoveCacheItem(string key)
        {
            try
            {
                cache.Remove(key);
            }
            catch
            {
            }
        }


        /// <summary>
        /// 是否包含指定键的缓存项
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public static bool Contains(string key)
        {
            return cache.Contains(key);
        }
    }

SHA1加密类:用来让微信服务器和我们的服务器进行验证的方法

public static class EnCodeHelper
    {
        /// <summary>
        /// 基于Sha1的自定义加密字符串方法:输入一个字符串,返回一个由40个字符组成的十六进制的哈希散列(字符串)。
        /// </summary>
        /// <param name="str">要加密的字符串</param>
        /// <returns>加密后的十六进制的哈希散列(字符串)</returns>
        public static string ToSha1(this string str)
        {
            var buffer = Encoding.UTF8.GetBytes(str);
            var data = SHA1.Create().ComputeHash(buffer);

            var sb = new StringBuilder();
            foreach (var t in data)
            {
                sb.Append(t.ToString("X2"));
            }

            return sb.ToString();
        }
    }

HTTP请求:这个不用多数了 用来和微信服务器打交道的请求接口

public class HttpHelper
    {
        /// <summary>
        /// 获取地址的html文档
        /// </summary>
        /// <param name="Url">URL地址</param>
        /// <returns></returns>
        public static string HttpGet(string Url, Encoding encoding = null)
        {
            string sRslt = null;
            WebRequest oWebRqst = null;
            WebResponse oWebRps = null;
            StreamReader oStreamRd = null;
            try
            {
                oWebRqst = WebRequest.Create(Url);
                oWebRqst.Timeout = 5000;
                oWebRps = oWebRqst.GetResponse();
                if (encoding==null)
                {
                    encoding = Encoding.GetEncoding("UTF-8");
                }
                oStreamRd = new StreamReader(oWebRps.GetResponseStream(), encoding);
                sRslt = oStreamRd.ReadToEnd();
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (oStreamRd != null)
                {
                    oStreamRd.Close();
                }
                if (oWebRps != null)
                {
                    oWebRps.Close();
                }
            }
            return sRslt;
        }
    }

JSON帮助类:用来序列化和反序列化的

public class JsonHelper
    {
        public static T DeserializeJson<T>(string json)
        {
            return JsonConvert.DeserializeObject<T>(json);
        }
    }

定义一个专门用来存储API接口的类

public static class WeiXinAPI
    {
        public static string Token = "http://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";

        public static string UserList = "http://api.weixin.qq.com/cgi-bin/user/get?access_token={0}";
    }

定义一个专门用来存储缓存键的类

public class CacheKeys
    {
        public static string Token = "Get_Token";
    }