国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#微信公眾平臺開發—access_token的獲取存儲與更新

2019-11-17 02:45:45
字體:
來源:轉載
供稿:網友

C#微信公眾平臺開發—access_token的獲取存儲與更新

一、什么是access_token?

access_token是公眾號的全局唯一票據,公眾號調用各接口時都需使用access_token。正常情況下access_token有效期為7200秒,重復獲取將導致上次獲取的access_token失效。由于獲取access_token的api調用次數非常有限,建議開發者全局存儲與更新access_token,頻繁刷新access_token會導致api調用受限,影響自身業務。

二、要解決的問題

1、如何獲取access_token。

2、由于access_token的有效期為7200秒,即2小時,并且重復獲取將導致上次獲取的access_token失效,獲取access_token的api調用次數非常有限,所以要解決如何全局存儲與更新access_token

三、思路

1、將access_token存儲在數據庫中。

2、何時更新access_token呢?當access_token失效的時候更新,那么怎么判斷access_token有沒有失效呢?使用當前的access_token請求微信接口,獲取自定義菜單,如果返回的errcode為42001,則說明access_token已經失效,這時再重新獲取access_token。

數據庫設計(表名SWX_Config):

四、代碼:

1、Http請求代碼(HttPRequestUtil類):

#region 請求Url,不發送數據/// <summary>/// 請求Url,不發送數據/// </summary>public static string RequestUrl(string url){    return RequestUrl(url, "POST");}#endregion#region 請求Url,不發送數據/// <summary>/// 請求Url,不發送數據/// </summary>public static string RequestUrl(string url, string method){    // 設置參數    HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;    CookieContainer cookieContainer = new CookieContainer();    request.CookieContainer = cookieContainer;    request.AllowAutoRedirect = true;    request.Method = method;    request.ContentType = "text/html";    request.Headers.Add("charset", "utf-8");    //發送請求并獲取相應回應數據    HttpWebResponse response = request.GetResponse() as HttpWebResponse;    //直到request.GetResponse()程序才開始向目標網頁發送Post請求    Stream responseStream = response.GetResponseStream();    StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);    //返回結果網頁(html)代碼    string content = sr.ReadToEnd();    return content;}#endregion
View Code

2、輔助方法(Tools類):

namespace SWX.Utils{    /// <summary>    /// 工具類    /// </summary>    public class Tools    {        #region 獲取Json字符串某節點的值        /// <summary>        /// 獲取Json字符串某節點的值        /// </summary>        public static string GetJsonValue(string jsonStr, string key)        {            string result = string.Empty;            if (!string.IsNullOrEmpty(jsonStr))            {                key = "/"" + key.Trim('"') + "/"";                int index = jsonStr.IndexOf(key) + key.Length + 1;                if (index > key.Length + 1)                {                    //先截逗號,若是最后一個,截“}”號,取最小值                    int end = jsonStr.IndexOf(',', index);                    if (end == -1)                    {                        end = jsonStr.IndexOf('}', index);                    }                    result = jsonStr.Substring(index, end - index);                    result = result.Trim(new char[] { '"', ' ', '/'' }); //過濾引號或空格                }            }            return result;        }        #endregion    }}
View Code

3、判斷access_token是否過期(WXApi類):

#region 驗證Token是否過期/// <summary>/// 驗證Token是否過期/// </summary>public static bool TokenExpired(string access_token){    string jsonStr = HttpRequestUtil.RequestUrl(string.Format("https://api.weixin.QQ.com/cgi-bin/menu/get?access_token={0}", access_token));    if (Tools.GetJsonValue(jsonStr, "errcode") == "42001")    {        return true;    }    return false;}#endregion
View Code

4、請求微信接口,獲取access_token(WXApi類):

#region 獲取Token/// <summary>/// 獲取Token/// </summary>public static string GetToken(string appid, string secret){    string strJson = HttpRequestUtil.RequestUrl(string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret));    return Tools.GetJsonValue(strJson, "access_token");}#endregion
View Code

5、全局存儲與更新access_token(AdminUtil類):

#region 獲取access_token/// <summary>/// 獲取access_token/// </summary>public static string GetAccessToken(PageBase page){    string access_token = string.Empty;    UserInfo user = GetLoginUser(page);    if (user != null)    {        if (string.IsNullOrWhiteSpace(user.access_token)) //尚未保存過access_token        {            access_token = WXApi.GetToken(user.AppID, user.AppSecret);        }        else        {            if (WXApi.TokenExpired(user.access_token)) //access_token過期            {                access_token = WXApi.GetToken(user.AppID, user.AppSecret);            }            else            {                return user.access_token;            }        }        MSSQLHelper.ExecuteSql(string.Format("update SWX_Config set access_token='{0}' where UserName='{1}'", access_token, user.UserName));    }    return access_token;}#endregion
View Code


上一篇:CLR

下一篇:.NET基礎之集合

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石阡县| 彭山县| 修水县| 凤凰县| 武川县| 枞阳县| 沾益县| 庆元县| 当阳市| 紫云| 阿拉善左旗| 巩义市| 宝清县| 衡东县| 瓮安县| 商水县| 刚察县| 惠东县| 敦煌市| 永吉县| 江永县| 南通市| 华池县| 河津市| 缙云县| 平武县| 肥乡县| 开封县| 栾川县| 汉源县| 西平县| 盐城市| 敖汉旗| 四川省| 富蕴县| 峡江县| 仁化县| 田东县| 定结县| 正宁县| 南溪县|