WeixinAction.cs 3.59 KB
using System;
using System.Net;
using System.Text;
using System.Web;
using WeixinApi.Models;

namespace WeixinApi
{
    public class WeixinAction
    {
        #region 获取数据
        private static string GetData(string url)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
            WebClient wc = new WebClient();
            wc.Credentials = CredentialCache.DefaultCredentials;
            wc.Encoding = Encoding.UTF8;
            return wc.DownloadString(url);
        }

        private static T GetData<T>(string url)
        {
            try
            {
                return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(GetData(url));
            }
            catch (Exception)
            {
                return default(T);
            }
        }
        #endregion

        #region Url编码
        /// <summary>
        /// Url编码并对编码后的字符大写
        /// </summary>
        /// <param name="temp"></param>
        /// <returns></returns>
        private static string UrlEncode(string temp)
        {
            return UrlEncode(temp, Encoding.UTF8);
        }
        /// <summary>
        /// Url编码并对编码后的字符大写
        /// </summary>
        /// <param name="temp"></param>
        /// <param name="encoding"></param>
        /// <returns></returns>
        private static string UrlEncode(string temp, Encoding encoding)
        {
            if (string.IsNullOrEmpty(temp)) return string.Empty;
            StringBuilder stringBuilder = new StringBuilder();
            foreach (char item in temp)
            {
                string t = item.ToString();
                string k = HttpUtility.UrlEncode(t, encoding);
                stringBuilder.Append(t == k ? t : k.ToUpper());
            }
            return stringBuilder.ToString();
        }
        #endregion

        public static WeixinTokenResponse GetWeixinToken(string appid, string secret)
        {
            return GetData<WeixinTokenResponse>(string.Format(WeixinConfig.ApiUrl.GetWeixinToken, appid, secret));
        }
        public static JsapiTicketResponse GetJsapiTicket(string token)
        {
            return GetData<JsapiTicketResponse>(string.Format(WeixinConfig.ApiUrl.GetJsapiTicket, token));
        }

        public static string GetOAuthBaseUrl(string appid, string redirect, string state = "")
        {
            return string.Format(WeixinConfig.OAuthUrl, appid, UrlEncode(redirect), "snsapi_base", state);
        }

        public static string GetOAuthUserInfoUrl(string appid, string redirect, string state = "")
        {
            return string.Format(WeixinConfig.OAuthUrl, appid, UrlEncode(redirect), "snsapi_userinfo", state);
        }

        public static AccessTokenResponse GetAccessToken(string appid, string secret, string code)
        {
            return GetData<AccessTokenResponse>(string.Format(WeixinConfig.ApiUrl.GetAccessToken, appid, secret, code));
        }
        /// <summary>
        /// 刷新access_token
        /// </summary>
        /// <param name="appid"></param>
        /// <param name="token">通过access_token获取到的refresh_token参数</param>
        /// <returns></returns>
        public static AccessTokenResponse RefreshToken(string appid, string token)
        {
            return GetData<AccessTokenResponse>(string.Format(WeixinConfig.ApiUrl.RefreshToken, appid, token));
        }

        public static UserInfoResponse GetUserInfo(string token, string openid)
        {
            return GetData<UserInfoResponse>(string.Format(WeixinConfig.ApiUrl.GetUserInfo, token, openid));
        }
    }
}