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

高洛峰
發布: 2017-01-17 10:46:26
原創
2161 人瀏覽過

一、什麼是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):

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

四、代碼:

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
登入後複製
是否過期(WXApi類):

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(&#39;"&#39;) + "\"";
    int index = jsonStr.IndexOf(key) + key.Length + 1;
    if (index > key.Length + 1)
    {
     //先截逗号,若是最后一个,截“}”号,取最小值
     int end = jsonStr.IndexOf(&#39;,&#39;, index);
     if (end == -1)
     {
      end = jsonStr.IndexOf(&#39;}&#39;, index);
     }
 
     result = jsonStr.Substring(index, end - index);
     result = result.Trim(new char[] { &#39;"&#39;, &#39; &#39;, &#39;\&#39;&#39; }); //过滤引号或空格
    }
   }
   return result;
  }
  #endregion
 
 }
}
登入後複製

4、請求微信接口,獲取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
登入後複製

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

#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
登入後複製
以上是對本文的全部內容,希望對本文大家進行微信公眾平台開發有幫助。

更多C#微信公眾平台開發之access_token的獲取存儲與更新相關文章請關注PHP中文網!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板