04-获取密钥AccessToken

什么是 AccessToken

平常我们登录网站或者系统,都需要账号密码。网站可以通过 Session 等方式记录登录信息。但微信公众号进行信息交互时,它怎么知道你是登录的呢?这时可以使用现在流行的信息验证方式——Token。

Token 的中文意思是:象征;记号;代币。我们就是靠这个记号进行打交道的。

微信公众平台对 Token 的说明

access_token 是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用 access_token。开发者需要进行妥善保存。access_token 的存储至少要保留 512 个字符空间。access_token 的有效期目前为 2 个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效。

目前 access_token 的有效期通过返回的 expire_in 来传达,目前是 7200 秒之内的值。

获取 Token 需要给它”账号”和”密码”,我们的 appid 和 appsecret 就担当着账号密码的角色。

HTTPS 请求方式:GET

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

说白了,Token 就好比 appid 和 appsecret 的一个代言人,它代表着账号和密码,并且它是有生命周期的,通常是两个小时。它的生命周期,微信服务器交给了一台叫做”中控服务器”的服务器来进行处理,这台服务器对每个 token 进行管理,过期了就删除,没有就创建。现在很多接口系统都是用 token 机制来实现的。

获取 Token

这个 token 是以后调用微信公众平台接口的一个凭证,很多地方都要用到,我们可以把它保存起来。如果失败了,可以再次获取一个新的 token。这里先演示每次都获取新的 token。

定义接口,包含 Post 和 Get 方法封装:

interface IWeiXinHandler
{
    T DoPost<T>(params string[] param) where T : class;
    T DoGet<T>(params string[] param) where T : class;
}Code language: JavaScript (javascript)

定义基类 Handler 类,用来处理一些基本的东西:

public class WeiXinHandlerBase
{
    protected const string APPID = "wx51ebdertretret633db6";
    protected const string APPSECRET = "42a55retretret9265";
    private const string TokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}";

    public AccessTokenResultInfo accessTokenInfo;

    public WeiXinHandlerBase()
    {
        var url = string.Format(TokenUrl, APPID, APPSECRET);
        var json = HtmlHelper.HttpGet(url);
        accessTokenInfo = JsonHelper.DeserializeJsonToObject<AccessTokenResultInfo>(json);
    }
}Code language: PHP (php)

在控制器里面读取出来:

public IActionResult GetToken()
{
    AccessTokenResultInfo accessTokenInfo = new WeiXinHandlerBase().accessTokenInfo;
    return Content(accessTokenInfo.access_token + " 有效时间:" + accessTokenInfo.expires_in);
}Code language: PHP (php)

发布程序后访问:

http://rrrr.imwork.net/home/gettoken

得到结果:

13_66ZnsAUM8BLLLdrdFMMEtMBzl2tW_iNAPf5456546546454PCvDbpfhhPKF8ScIJP_nbZn2sMhv30pJh-997y6pvdFW0irIWyku6XNBgAFARHV 有效时间:7200Code language: CSS (css)

再刷新:

13_8RqyUMJ5y0y1NsUa0gYqOunQch59m2tD45654645TrELlQH8V6jZeIDcPo2IdZOXo1Z3coEdqOAGqqZ4QoUjo-CJKGw-NSReAGATYX 有效时间:7200Code language: CSS (css)

每次都获取一个新的 token 其实并不好,应该把它存储到服务器上面。把第一次获取 token 的时间记录起来,两个小时后再用 token 时,就要获取新的了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注