<commit_before><?php

namespace WeixinAPI;

use WeixinAPI\API\BaseApi;

// 注册自动加载方法. 如果引入的框架有自动加载方法 可以删除此方法 然后请根据框架自行调整命名空间
spl_autoload_register('WeixinAPI\Api::autoload');

/**
 * 微信API基类.
 *
 * @author Cui.
 */
class Api
{
    private static $error = ''; // 错误信息;
    private static $selfInstanceMap = array(); // 实例列表;
    private static $CORP_ID; // 企业号corp_id;
    private static $CORP_SECRECT; // 企业号corp_secrect
    private static $CACHE_DRIVER; // 接口缓存驱动类名
    private static $postQueryStr = array(); // post数据时 需要携带的查询字符串

    const WEIXIN_BASE_API = 'https://qyapi.weixin.qq.com/cgi-bin';

    /**
     * 接口初始化, 必须执行此方法才可以使用接口.
     *
     * @author Cui
     *
     * @date   2015-07-29
     *
     * @param string $corpid      企业号corp_id
     * @param string $corpsecret  企业号corp_secrect
     * @param string $cacheDriver 接口缓存驱动类名
     */
    public static function init($corpid, $corpsecret, $cacheDriver = 'File')
    {
        self::$CORP_ID = $corpid;
        self::$CORP_SECRECT = $corpsecret;
        self::$CACHE_DRIVER = $cacheDriver;
    }

    /**
     * 工厂+多例模式 获取接口实例.
     *
     * @author Cui
     *
     * @date   2015-07-27
     *
     * @param string $className 接口类名.
     *
     * @return object
     */
    public static function factory($className)
    {
        $className = __NAMESPACE__ . '\\API\\' . $className . 'Api';
        if (!$className || !is_string($className)) {
            throw new \Exception('类名参数不正确', 1);
        }

        if (!class_exists($className)) {
            throw new \Exception($className . '接口不存在', 1);
        }

        if (!array_key_exists($className, self::$selfInstanceMap)) {
            $api = new $className();
            if (!$api instanceof BaseApi) {
                throw new \Exception($className . ' 必须继承 BaseApi', 1);
            }

            self::$selfInstanceMap[$className] = $api;
        }

        return self::$selfInstanceMap[$className];
    }

    /**
     * 设置错误信息.
     *
     * @author Cui
     *
     * @date   2015-07-27
     *
     * @param string $errorText 错误信息
     */
    public static function setError($errorText)
    {
        self::$error = $errorText;
    }

    /**
     * 获取错误信息.
     *
     * @author Cui
     *
     * @date   2015-07-27
     *
     * @return string
     */
    public static function getError()
    {
        return self::$error;
    }

    /**
     * 设置post操作的get参数.
     *
     * @author Cui
     *
     * @date   2015-08-03
     *
     * @param string $name  参数名
     * @param string $value 值
     */
    public static function setPostQueryStr($name, $value)
    {
        self::$postQueryStr[$name] = $value;
    }

    /**
     * 获取当前操作企业号的corpid.
     *
     * @author Cui
     *
     * @date   2015-07-29
     *
     * @return string
     */
    public static function getCorpId()
    {
        return self::$CORP_ID;
    }

    /**
     * 获取当前操作企业号的corpsecrect.
     *
     * @author Cui
     *
     * @date   2015-07-29
     *
     * @return string
     */
    public static function getSecrect()
    {
        return self::$CORP_SECRECT;
    }

    /**
     * 获取允许访问的token.
     *
     * @author Cui
     *
     * @date   2015-07-27
     *
     * @return string
     */
    public static function getAccessToken()
    {
        $key = self::$CORP_SECRECT . 'access_token';
        $token = self::cache($key);
        if (false == $token) {
            $corpId = self::$CORP_ID;
            $corpSecrect = self::$CORP_SECRECT;
            $module = 'gettoken';
            $queryStr = array(
                'corpid' => $corpId,
                'corpsecret' => $corpSecrect,
            );

            $res = self::_get($module, '', $queryStr);
            if (false === $res) {
                throw new \Exception('获取AccessToken失败!', 1);
            }

            $token = $res['access_token'];
        }

        // 鉴于微信的AccessToken刷新机制, 所以每次调用均刷新缓存.
        self::cache($key, $token, 7200 - 300);

        return $token;
    }

    /**
     * 用get的方式访问接口.
     *
     * @author Cui
     *
     * @date   2015-07-29
     *
     * @param string $module   指定接口模块<commit_msg>更新缓存刷新机制<commit_after><?php

namespace WeixinAPI;

use WeixinAPI\API\BaseApi;

// 注册自动加载方法. 如果引入的框架有自动加载方法 可以删除此方法 然后请根据框架自行调整命名空间
spl_autoload_register('WeixinAPI\Api::autoload');

/**
 * 微信API基类.
 *
 * @author Cui.
 */
class Api
{
    private static $error = ''; // 错误信息;
    private static $selfInstanceMap = array(); // 实例列表;
    private static $CORP_ID; // 企业号corp_id;
    private static $CORP_SECRECT; // 企业号corp_secrect
    private static $CACHE_DRIVER; // 接口缓存驱动类名
    private static $postQueryStr = array(); // post数据时 需要携带的查询字符串

    const WEIXIN_BASE_API = 'https://qyapi.weixin.qq.com/cgi-bin';

    /**
     * 接口初始化, 必须执行此方法才可以使用接口.
     *
     * @author Cui
     *
     * @date   2015-07-29
     *
     * @param string $corpid      企业号corp_id
     * @param string $corpsecret  企业号corp_secrect
     * @param string $cacheDriver 接口缓存驱动类名
     */
    public static function init($corpid, $corpsecret, $cacheDriver = 'File')
    {
        self::$CORP_ID = $corpid;
        self::$CORP_SECRECT = $corpsecret;
        self::$CACHE_DRIVER = $cacheDriver;
    }

    /**
     * 工厂+多例模式 获取接口实例.
     *
     * @author Cui
     *
     * @date   2015-07-27
     *
     * @param string $className 接口类名.
     *
     * @return object
     */
    public static function factory($className)
    {
        $className = __NAMESPACE__ . '\\API\\' . $className . 'Api';
        if (!$className || !is_string($className)) {
            throw new \Exception('类名参数不正确', 1);
        }

        if (!class_exists($className)) {
            throw new \Exception($className . '接口不存在', 1);
        }

        if (!array_key_exists($className, self::$selfInstanceMap)) {
            $api = new $className();
            if (!$api instanceof BaseApi) {
                throw new \Exception($className . ' 必须继承 BaseApi', 1);
            }

            self::$selfInstanceMap[$className] = $api;
        }

        return self::$selfInstanceMap[$className];
    }

    /**
     * 设置错误信息.
     *
     * @author Cui
     *
     * @date   2015-07-27
     *
     * @param string $errorText 错误信息
     */
    public static function setError($errorText)
    {
        self::$error = $errorText;
    }

    /**
     * 获取错误信息.
     *
     * @author Cui
     *
     * @date   2015-07-27
     *
     * @return string
     */
    public static function getError()
    {
        return self::$error;
    }

    /**
     * 设置post操作的get参数.
     *
     * @author Cui
     *
     * @date   2015-08-03
     *
     * @param string $name  参数名
     * @param string $value 值
     */
    public static function setPostQueryStr($name, $value)
    {
        self::$postQueryStr[$name] = $value;
    }

    /**
     * 获取当前操作企业号的corpid.
     *
     * @author Cui
     *
     * @date   2015-07-29
     *
     * @return string
     */
    public static function getCorpId()
    {
        return self::$CORP_ID;
    }

    /**
     * 获取当前操作企业号的corpsecrect.
     *
     * @author Cui
     *
     * @date   2015-07-29
     *
     * @return string
     */
    public static function getSecrect()
    {
        return self::$CORP_SECRECT;
    }

    /**
     * 获取允许访问的token.
     *
     * @author Cui
     *
     * @date   2015-07-27
     *
     * @return string
     */
    public static function getAccessToken()
    {
        $key = self::$CORP_SECRECT . 'access_token';
        $token = self::cache($key);
        if (false == $token) {
            $corpId = self::$CORP_ID;
            $corpSecrect = self::$CORP_SECRECT;
            $module = 'gettoken';
            $queryStr = array(
                'corpid' => $corpId,
                'corpsecret' => $corpSecrect,
            );

            $res = self::_get($module, '', $queryStr);
            if (false === $res) {
                throw new \Exception('获取AccessToken失败!', 1);
            }

            $token = $res['access_token'];

            // 企业微信更新了token刷新机制
            self::cache($key, $token, 7200 - 300);
        }

        return $token;
    }

    /**
     * 用get的方式访问接口.
     *
     * @author Cui
     *
     * @date   2015-07-29
     *
     * @param string $module   指定接口模块
{'fraction_non_alphanumeric': 0.13626961917508212, 'fraction_numerical': 0.020197104270592528, 'mean_word_length': 1.6610553577209453, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 7, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4296807', 'n_tokens_mistral': 3201, 'n_tokens_neox': 3182, 'n_words': 528}