二、获取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. tracker-store and tracker-miner-fs eating up my CPU on every startup

    Tracker is a synergy of technologies that are designed to provide a highly sophisticated, innovative ...

  2. 用gdb调试程序笔记: 以段错误(Segmental fault)为例

    用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...

  3. 一个Windows C++的线程池的实现

    此线程池所依赖的线程类,请参看<一个Windows C++的线程类实现>: http://blog.csdn.net/huyiyang2010/archive/2010/08/10/580 ...

  4. Android消息推送之GCM方式(二)

    <声明> 转载请保留本来源地址: http://blog.csdn.net/wzg_1987/article/details/9148023 上一节讲了GCM方式实现前的一些必要准备工作, ...

  5. .net通用权限框架B/S(二) 数据库设计

    1.组织机构---员工是1:n关系 2.角色---员工n:n 3.角色--导航菜单n:n 4.操作权限(id)---导航菜单(prms_id)n:n   [此处是n:n关系正常是生成第三张表存放多对多 ...

  6. Oracle中使用透明网关链接到Sqlserver[Z]

    Oracle中使用透明网关链接到Sqlserver 在最近项目中需要从Oracle中访问SQL Server数据库, 自然想到了透明网关. 因为Oracle数据库是Linux上的, 而Linux上的O ...

  7. json(转)

    转自:http://www.cnblogs.com/mcgrady/archive/2013/06/08/3127781.html 阅读目录 JSON的两种结构 认识JSON字符串 在JS中如何使用J ...

  8. 关于中文乱码的解决方法(URL方式)

    假设keyWord ='阳光'; url="play.jsp? keyWord ="+ keyWord 若按照上述的地址直接访问,则中文会变成乱码.必须使用encodeURI()进 ...

  9. Matlab工程

    1.matlab设置默认路径 在原来的默认路径(bin)下创建一个名为startup.m的文件,内容为相对路径 cd ..\..\WorkSpace\ 或绝对路径 cd F:\Program\MATL ...

  10. Linux程序设计 读笔1

    第一章 入门 Linux应用程表现为两种特殊类型文件:可执行文件 + 脚本文件 /bin 二进制文件目录,存放启动系统时用到的标准程序 /usr/bin 用户二进制文件目录,存放用户使用的标准程序 / ...