首页 > 代码库 > C#微信开发之旅(三):AccessToken获取及全局管理
C#微信开发之旅(三):AccessToken获取及全局管理
由于AccessToken有效期为2小时,并且接口调用有数量限制,所以开始时选择用WCF做了全局管理(项目中要到AccessToken的地方太多了,支付相关、生成二维码、获取用户信息、菜单操作等等)
下面是AccessToken全局管理的单例类,(原理:通过微信接口获取AccessToken,存储在内存中,当其他项目调用时,会判断是否过期,过期去拿新Token再返回):
1 /// <summary> 2 /// AccessToken类,公众号通过此token 获取相关信息 (单例类) 3 /// </summary> 4 public sealed class AccessToken 5 { 6 private static AccessToken _Token = new AccessToken(); 7 8 private static object lock_Object = new object(); 9 10 /// <summary>11 /// 此处 会判断是否过期,没过期返回原存储的Token12 /// </summary>13 public static AccessToken Instance14 {15 get16 {17 if (_Token.Expired)18 {19 lock (lock_Object)20 {21 if (_Token.Expired)22 {23 _Token.CreateTime = DateTime.Now;24 _Token.CopyModel(JsonConvert.DeserializeObject<AccessToken>(WeiXinHelper.GetAccessToken()));25 }26 }27 }28 29 return _Token;30 }31 }32 33 /// <summary>34 /// 此处会创建新的Token返回,只有在调用接口提示AccessToken过期时 才调用这个接口。35 /// </summary>36 /// <returns></returns>37 public static AccessToken CreateNewInstance()38 {39 lock (lock_Object)40 {41 _Token.CreateTime = DateTime.Now;42 _Token.CopyModel(JsonConvert.DeserializeObject<AccessToken>(WeiXinHelper.GetAccessToken()));43 }44 return _Token;45 }46 47 private AccessToken()48 {49 CreateTime = DateTime.Now;50 _expiresIn = -1;51 }52 53 private string _accessToken;54 private int _expiresIn;55 public DateTime CreateTime;56 public string Access_Token57 {58 get { return _accessToken; }59 set { _accessToken = value; }60 }61 62 /// <summary>63 /// 有效时间,秒64 /// </summary>65 public int Expires_In66 {67 get { return _expiresIn; }68 set { _expiresIn = value; }69 }70 71 public bool Expired72 {73 get74 {75 DateTime expiredTime = CreateTime.AddSeconds(_expiresIn);76 77 if (DateTime.Now > expiredTime)78 return true;79 80 return false;81 }82 }83 84 public void CopyModel(AccessToken token)85 {86 //token 为空,将 过期时间 设置为 -187 if (token == null)88 {89 this.Expires_In = -1;90 return;91 }92 93 this.Access_Token = token.Access_Token;94 this.Expires_In = token.Expires_In;95 96 }97 }
这个类提供了两个出口,Instance和CreateNewInstance ,区别是 CreateNewInstance 直接调用微信接口生成新的AccessToken(请确保只在 AccessToken过期时使用),由于本人之前的项目,微信不是只我们一家开发,所以导致AccessToken 经常出现过期情况,才会多出这个方法。 如果可以保证所有用到AccessToken的地方都调用WCF的话,可以不需要这个逻辑。
下面是 获取AccessToken的代码,经过各种封装,简单的不能再简单了,这个方法在WeiXinHelper(核心类,在后续随笔中慢慢讲)中,HttpClientHelper请看:C#微信开发之旅(二):基础类之HttpClientHelper
/// <summary> /// 获取Access_Token /// </summary> /// <returns></returns> public static string GetAccessToken() { string url = WeiXinConst.WeiXin_AccessTokenUrl; string result = HttpClientHelper.GetResponse(url); return result; }
C#微信开发之旅(三):AccessToken获取及全局管理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。