• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#微信开发之旅(四):AccessToken获取及全局管理

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

由于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         /// 此处 会判断是否过期,没过期返回原存储的Token
12         /// </summary>
13         public static AccessToken Instance
14         {
15             get
16             {
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_Token
57         {
58             get { return _accessToken; }
59             set { _accessToken = value; }
60         }
61 
62         /// <summary>
63         /// 有效时间,秒
64         /// </summary>
65         public int Expires_In
66         {
67             get { return _expiresIn; }
68             set { _expiresIn = value; }
69         }
70 
71         public bool Expired
72         {
73             get
74             {
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 为空,将 过期时间 设置为 -1
87             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;
        }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#设计的一个向导程序(Wizard)框架发布时间:2022-07-10
下一篇:
C#使用NPOI导出Excel发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap