C#微信公众号开发——获取access_token

Stella981
• 阅读 1089

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

C#微信公众号开发——获取access_token

(四)接口调用请求说明

http请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

(五)获取access_token

 1 /// <summary>
 2 /// GET方式请求URL,并返回AccessTokenResult类
 3 /// </summary>
 4 public static AccessTokenResult GetJson<AccessTokenResult>(string url)
 5 {
 6      string returnText = HttpGet(url);
 7 
 8      JavaScriptSerializer js = new JavaScriptSerializer();
 9 
10      AccessTokenResult result = js.Deserialize<AccessTokenResult>(returnText);
11 
12      return result;
13 }

1 /// <summary>
2 /// 获取凭证接口
3 /// </summary>
4 private static AccessTokenResult GetToken(string appid, string secret, string grant_type = "client_credential")
5 {
6       var url = string.Format("https://api.weixin.qq.com/cgi-bin/token?grant_type={0}&appid={1}&secret={2}", grant_type, appid, secret);
7 
8       return HttpService.GetJson<AccessTokenResult>(url);
9 }

 1 //token缓存键值对
 2 private static Dictionary<string, ComponentAccessTokenResult> tokenCache = new Dictionary<string, ComponentAccessTokenResult>();
 3 
 4/// <summary>
 5/// 获取缓存令牌
 6/// </summary>
 7public static string GetAccessToken(string appid, string secret)
 8{
 9    //token缓存
10    ComponentAccessTokenResult result = null;
11  //判断缓存是否存在键:appid,就将缓存中的token赋给result
12    if (tokenCache.ContainsKey(appid))
13    {
14      result = tokenCache[appid];
15    }
16    //不存在则获取token
17    if (result == null)
18    {
19      AccessTokenResult token = GetToken(appid, secret);
20 
21       result = new ComponentAccessTokenResult() { 
23       //access_token
24       component_access_token = token.access_token, 
25       //生成access_token的时间
26       dt = System.DateTime.Now,
27     };
28       tokenCache.Add(appid, result);
29    }
30   //判断是否在有效期内,过期重新获取token
31    else if (System.DateTime.Compare(result.dt.AddSeconds(7200), System.DateTime.Now) < 0)
32    {
33      AccessTokenResult token = GetToken(appid, secret);
34       result.component_access_token = token.access_token;
35       result.dt = System.DateTime.Now;
36       tokenCache[appid] = result;
37    }
38    return result.component_access_token;
39}
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
TNW
简介TNW(htts://gitee.com/javen205/TNW):TypeScript(The)Node.js(Next)WeChat微信公众号开发脚手架,支持http模块扩展、支持任何Node.js的服务端框架(Express、NestJS、eggjs等)概述access_token是
Stella981 Stella981
3年前
Spring Security OAuth 个性化token
个性化Token目的默认通过调用/oauth/token返回的报文格式包含以下参数{"access_token":"e6669cdfb6cd43feaf5cf91a65041382","token_type":"bearer","refre
Wesley13 Wesley13
3年前
Java 通过get post 请求url
1️⃣.已获取小程序的access\_token为例,通过Get请求url1importcom.alibaba.fastjson.JSONObject;23StringwechatUrl"https://api.weixin.qq.com/cgibin/token?grant_typeclie
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这