二、获取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. IIS7性能优化:启用浏览器本地缓存

    原文地址:http://jingyan.baidu.com/article/597035521b96e88fc00740af.html

  2. 理解Java多态

    多态又称Polymophism,poly意思为多,polymophism即多种形态的意思.一种类型引用因为指向不同的子类,表现出不同的形态,使用不同的方法. 什么是多态 多态建议我们编码时使用comm ...

  3. 如果在文档已完成加载后执行 document.write,整个 HTML 页面将被覆盖

    <!DOCTYPE html> <html> <body> <h1>My First Web Page</h1> <p>My F ...

  4. 利用rman进行异机还原(目录相同)

    利用rman进行异机还原(目录相同) 源始库:192.168.201.2 目标库:192.168.201.3 --192.168.201.2 --rman [oracle@db01 ~]$ rman ...

  5. nginx安装编译详解

    ./configure --prefix --with解释 http://zhidao.baidu.com/link?url=pksp8xh2OVbRS8_wUMv4ILpb7P6VVIU-NQVp6 ...

  6. windows通过cmd重新启动网卡

    ipconfig/release ipconfig/renew

  7. 如何删除Oracle数据库

    1>点击开始找Oracle的目录,-->点击[Universal Installer],打开点击[卸载产品] 2>除了oracle_home1 不点外,其他的都勾选. 3>再点 ...

  8. web开发 - 从零开始 - 01 - 常见样式

    1.width  &  height 2.background : a.background-color b.background-image:url() c.background-repea ...

  9. Android : Activity 和 TabActivity 共用一个OptionMenu

    在虚拟机上我可以用menu键打开OptionMenu,但是到了真机上没有menu键了.OptionMenu没有办法打开,所以只能采用google推荐到ActionBar.用右上角到三个点代替实体到me ...

  10. RemoveAll 要重写equals方法

    public class User { private String name; private int age; //setter and getter public String getName( ...