二、获取AccessToken

1.官方文档:

access_token是微信官方公众号调用接口的全局唯一票据,开发者调用任何接口都需要使用access_token,由于access_token有效期为2小时,且每天只能获取2000次,这要求我们必须有效利用为数不多的调用次数且不用频繁去访问微信接口获取access_token

1.      
grant_type=client_creadential是固定的

2.      
appid、secret可以在开发者中心查看获取

2.开发用法:

官方文档的推荐写法,是使用一个中控服务器,所有的业务皆从中控服务器获取access_token,不应该各个业务逻辑点各自去刷新access_token,否则会产生冲突,导致服务不稳定。比如,一个业务刚拿到access_token准备调用其它接口,这时候另一个业务则刷新了access_token,这样会使原来的access_token失效,使得前者的业务调用接口失败。

这里,我们使用全局静态变量保存access_token,存在内存中,过期后,重新获取access_token,这样保证不会频繁获取access_token,且各个业务都可以获取access_token静态变量

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
public class AcessToken
 
{
 
    static string appID = "*x2ef9dc**********";
 
    static string appsecret = "2c*********8084a2943de*******";
 
  
 
    public static string accessToken = string.Empty;
 
    public static int expireTime = 0;
 
    public static string GetAcessToken()
 
    {
 
        //1.如果accessToken为空或者当前时间大于过期时间,则重新获取AccessToken
 
        if (string.IsNullOrEmpty(accessToken) || TimeStampUtils.ConvertDateTimeInt(DateTime.Now) > expireTime)
 
        {
 
            //1.1 获取accessToken
 
            string url = "https://api.weixin.qq.com/cgi-bin/token";
 
            string data = "grant_type=client_credential&appid=" + appID + "&secret=" + appsecret;
 
            //1.2 利用webrequest发送get请求,并接收返回的json字符串
 
            string accessObjstr = HttpUtils.HttpGet(url, data);
 
            //1.3 判断字符串中是否包含 access_token字符串,如果不包含,则返回空字符串
 
            if (accessObjstr.IndexOf("access_token") <= -1)
 
            {
 
                return "";
 
            }
 
            //1.4 将json格式字符串反序列化为对象
 
            TokenResultObj obj = JsonConvert.DeserializeObject<TokenResultObj>(accessObjstr);
 
            //1.5 重新设置过期时间
 
            expireTime = TimeStampUtils.ConvertDateTimeInt(DateTime.Now) + obj.expires_in - 200;
 
            //1.6 将新的accss_token赋给静态变量 accessToken
 
            accessToken = obj.access_token;
 
            //1.7 返回正确的access_token
 
            return obj.access_token;
 
        }
 
        //2.如果access_token不为空且access_token未过期直接返回正确的access_token
 
        return accessToken;
 
    }
 
}

三、测试:

1
Response.Write(AcessToken.GetAcessToken());

 

结果:

二、获取AccessToken的更多相关文章

  1. php获取accesstoken和二维码的实现方法

    class WeChat{ private $_appid; private $_appsecret; private $_token; public function __construct($_a ...

  2. 微信公众号开发(二)获取AccessToken、jsapi_ticket

    Access Token 在微信公众平台接口开发中,Access Token占据了一个很重要的地位,相当于进入各种接口的钥匙,拿到这个钥匙才有调用其他各种特殊接口的权限. access_token是公 ...

  3. 微信企业号 获取AccessToken

    目录 1. AccessToken介绍 2. 示例代码 1. AccessToken介绍 1.1 什么是AccessToken AccessToken即访问凭证,业务服务器每次主动调用企业号接口时需要 ...

  4. 使用delphi+intraweb进行微信开发5—准备实现微信API,先从获取AccessToken开始

    在前4讲中我们已经使iw开发的应用成功和微信进行了对接,再接下来的章节中我们开始逐一尝试和实现微信的各个API,开始前先来点准备工作 首先需要明确的是,微信的API都是通过https调用实现的,分为p ...

  5. 微信开发第2章 通过appid appsecret获取accesstoken

    通过 appid appsecret是可以获取accesstoken的 ,请不要一直获取,不然会把token的机会浪费掉,获取到后7200秒后失效,建议保存为6000秒到7000秒左右,具体可以查看微 ...

  6. ASP.NET微信公众号获取AccessToken

    access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保留512个字符空间.acces ...

  7. 微信开发 获取AccessToken

    获取AccessToken的方法 public static Access_token GetAccessToken() { string formatString = String.Format(& ...

  8. asp.net mvc 5 微信接入VB版 - 获取AccessToken

    获取AccessToken是微信接入的又一个基础操作.很多微信接口需要这个2小时一刷新的AccessToken作为参数. 转载请说明作者Nukepayload2 首先根据开发文档把获取AccessTo ...

  9. openresty 学习笔记二:获取请求数据

    openresty 学习笔记二:获取请求数据 openresty 获取POST或者GET的请求参数.这个是要用openresty 做接口必须要做的事情.这里分几种类型:GET,POST(urlenco ...

随机推荐

  1. 8 个优秀的 Linux 图形图像及色彩工具

    8 个优秀的 Linux 图形图像及色彩工具 1. 硬件色彩分析器LPROF LPROF 是一个用于创建设备兼容,如相机.扫描仪.显示器的ICC兼容型材的颜色分析器.这些配置提供跨设备的色彩一致性.他 ...

  2. linux下主要是VirtualBox及GuestAdditions的安装

    Linux版本的VirtualBox下载:http://www.virtualbox.org/wiki/Linux_Downloads.请下载对应的版本. RedHat.RHEL:rpm -i vh ...

  3. 开源DirectShow分析器和解码器: LAV Filter

    LAV Filter 是一款开源的DirectShow视频分离和解码软件,他的分离器LAVSplitter封装了FFMPEG中的libavformat,解码器LAVAudio和LAVVideo则封装了 ...

  4. Spring、Spring自动扫描和管理Bean

    Spring2.5为我们引入了组件自动扫描机制,它可以在类路径下寻找标记了@Component.@Service.@Controller.@Repository注解的类,并把这些类纳入到spring容 ...

  5. C# 使用XmlDocument类对XML文档进行操作

    原创地址:http://www.cnblogs.com/jfzhu/archive/2012/11/19/2778098.html 转载请注明出处 W3C制定了XML DOM标准.很多编程语言中多提供 ...

  6. LeetCode-001 Two Sum

    [题目] Given an array of integers, find two numbers such that they add up to a specific target number. ...

  7. C#格式化成小数

    datagridview某列格式化成两位小数 ............................................................................. ...

  8. SQL Server数据库---》基础

    SQL Server:只是操作数据库的一个工具(这种工具,只是提供一个界面化的方式让用户方便操作数据库) 开启服务:点击:我的电脑(计算机)--管理--服务和应用程序--服务--开启SQL Serve ...

  9. java.lang.NoClassDefFoundError: Could not initialize class net.sf.json.util.JSONUtils

    页面报错: root: java.lang.NoClassDefFoundError: Could not initialize class net.sf.json.util.JSONUtils 出错 ...

  10. java反射入门

    http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html package reflectTest; class Demo{ / ...