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是否有效并刷新即可。

(四)接口调用请求说明
1http请求方式: GET 2https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
(五)获取access_token
1 1 /// <summary> 2 2 /// GET方式请求URL,并返回AccessTokenResult类 3 3 /// </summary> 4 4 public static AccessTokenResult GetJson<AccessTokenResult>(string url) 5 5 { 6 6 string returnText = HttpGet(url); 7 7 8 8 JavaScriptSerializer js = new JavaScriptSerializer(); 9 9 1010 AccessTokenResult result = js.Deserialize<AccessTokenResult>(returnText); 1111 1212 return result; 1313 } 14 151 /// <summary> 162 /// 获取凭证接口 173 /// </summary> 184 private static AccessTokenResult GetToken(string appid, string secret, string grant_type = "client_credential") 195 { 206 var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", grant_type, appid, secret); 217 228 return HttpService.GetJson<AccessTokenResult>(url); 239 } 24 25 1 //token缓存键值对 26 2 private static Dictionary<string, ComponentAccessTokenResult> tokenCache = new Dictionary<string, ComponentAccessTokenResult>(); 27 3 28 4/// <summary> 29 5/// 获取缓存令牌 30 6/// </summary> 31 7public static string GetAccessToken(string appid, string secret) 32 8{ 33 9 //token缓存 3410 ComponentAccessTokenResult result = null; 3511 //判断缓存是否存在键:appid,就将缓存中的token赋给result 3612 if (tokenCache.ContainsKey(appid)) 3713 { 3814 result = tokenCache[appid]; 3915 } 4016 //不存在则获取token 4117 if (result == null) 4218 { 4319 AccessTokenResult token = GetToken(appid, secret); 4420 4521 result = new ComponentAccessTokenResult() { 4623 //access_token 4724 component_access_token = token.access_token, 4825 //生成access_token的时间 4926 dt = System.DateTime.Now, 5027 }; 5128 tokenCache.Add(appid, result); 5229 } 5330 //判断是否在有效期内,过期重新获取token 5431 else if (System.DateTime.Compare(result.dt.AddSeconds(7200), System.DateTime.Now) < 0) 5532 { 5633 AccessTokenResult token = GetToken(appid, secret); 5734 result.component_access_token = token.access_token; 5835 result.dt = System.DateTime.Now; 5936 tokenCache[appid] = result; 6037 } 6138 return result.component_access_token; 6239}