首页 > 热点 > 微信 > 正文

详解微信开发者文档 access_token管理

2020-03-22 17:37:18
字体:
来源:转载
供稿:网友
  • 写在前面的话:前几篇博客详细讲解了如何获取用户发送的消息并进行回复,这里的回复是一种被动的回复,而被动回复的方式便是通过echo返回信息给微信服务器的POST请求,因此,其实我们并没有算的上调用了微信的接口,从这一篇文章开始,才算是真正的调用微信接口开端,就从access_token讲起。

    ======正文开始========

      每时每刻都有许多用户来调用微信接口,那么我们想要请求微信接口,如何知道是哪一个用户来请求的呢?也就是说需要一个唯一的凭证来唯一的标明一个公众号,这个信息便是APPID和APPSECRET。这个信息可以在微信公众号后台读取到,其中APPID直接能够看到,而如果想要看到APPSECRET,需要管理员的手机扫描二维码才能够看到。这两个信息唯一的表明了一个公众号,由此也可见,这两个信息对于一个微信公众号来说,是非常敏感的信息。对于每次微信接口的调用,我们本可以使用APPID和APPSECRET,但是正因为它的敏感性,我们并没有直接通过它,而是通过一个叫做access_token的信息来调用微信接口,而access_token则是通过APPID和APPSECRET来获取的。下面详细讲解一下access_token管理的一些内容。

    一、获取access_token

      获取access_token方法很简单,只需要向如下接口发送GET请求即可

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

      其中APPID和APPSECRET填写自己公众号的相应内容即可,当向微信服务器发送完成GET请求后,微信服务器会给回复,回复内容的格式为json格式(注意,不是xml格式),内容如下:

    {'access_token':'ACCESS_TOKEN','expires_in':7200}

      其中access_token一项就是我们所需要的值了,通过过这个值就能够去调用其他微信接口了;

        expires_in是过期时间,一般为2个小时,所以说我们获取到的access_token并不是永久有效的,而是仅仅有2个小时的有效期,当然了,这个内容以后微信可能还会调整。关于这一项注意重点强调一下:你可能会问,为什么要考虑它的有效期呢?每次我都重新调用GET请求获取access_token不就行了?答案是不可以的,有以下几个原因:

      (1)每次获取到的access_token值是不一样的,这样就有可能导致影响业务

      (2)最主要的一点:微信对于调用access_token获取接口是有次数限制的。

      至于如何管理access_token,在第二部分讲解。

      前面是正常情况下,当GET请求失败的话,返回的信息如下:

    {'errcode':40013,'errmsg':'invalid appid'}

      我们从中无法获取到access_token,而通过具体的errmsg可以判断错误的原因为:appid填写的错误。

    二、通过中继服务器获取access_token

      虽然通过第一步我们已经获取到了access_token,但是每次使用access_token的时候,并不能通过调用接口的方式进行获取,原因前面讲了,具体实施的话,可以通过一个中继服务器,定时去获取access_token,而我们的业务逻辑所需要的access_token,是从中继服务器中获取,而不是每次都请求微信接口获取。

    三、源码示例讲解

      下面通过代码实例进行讲解,之前我们的代码都是写在wechat.php之中,下面我们建立一个新的文件进行演示,叫做geAccessToken.php。

    1、设置access_token请求参数:

        $appid='wx85871939f72432432';    $secret='4026e323bfcb11ed35ea41a92ffsfdsgdsge';    $url='http://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;     

      这里的appid和secret填写自己的信息。

    2、通过curl获取json数据

        $ch=curl_init();      curl_setopt($ch, CURLOPT_URL,$url);      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);      $result=curl_exec($ch);      curl_close($ch);     $data=json_decode($result,true); 

      其中result中保存的就是GET请求收到的json数据,通过json_decode将json数据转化为数组;注意:需要在php中开启curl.

    3、取得access_token数据

    var_dump($data['access_token']);

      这里直接打印的access_token值。

    4.中继服务器设置  

      通过前面代码就能够获取access_token了,实际项目中,可以将获取的access_token插入数据库表中,而获取的方法可以通过cron每隔1个小时获取一次。

      实际业务中,需要access_token就可以直接从数据库表中读取了,这里就不贴代码了。

      至此,access_token管理的方法就讲完了。

    (完)

    附源代码:

    <?php    $appid='wx85871939f7f9b647';    $secret='4026e323bfcb11ed35ea41a924bc36f6';    $url='http://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;         $ch=curl_init();      curl_setopt($ch, CURLOPT_URL,$url);      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);      $result=curl_exec($ch);      curl_close($ch);     $data=json_decode($result,true);          var_dump($data['access_token']);?>

      

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表