zoukankan      html  css  js  c++  java
  • php

    可扩展性很强。

    <?php
    namespace LaneWeChatCore;
    /**
     * 微信Access_Token的获取与过期检查
     * Created by Lane.
     * User: lane
     * Date: 13-12-29
     * Time: 下午5:54
     * Mail: lixuan868686@163.com
     * Website: http://www.lanecn.com
     *
     * 使用说明(用sae中kvdb举例):
        //  1 首先编写两个方法,一个设置缓存,一个取缓存。(例子中的,_setSaeKvdb()/_getSaeKvdb(),函数名称随意。)
        //  2 在[_setCacheAccessToken/_getCacheAccessToken]方法中添加相应的case(上面所编写的方法。)。
        //  3 更改常量[CACHE_ACCESSTOKEN_TYPE]的值,你要在第二步骤中使用case后的值。
     * 
     */
    class AccessToken{
    
        /**
         * 使用的缓存类型,设置缓存与使用缓存,均要用到次常量。
         */
        const CACHE_ACCESSTOKEN_TYPE = 'kvdb';
    
        /**
         * 获取微信Access_Token
         */
        public static function getAccessToken(){
            // 获取缓存access_token,无缓存返回false。
            $accessToken = self::_getCacheAccessToken(self::CACHE_ACCESSTOKEN_TYPE);
    
            // 判断得到的access_token是否存在,以及是否过期,如过期或者不存在,则重新获取。
            if(empty($accessToken['access_token']) || $accessToken['expires_in'] < time()){
                $accessToken = self::_getAccessToken();
            }
    
            // 返回access_token
            return $accessToken['access_token'];
        }
    
        /**
         * @descrpition 从微信服务器获取微信ACCESS_TOKEN
         * @param string $cacheType 缓存access_token,默认使用sae中的kvdb
         * @return Ambigous|bool
         */
        private static function _getAccessToken(){
            // 从微信服务器获取access_token
            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.WECHAT_APPID.'&secret='.WECHAT_APPSECRET;
            $accessToken = Curl::callWebServer($url, '', 'GET');
            if(!isset($accessToken['access_token'])){
                return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败');
            }
    
            // 缓存 access_token
            self::_setCacheAccessToken($accessToken, self::CACHE_ACCESSTOKEN_TYPE);
    
            // 返回 access_token
            return $accessToken;
        }
    
        /**
         * 缓存access_token
         */
        private static function _setCacheAccessToken($data, $cacheType) {
            switch ($cacheType) {
                case 'kvdb':
                    // 使用sae中的KVDB缓存access_token
                    self::_setSaeKvdb($data);
                    break;
                
                // 其他缓存方法,请自行添加
    
                default: break;
            }
        }
    
        /**
         * 获取缓存的 access_token
         * @param  [type] $cacheType 使用的缓存类型
         * @return [type]            [description]
         */
        private static function _getCacheAccessToken($cacheType) {
            $data = array();
            switch ($cacheType) {
                case 'kvdb':
                    $data = self::_getSaeKvdb();
                    break;
                
                // 其他获取缓存的方法,自行添加。
    
                default: break;
            }
            return $data;
        }
    
        /**
         * 使用sae中的KVDB进行缓存
         * @param [type] $data [description]
         */
        private static function _setSaeKvdb($data) {
            // 使用KVDB存储会话
            $kv = new SaeKV();
            $kv->init('4ywk0l2yzo');
            // delete original kvdbs
            $kv->delete('access_token');
            $kv->delete('expires_in');
            // write new kvdb
            $kv->add('access_token', $data['access_token']);
            $kv->add('expires_in', time() + 7000);
        }
        /**
         * 获取存储在 SAE 中KVDB中的access_token
         * @return [type] [description]
         */
        private static function _getSaeKvdb() {
            // 使用KVDB存储会话
            $kv = new SaeKV();
            $kv->init('4ywk0l2yzo');
            // get kvdb data
            $data['access_token'] = $kv->get('access_token');
            $data['expires_in'] = $kv->get('expires_in');
            return $data;
        }
    }
    

      

  • 相关阅读:
    mvc session验证
    mvc登录验证
    PHP中return的用法
    mvc框架类
    php mvc实现比赛列表
    php MySQLDB类
    php header的几种用法
    php isset()与empty()的使用
    jenkins+springboot+svn linux 自动化部署
    基于netty的websocket例子
  • 原文地址:https://www.cnblogs.com/KTblog/p/5681143.html
Copyright © 2011-2022 走看看