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

首頁 > 編程 > C# > 正文

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

2020-01-24 01:14:02
字體:
來源:轉載
供稿:網友

一、什么是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

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 }}

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

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

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

精彩專題分享:ASP.NET微信開發教程匯總,歡迎大家學習。

以上就是本文的全部內容,希望對大家進行微信公眾平臺開發有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新密市| 紫阳县| 临武县| 万山特区| 巴马| 余江县| 沂源县| 铜鼓县| 宜章县| 玛纳斯县| 黄浦区| 孟村| 泾阳县| 旌德县| 达州市| 绥滨县| 卢龙县| 江达县| 利津县| 兰州市| 阿荣旗| 钟祥市| 疏附县| 休宁县| 江津市| 大同县| 金乡县| 德兴市| 惠州市| 罗江县| 万州区| 葫芦岛市| 西平县| 威海市| 望奎县| 呼图壁县| 偏关县| 惠安县| 顺昌县| 辽阳市| 邯郸市|