YMQOAuthTokenGetData.class.php 4.03 KB
<?php
require_once dirname(__FILE__) . '/YMQOAuthTokenRedisHelper.class.php';

/**
 * 获取存放在Redis的访问令牌的操作类
 */
class YMQOAuthTokenGetData
{
    /**
     * 存放Redis 对象
     * @var object
     */
    private static $redis;
    
    /**
     * 创建 Redis 对象
     */
    private static function _createRedis()
    {
        if (!isset(self::$redis))
        {
            self::$redis = new YMQOAuthTokenRedisHelper();
        }
        else
        {
            // 测试此处有 socket 过期现象
            $ping = @self::$redis->mRedis->ping();
            
            // 判断连接是否断开
            if ($ping != '+PONG')
            {
                self::$redis = new YMQOAuthTokenRedisHelper();
            }
        }
    }
    
    /**
     * 获取访问令牌方法 
     * [老方法, 已不再使用]
     * 
     * @param string $token 指定的来访令牌
     * @return mexed (null | array)
     * @example
     * YMQOAuthTokenGetData::get( "e434b93937v" );
     * return array (
     *     'clientId' => '*******',
     *     'scope' => '*****',
     * );
     */
    public static function get($token)
    {
        self::_createRedis();
        
        $result = null;
        // 数据存在: 返回字符串 , 不存在: 返回 false
        $tempResult = self::$redis->mRedis->get(strval($token));
        if ($tempResult != false && is_string($tempResult)) 
        {
            $result = json_decode($tempResult, true);
        }
        return $result;
    }
    
    /**
     * Hase 操作: 获取用户访问应用的令牌 
     * 
     * @param string $userId
     * @param string $appId
     * @return mixed (false | string)
     * @example
     * YMQOAuthTokenGetData::hGet("106090", '1000000')
     */
    public static function hGet($userId, $appId)
    {
        self::_createRedis();
        // 获取存在的哈希值对应键的值 。如果哈希表不存在,或键不存在,则返回FALSE
        $result = self::$redis->mRedis->hGet(strval($userId), strval($appId));
        
        return $result;
    }
    
    /**
     * Hash 操作: 获取用户的所有访问应用的令牌 [new]
     * @param string $userId
     * @return array
     * @example 
     * YMQOAuthTokenGetData::hVals("106090")
     */
    public static function hVals($userId)
    {
        self::_createRedis();
        // 返回一个数组, 哈希中对应的所有值 
        $result = self::$redis->mRedis->hVals(strval($userId));
        
        return $result;
    }
    
    /**
     * 自定义 操作: 验证用户访问应用的令牌是否有效 [new]
     * @param string $userId
     * @return mixed (null | array)
     * @example 
     * YMQOAuthTokenGetData::hFind("106090", "*****");
     */
    public static function hFind($userId, $token)
    {
        self::_createRedis();
        
        // 此变量用于存放返回结果
        $result = null;
        // 返回一个数组, 哈希中对应的所有值 
        $tempResult = self::$redis->mRedis->hVals(strval($userId));
        
        if (is_array($tempResult) && count($tempResult) > 0)
        {
            // 过滤掉数组中的空值
            $tempResult = array_filter($tempResult);
            
            if (is_array($tempResult) && count($tempResult) > 0)
            {
//                // 存放数据为JSON格式, 先解析为数组,再查找.
//                foreach ($tempResult as $data)
//                {
//                    $data = @json_decode($data, true);
//                    if (in_array($token, $data))
//                    {
//                        $result = $data;
//                        break;
//                    }
//                }
                
                // 只存放令牌数据的情况
                if (($key = array_search($token, $tempResult)) !== null)
                {
                    $result['oauth_token'] = $tempResult[ $key ];
                }
                
                // 释放变量
                unset($tempResult);
            }
        }
        return $result;
    }
}
?>