C#微信开发之旅(四):AccessToken获取及全局管理
2014-10-24 14:00
267 查看
由于AccessToken有效期为2小时,并且接口调用有数量限制,所以开始时选择用WCF做了全局管理(项目中要到AccessToken的地方太多了,支付相关、生成二维码、获取用户信息、菜单操作等等)
下面是AccessToken全局管理的单例类,(原理:通过微信接口获取AccessToken,存储在内存中,当其他项目调用时,会判断是否过期,过期去拿新Token再返回):
这个类提供了两个出口,Instance和CreateNewInstance ,区别是 CreateNewInstance 直接调用微信接口生成新的AccessToken(请确保只在 AccessToken过期时使用),由于本人之前的项目,微信不是只我们一家开发,所以导致AccessToken 经常出现过期情况,才会多出这个方法。 如果可以保证所有用到AccessToken的地方都调用WCF的话,可以不需要这个逻辑。
下面是 获取AccessToken的代码,经过各种封装,简单的不能再简单了,这个方法在WeiXinHelper(核心类,在后续随笔中慢慢讲)中,HttpClientHelper请看:C#微信开发之旅(二):基础类之HttpClientHelper
下面是AccessToken全局管理的单例类,(原理:通过微信接口获取AccessToken,存储在内存中,当其他项目调用时,会判断是否过期,过期去拿新Token再返回):
/// <summary> /// AccessToken类,公众号通过此token 获取相关信息 (单例类) /// </summary> public sealed class AccessToken { private static AccessToken _Token = new AccessToken(); private static object lock_Object = new object(); /// <summary> /// 此处 会判断是否过期,没过期返回原存储的Token /// </summary> public static AccessToken Instance { get { if (_Token.Expired) { lock (lock_Object) { if (_Token.Expired) { _Token.CreateTime = DateTime.Now; _Token.CopyModel(JsonConvert.DeserializeObject<AccessToken>(WeiXinHelper.GetAccessToken())); } } } return _Token; } } /// <summary> /// 此处会创建新的Token返回,只有在调用接口提示AccessToken过期时 才调用这个接口。 /// </summary> /// <returns></returns> public static AccessToken CreateNewInstance() { lock (lock_Object) { _Token.CreateTime = DateTime.Now; _Token.CopyModel(JsonConvert.DeserializeObject<AccessToken>(WeiXinHelper.GetAccessToken())); } return _Token; } private AccessToken() { CreateTime = DateTime.Now; _expiresIn = -1; } private string _accessToken; private int _expiresIn; public DateTime CreateTime; public string Access_Token { get { return _accessToken; } set { _accessToken = value; } } /// <summary> /// 有效时间,秒 /// </summary> public int Expires_In { get { return _expiresIn; } set { _expiresIn = value; } } public bool Expired { get { DateTime expiredTime = CreateTime.AddSeconds(_expiresIn); if (DateTime.Now > expiredTime) return true; return false; } } public void CopyModel(AccessToken token) { //token 为空,将 过期时间 设置为 -1 if (token == null) { this.Expires_In = -1; return; } this.Access_Token = token.Access_Token; this.Expires_In = token.Expires_In; } }
这个类提供了两个出口,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; }
相关文章推荐
- 微信开发第4章 通过accesstoken获取用户标签管理
- C#开发微信门户及应用(6)--微信门户菜单的管理操作
- 微信开发模式——获取accesstoken
- 微信开发者-主动请求-实际开发-(3)获取access_token(C#)
- C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍
- C#开发微信门户及应用(6)--微信门户菜单的管理操作
- C#微信开发之旅(七):根据经纬度获取地址(百度地图Api)
- C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器
- C#开发微信门户及应用(4)--关注用户列表及详细信息管理
- C#开发微信门户及应用(23)-微信小店商品管理接口的封装和测试
- C#开发微信门户及应用(4)--关注用户列表及详细信息管理
- C#开发微信门户及应用(10)--在管理系统中同步微信用户分组信息
- C#开发微信门户及应用(9)-微信门户菜单管理及提交到微信服务器
- C#开发微信门户及应用(5)--用户分组信息管理
- C#开发微信门户及应用(14)-在微信菜单中采用重定向获取用户数据
- C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理
- C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理
- C#开发微信门户及应用(18)-微信企业号的通讯录管理开发之成员管理
- C#开发微信门户及应用(17)-微信企业号的通讯录管理开发之部门管理