美文网首页
获取微信access_token

获取微信access_token

作者: iyangxuqing | 来源:发表于2018-10-19 15:41 被阅读0次
    <?php
    /*
    获取 access_token
    access_token 是全局唯一接口调用凭据,开发者调用各接口时都需使用 access_token,请妥善保存。
    access_token 的存储至少要保留512个字符空间。access_token 的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的 access_token 失效。
    公众平台的 API 调用所需的 access_token 的使用及生成方式说明:
    为了保密 appsecrect,第三方需要一个 access_token 获取和刷新的中控服务器。
    而其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则会造成 access_token 覆盖而影响业务;
    目前 access_token 的有效期通过返回的 expires_in 来传达,目前是7200秒之内的值。中控服务器需要根据这个有效时间提前去刷新新 access_token。
    在刷新过程中,中控服务器对外输出的依然是老 access_token,此时公众平台后台会保证在刷新短时间内,新老 access_token 都可用,这保证了第三方业务的平滑过渡;
    access_token 的有效时间可能会在未来有调整,所以中控服务器不仅需要内部定时主动刷新,
    还需要提供被动刷新 access_token 的接口,这样便于业务服务器在 API 调用获知 access_token 已超时的情况下,可以触发 access_token 的刷新流程。
    开发者可以使用 AppID 和 AppSecret 调用本接口来获取 access_token。
    AppID 和 AppSecret 可登录微信公众平台官网-设置-开发设置中获得(需要已经绑定成为开发者,且帐号没有异常状态)。
    AppSecret 生成后请自行保存,因为在公众平台每次生成查看都会导致 AppSecret 被重置。
    注意调用所有微信接口时均需使用 https 协议。如果第三方不使用中控服务器,而是选择各个业务逻辑点各自去刷新 access_token,那么就可能会产生冲突,导致服务不稳定。
    接口地址:
    https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
    */
    
    require_once('../config.php');
    echo json_encode($result);
    exit();
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////
    
    function getAccessTokenFromDB()
    {
        GLOBAL $_mysqli;
        $_sql = "SELECT accessToken, expired FROM accessToken";
        $_result = $_mysqli->query($_sql);
        if($row = $_result->fetch_assoc()){
            $accessToken = $row['accessToken'];
            $expired = $row['expired'];
            if($expired > time() + 600){
                return $result = array(
                    'accessToken' => $accessToken,
                    'expired' => $expired
                );
            }
        }
    }
    
    function getAccessTokenFromWX()
    {
        GLOBAL $_mysqli;
        $appId = APPID;
        $appSecret = APPSECRET;
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
        $res = https_request($url);
        $res = json_decode($res);
        if($res->access_token){
            $id = 1;
            $accessToken = $res->access_token;
            $expired = $res->expires_in + time();
            $_sql = "INSERT INTO accessToken (id, accessToken, expired) VALUES ('{$id}', '{$accessToken}', '{$expired}')";
            $_sql = $_sql . "ON DUPLICATE KEY UPDATE accessToken=VALUES(accessToken), expired=VALUES(expired)";
            $_result = $_mysqli->query($_sql);
            if($_result){
                return $result = array(
                    'accessToken' => $accessToken,
                    'expired' => (string)$expired //因为数据库取出的值为字符串类型,这里为了返回的数据类型统一,也转换为字符串类型输出
                );
            }
        }
    }
    ?>
    

    相关文章

      网友评论

          本文标题:获取微信access_token

          本文链接:https://www.haomeiwen.com/subject/sgqwgttx.html