C#微信公众号开发——获取access_token

access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒(两个小时),微信获取access_token接口每日限制调用2000次。

(一)access_token的作用

  access_token由公众号的AppID和AppSecret组成,所以具有识别公众号的作用。

(二)access_token的特点

  access_token存储至少要保留512个字符空间。access_token的有效期目前为2个小时,重复获取将导致上次获取的access_token失效。

(三)access_token的存储调用策略

  access_token在后期应用开发中应采取的策略,如图所示,将access_token存储到中控服务器,所有需要用到该参数的程序都应访问中控服务器获取access_token,中控服务器判断当前access_token是否有效并刷新即可。

access_token的存储调用策略

(四)接口调用请求说明

http请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

(五)获取access_token

 1 /// <summary>
 2 /// GET方式请求URL,并返回AccessTokenResult类
 3 /// </summary>
 4 public static AccessTokenResult GetJson<AccessTokenResult>(string url)
 5 {
 6      string returnText = HttpGet(url);
 7 
 8      JavaScriptSerializer js = new JavaScriptSerializer();
 9 
10      AccessTokenResult result = js.Deserialize<AccessTokenResult>(returnText);
11 
12      return result;
13 }

 

1 /// <summary>
2 /// 获取凭证接口
3 /// </summary>
4 private static AccessTokenResult GetToken(string appid, string secret, string grant_type = "client_credential")
5 {
6       var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", grant_type, appid, secret);
7 
8       return HttpService.GetJson<AccessTokenResult>(url);
9 }

 

 1 //token缓存键值对
 2 private static Dictionary<string, ComponentAccessTokenResult> tokenCache = new Dictionary<string, ComponentAccessTokenResult>();
 3 
 4/// <summary>
 5/// 获取缓存令牌
 6/// </summary>
 7public static string GetAccessToken(string appid, string secret)
 8{
 9    //token缓存
10    ComponentAccessTokenResult result = null;
11  //判断缓存是否存在键:appid,就将缓存中的token赋给result
12    if (tokenCache.ContainsKey(appid))
13    {
14      result = tokenCache[appid];
15    }
16    //不存在则获取token
17    if (result == null)
18    {
19      AccessTokenResult token = GetToken(appid, secret);
20 
21       result = new ComponentAccessTokenResult() { 
23       //access_token
24       component_access_token = token.access_token, 
25       //生成access_token的时间
26       dt = System.DateTime.Now,
27     };
28       tokenCache.Add(appid, result);
29    }
30   //判断是否在有效期内,过期重新获取token
31    else if (System.DateTime.Compare(result.dt.AddSeconds(7200), System.DateTime.Now) < 0)
32    {
33      AccessTokenResult token = GetToken(appid, secret);
34       result.component_access_token = token.access_token;
35       result.dt = System.DateTime.Now;
36       tokenCache[appid] = result;
37    }
38    return result.component_access_token;
39}

 

posted @ 2018-03-01 15:18  恶之必要  阅读(3398)  评论(0编辑  收藏  举报