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的存储调用策略

(四)接口调用请求说明

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}
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

TNW

简介TNW(htts://gitee.com/javen205/TNW):TypeScript(The)Node.js(Next)WeChat微信公众号开发脚手架,支持http模块扩展、支持任何Node.js的服务端框架(Express、NestJS、eggjs等)概述access_token是

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )