* @date 2016/10/26 10:21 */ spl_autoload_register(function ($class) { if (0 === stripos($class, 'Wechat\\')) { $filename = dirname(__DIR__) . DIRECTORY_SEPARATOR . str_replace('\\', DIRECTORY_SEPARATOR, $class) . '.php'; file_exists($filename) && require($filename); } }); /** * 微信SDK加载器 * @author Anyon * @date 2016-08-21 11:06 */ class Loader { /** * 事件注册函数 * @var array */ static public $callback = array(); /** * 配置参数 * @var array */ static protected $config = array(); /** * 对象缓存 * @var array */ static protected $cache = array(); /** * 动态注册SDK事件处理函数 * @param string $event 事件名称(getAccessToken|getJsTicket) * @param string $method 处理方法(可以是普通方法或者类中的方法) * @param string|null $class 处理对象(可以直接使用的类实例) */ static public function register($event, $method, $class = NULL) { if (!empty($class) && class_exists($class, FALSE) && method_exists($class, $method)) { self::$callback[$event] = array($class, $method); } else { self::$callback[$event] = $method; } } /** * 获取微信SDK接口对象(别名函数) * @param string $type 接口类型(Card|Custom|Device|Extends|Media|Menu|Oauth|Pay|Receive|Script|User|Poi) * @param array $config SDK配置(token,appid,appsecret,encodingaeskey,mch_id,partnerkey,ssl_cer,ssl_key,qrc_img) * @return WechatCard|WechatCustom|WechatDevice|WechatExtends|WechatMedia|WechatMenu|WechatOauth|WechatPay|WechatPoi|WechatReceive|WechatScript|WechatService|WechatUser */ static public function & get_instance($type, $config = array()) { return self::get($type, $config); } /** * 获取微信SDK接口对象 * @param string $type 接口类型(Card|Custom|Device|Extends|Media|Menu|Oauth|Pay|Receive|Script|User|Poi) * @param array $config SDK配置(token,appid,appsecret,encodingaeskey,mch_id,partnerkey,ssl_cer,ssl_key,qrc_img) * @return WechatCard|WechatCustom|WechatDevice|WechatExtends|WechatMedia|WechatMenu|WechatOauth|WechatPay|WechatPoi|WechatReceive|WechatScript|WechatService|WechatUser */ static public function & get($type, $config = array()) { $index = md5(strtolower($type) . md5(json_encode(self::$config))); if (!isset(self::$cache[$index])) { $basicName = 'Wechat' . ucfirst(strtolower($type)); $className = "\\Wechat\\{$basicName}"; /* 注册类的无命名空间别名,兼容未带命名空间的老版本SDK */ !class_exists($basicName, FALSE) && class_alias($className, $basicName); self::$cache[$index] = new $className(self::config($config)); } return self::$cache[$index]; } /** * 设置配置参数 * @param array $config * @return array */ static public function config($config = array()) { !empty($config) && self::$config = array_merge(self::$config, $config); if (!empty(self::$config['cachepath'])) { Cache::$cachepath = self::$config['cachepath']; } if (empty(self::$config['component_verify_ticket'])) { self::$config['component_verify_ticket'] = Cache::get('component_verify_ticket'); } if (empty(self::$config['token']) && !empty(self::$config['component_token'])) { self::$config['token'] = self::$config['component_token']; } if (empty(self::$config['appsecret']) && !empty(self::$config['component_appsecret'])) { self::$config['appsecret'] = self::$config['component_appsecret']; } if (empty(self::$config['encodingaeskey']) && !empty(self::$config['component_encodingaeskey'])) { self::$config['encodingaeskey'] = self::$config['component_encodingaeskey']; } return self::$config; } }