diff --git a/thinkphp/library/think/App.php b/thinkphp/library/think/App.php index e70f70073..e704658d2 100644 --- a/thinkphp/library/think/App.php +++ b/thinkphp/library/think/App.php @@ -415,26 +415,11 @@ class App extends Container // 监听app_dispatch $this->hook->listen('app_dispatch'); - // 获取应用调度信息 - if (!$this->appDebug && $this->config->get('route_check_cache')) { - $routeKey = $this->getRouteCacheKey(); - - if ($this->cache->has($routeKey)) { - $this->dispatch = $this->cache->get($routeKey); - } - } - $dispatch = $this->dispatch; if (empty($dispatch)) { // 路由检测 $dispatch = $this->routeCheck(); - - try { - if (isset($routeKey)) { - $this->cache->tag('route_cache')->set($routeKey, $dispatch); - } - } catch (\Exception $e) {} } // 记录当前调度信息 @@ -569,6 +554,15 @@ class App extends Container */ public function routeCheck() { + // 获取应用调度信息 + if (!$this->appDebug && $this->config->get('route_check_cache')) { + $routeKey = $this->getRouteCacheKey(); + + if ($this->cache->has($routeKey)) { + return $this->cache->get($routeKey); + } + } + $path = $this->request->path(); // 路由检测 @@ -605,7 +599,19 @@ class App extends Container $must = !is_null($this->routeMust) ? $this->routeMust : $this->route->config('url_route_must'); // 路由检测 返回一个Dispatch对象 - return $this->route->check($path, $must); + $dispatch = $this->route->check($path, $must); + + if (!empty($routeKey)) { + try { + $this->cache + ->tag('route_cache') + ->set($routeKey, $dispatch); + } catch (\Exception $e) { + // 存在闭包的时候缓存无效 + } + } + + return $dispatch; } /** diff --git a/thinkphp/library/think/Debug.php b/thinkphp/library/think/Debug.php index 91a25d961..8aec3c3b4 100644 --- a/thinkphp/library/think/Debug.php +++ b/thinkphp/library/think/Debug.php @@ -237,7 +237,7 @@ class Debug $output = '
' . $label . $output . ''; } if ($echo) { - echo ($output); + echo($output); return; } return $output; diff --git a/thinkphp/library/think/route/AliasRule.php b/thinkphp/library/think/route/AliasRule.php index 5675e867f..daf59fe13 100644 --- a/thinkphp/library/think/route/AliasRule.php +++ b/thinkphp/library/think/route/AliasRule.php @@ -15,8 +15,6 @@ use think\Route; class AliasRule extends Domain { - protected $route; - /** * 架构函数 * @access public @@ -36,7 +34,7 @@ class AliasRule extends Domain } /** - * 检测域名路由 + * 检测路由别名 * @access public * @param Request $request 请求对象 * @param string $url 访问地址 @@ -113,13 +111,4 @@ class AliasRule extends Domain return $this->option('except', $action); } - /** - * 获取当前的路由 - * @access public - * @return string - */ - public function getRoute() - { - return $this->route; - } } diff --git a/thinkphp/library/think/route/Dispatch.php b/thinkphp/library/think/route/Dispatch.php index c08f2c2df..4106c0da4 100644 --- a/thinkphp/library/think/route/Dispatch.php +++ b/thinkphp/library/think/route/Dispatch.php @@ -15,7 +15,6 @@ use think\Container; use think\exception\ValidateException; use think\Request; use think\Response; -use think\route\dispatch\ResponseDispatch; abstract class Dispatch { @@ -33,9 +32,9 @@ abstract class Dispatch /** * 路由规则 - * @var RuleItem + * @var Rule */ - protected $router; + protected $rule; /** * 调度信息 @@ -61,10 +60,10 @@ abstract class Dispatch */ protected $convert; - public function __construct(Request $request, RuleItem $router, $dispatch, $param = [], $code = null) + public function __construct(Request $request, Rule $rule, $dispatch, $param = [], $code = null) { $this->request = $request; - $this->router = $router; + $this->rule = $rule; $this->app = Container::get('app'); $this->dispatch = $dispatch; $this->param = $param; @@ -74,16 +73,18 @@ abstract class Dispatch $this->convert = $param['convert']; } - // 设置请求的路由信息 - $this->request->routeInfo([ - 'rule' => $this->router->getRule(), - 'route' => $this->router->getRoute(), - 'option' => $this->router->getOption(), - 'var' => $this->router->getVars(), - ]); - // 执行路由后置操作 - $this->routeAfter(); + if ($this->rule->doAfter()) { + // 设置请求的路由信息 + $this->request->routeInfo([ + 'rule' => $this->rule->getRule(), + 'route' => $this->rule->getRoute(), + 'option' => $this->rule->getOption(), + 'var' => $this->rule->getVars(), + ]); + + $this->doRouteAfter(); + } // 初始化 $this->init(); @@ -97,11 +98,11 @@ abstract class Dispatch * @access protected * @return void */ - protected function routeAfter() + protected function doRouteAfter() { // 记录匹配的路由信息 - $option = $this->router->getOption(); - $matches = $this->router->getVars(); + $option = $this->rule->getOption(); + $matches = $this->rule->getVars(); // 添加中间件 if (!empty($option['middleware'])) { @@ -143,7 +144,7 @@ abstract class Dispatch */ public function run() { - $option = $this->router->getOption(); + $option = $this->rule->getOption(); // 检测路由after行为 if (!empty($option['after'])) { @@ -156,7 +157,7 @@ abstract class Dispatch // 数据自动验证 if (isset($option['validate'])) { - $this->autoValidate($option['validate'], $request); + $this->autoValidate($option['validate']); } return $this->exec(); @@ -186,7 +187,7 @@ abstract class Dispatch // 路由规则重定向 if ($result instanceof Response) { - return new ResponseDispatch($result, $this->router); + return $result; } return false; @@ -196,11 +197,10 @@ abstract class Dispatch * 验证数据 * @access protected * @param array $option - * @param \think\Request $request * @return void * @throws ValidateException */ - protected function autoValidate($option, $request) + protected function autoValidate($option) { list($validate, $scene, $message, $batch) = $option; @@ -225,7 +225,7 @@ abstract class Dispatch $v->batch(true); } - if (!$v->check($request->param())) { + if (!$v->check($this->request->param())) { throw new ValidateException($v->getError()); } } diff --git a/thinkphp/library/think/route/Domain.php b/thinkphp/library/think/route/Domain.php index 69edf946b..4c3f0a352 100644 --- a/thinkphp/library/think/route/Domain.php +++ b/thinkphp/library/think/route/Domain.php @@ -168,7 +168,7 @@ class Domain extends RuleGroup $this->parseUrlParams($request, $array[1]); } - return new CallbackDispatch($request, $this->router, [$class, $action]); + return new CallbackDispatch($request, $this, [$class, $action]); } /** @@ -189,7 +189,7 @@ class Domain extends RuleGroup $this->parseUrlParams($request, $array[2]); } - return new CallbackDispatch($request, $this->router, [$namespace . '\\' . Loader::parseName($class, 1), $method]); + return new CallbackDispatch($request, $this, [$namespace . '\\' . Loader::parseName($class, 1), $method]); } /** @@ -209,7 +209,7 @@ class Domain extends RuleGroup $this->parseUrlParams($request, $array[1]); } - return new ControllerDispatch($request, $this->router, $controller . '/' . $action); + return new ControllerDispatch($request, $this, $controller . '/' . $action); } /** @@ -229,7 +229,7 @@ class Domain extends RuleGroup $this->parseUrlParams($request, $array[1]); } - return new ModuleDispatch($request, $this->router, $controller . '/' . $action); + return new ModuleDispatch($request, $this, $controller . '/' . $action); } } diff --git a/thinkphp/library/think/route/Resource.php b/thinkphp/library/think/route/Resource.php index d280cb0b1..0d2f4dabf 100644 --- a/thinkphp/library/think/route/Resource.php +++ b/thinkphp/library/think/route/Resource.php @@ -17,8 +17,7 @@ class Resource extends RuleGroup { // 资源路由名称 protected $resource; - // 资源路由地址 - protected $route; + // REST路由方法定义 protected $rest = []; diff --git a/thinkphp/library/think/route/Rule.php b/thinkphp/library/think/route/Rule.php index 455c1a9a4..430f95944 100644 --- a/thinkphp/library/think/route/Rule.php +++ b/thinkphp/library/think/route/Rule.php @@ -23,20 +23,195 @@ use think\route\dispatch\View as ViewDispatch; abstract class Rule { + /** + * 路由标识 + * @var string + */ protected $name; - // 路由对象实例 + + /** + * 路由对象 + * @var Route + */ protected $router; - // 路由父对象 + + /** + * 路由所属分组 + * @var RuleGroup + */ protected $parent; - // 路由参数 + + /** + * 路由规则 + * @var mixed + */ + protected $rule; + + /** + * 路由地址 + * @var string|\Closure + */ + protected $route; + + /** + * 请求类型 + * @var string + */ + protected $method; + + /** + * 路由变量 + * @var array + */ + protected $vars = []; + + /** + * 路由参数 + * @var array + */ protected $option = []; - // 路由变量规则 + + /** + * 路由变量规则 + * @var array + */ protected $pattern = []; - // 需要合并的路由参数 + + /** + * 需要和分组合并的路由参数 + * @var array + */ protected $mergeOptions = ['after', 'before', 'model', 'header', 'response', 'append', 'middleware']; + /** + * 是否需要后置操作 + * @var bool + */ + protected $doAfter; + abstract public function check($request, $url, $depr = '/'); + /** + * 获取Name + * @access public + * @return string + */ + public function getName() + { + return $this->name; + } + + /** + * 获取当前路由规则 + * @access public + * @return string + */ + public function getRule() + { + return $this->rule; + } + + /** + * 获取当前路由地址 + * @access public + * @return mixed + */ + public function getRoute() + { + return $this->route; + } + + /** + * 获取当前路由的请求类型 + * @access public + * @return string + */ + public function getMethod() + { + return strtolower($this->method); + } + + /** + * 获取当前路由的变量 + * @access public + * @return array + */ + public function getVars() + { + return $this->vars; + } + + /** + * 获取路由对象 + * @access public + * @return Route + */ + public function getRouter() + { + return $this->router; + } + + /** + * 路由是否有后置操作 + * @access public + * @return bool + */ + public function doAfter() + { + return $this->doAfter; + } + + /** + * 获取路由分组 + * @access public + * @return RuleGroup|null + */ + public function getParent() + { + return $this->parent; + } + + /** + * 获取变量规则定义 + * @access public + * @param string $name 变量名 + * @return mixed + */ + public function getPattern($name = '') + { + if ('' === $name) { + return $this->pattern; + } + + return isset($this->pattern[$name]) ? $this->pattern[$name] : null; + } + + /** + * 获取路由参数 + * @access public + * @param string $name 变量名 + * @return mixed + */ + public function getConfig($name = '') + { + return $this->router->config($name); + } + + /** + * 获取路由参数定义 + * @access public + * @param string $name 参数名 + * @return mixed + */ + public function getOption($name = '') + { + if ('' === $name) { + return $this->option; + } + + return isset($this->option[$name]) ? $this->option[$name] : null; + } + /** * 注册路由参数 * @access public @@ -86,77 +261,6 @@ abstract class Rule return $this; } - /** - * 获取Name - * @access public - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * 获取Parent对象 - * @access public - * @return $this|null - */ - public function getParent() - { - return $this->parent; - } - - /** - * 获取变量规则定义 - * @access public - * @param string $name 变量名 - * @return mixed - */ - public function getPattern($name = '') - { - if ('' === $name) { - return $this->pattern; - } - - return isset($this->pattern[$name]) ? $this->pattern[$name] : null; - } - - /** - * 获取路由参数 - * @access public - * @param string $name 变量名 - * @return mixed - */ - public function getConfig($name = '') - { - return $this->router->config($name); - } - - /** - * 获取路由对象 - * @access public - * @return Route - */ - public function getRouter() - { - return $this->router; - } - - /** - * 获取路由参数定义 - * @access public - * @param string $name 参数名 - * @return mixed - */ - public function getOption($name = '') - { - if ('' === $name) { - return $this->option; - } - - return isset($this->option[$name]) ? $this->option[$name] : null; - } - /** * 设置路由请求类型 * @access public @@ -582,9 +686,10 @@ abstract class Rule $url = array_slice(explode('|', $url), $count + 1); $this->parseUrlParams($request, implode('|', $url), $matches); - $this->route = $route; - $this->vars = $matches; - $this->option = $option; + $this->route = $route; + $this->vars = $matches; + $this->option = $option; + $this->doAfter = true; // 发起路由调度 return $this->dispatch($request, $route, $option); diff --git a/thinkphp/library/think/route/RuleGroup.php b/thinkphp/library/think/route/RuleGroup.php index 90cf5e664..fc1ed6127 100644 --- a/thinkphp/library/think/route/RuleGroup.php +++ b/thinkphp/library/think/route/RuleGroup.php @@ -33,8 +33,6 @@ class RuleGroup extends Rule 'options' => [], ]; - protected $rule; - // MISS路由 protected $miss; @@ -131,7 +129,7 @@ class RuleGroup extends Rule $this->buildResourceRule($this->resource, $this->option); } elseif ($this->rule) { if ($this->rule instanceof Response) { - return new ResponseDispatch($request, $this->router, $this->rule); + return new ResponseDispatch($request, $this, $this->rule); } $this->parseGroupRule($this->rule); @@ -176,12 +174,10 @@ class RuleGroup extends Rule if ($this->auto) { // 自动解析URL地址 - $ruleItem = new RuleItem($this->router, $this, '', '', $this->auto . '/' . $url); - $result = new UrlDispatch($request, $ruleItem, $this->auto . '/' . $url, ['auto_search' => false]); + $result = new UrlDispatch($request, $this, $this->auto . '/' . $url, ['auto_search' => false]); } elseif ($this->miss && in_array($this->miss->getMethod(), ['*', $method])) { // 未匹配所有路由的路由规则处理 - $ruleItem = new RuleItem($this->router, $this, '', '', $this->miss->getRoute()); - $result = $ruleItem->parseRule($request, '', $this->miss->getRoute(), $url, $this->miss->getOption()); + $result = $this->miss->parseRule($request, '', $this->miss->getRoute(), $url, $this->miss->getOption()); } else { $result = false; } diff --git a/thinkphp/library/think/route/RuleItem.php b/thinkphp/library/think/route/RuleItem.php index 954a2b020..6a7855774 100644 --- a/thinkphp/library/think/route/RuleItem.php +++ b/thinkphp/library/think/route/RuleItem.php @@ -17,30 +17,6 @@ use think\Route; class RuleItem extends Rule { - /** - * 路由规则 - * @var string - */ - protected $rule; - - /** - * 路由地址 - * @var string|\Closure - */ - protected $route; - - /** - * 请求类型 - * @var string - */ - protected $method; - - /** - * 路由变量 - * @var array - */ - protected $vars = []; - /** * 架构函数 * @access public @@ -48,8 +24,8 @@ class RuleItem extends Rule * @param RuleGroup $parent 上级对象 * @param string $name 路由标识 * @param string|array $rule 路由规则 - * @param string $method 请求类型 * @param string|\Closure $route 路由地址 + * @param string $method 请求类型 * @param array $option 路由参数 * @param array $pattern 变量规则 */ @@ -101,46 +77,6 @@ class RuleItem extends Rule $this->setRuleName(); } - /** - * 获取当前路由规则 - * @access public - * @return string - */ - public function getRule() - { - return $this->rule; - } - - /** - * 获取当前路由地址 - * @access public - * @return mixed - */ - public function getRoute() - { - return $this->route; - } - - /** - * 获取当前路由的请求类型 - * @access public - * @return string - */ - public function getMethod() - { - return strtolower($this->method); - } - - /** - * 获取当前路由的变量 - * @access public - * @return array - */ - public function getVars() - { - return $this->vars; - } - /** * 检查后缀 * @access public diff --git a/thinkphp/library/think/route/dispatch/Controller.php b/thinkphp/library/think/route/dispatch/Controller.php index 3d8a1f0e8..1de829926 100644 --- a/thinkphp/library/think/route/dispatch/Controller.php +++ b/thinkphp/library/think/route/dispatch/Controller.php @@ -22,8 +22,8 @@ class Controller extends Dispatch return $this->app->action( $this->dispatch, $vars, - $this->router->getConfig('url_controller_layer'), - $this->router->getConfig('controller_suffix') + $this->rule->getConfig('url_controller_layer'), + $this->rule->getConfig('controller_suffix') ); } diff --git a/thinkphp/library/think/route/dispatch/Module.php b/thinkphp/library/think/route/dispatch/Module.php index ad7a79044..acbfff24e 100644 --- a/thinkphp/library/think/route/dispatch/Module.php +++ b/thinkphp/library/think/route/dispatch/Module.php @@ -30,10 +30,10 @@ class Module extends Dispatch $result = explode('/', $result); } - if ($this->router->getConfig('app_multi_module')) { + if ($this->rule->getConfig('app_multi_module')) { // 多模块部署 - $module = strip_tags(strtolower($result[0] ?: $this->router->getConfig('default_module'))); - $bind = $this->router->getRouter()->getBind(); + $module = strip_tags(strtolower($result[0] ?: $this->rule->getConfig('default_module'))); + $bind = $this->rule->getRouter()->getBind(); $available = false; if ($bind && preg_match('/^[a-z]/is', $bind)) { @@ -43,10 +43,10 @@ class Module extends Dispatch $module = $bindModule; } $available = true; - } elseif (!in_array($module, $this->router->getConfig('deny_module_list')) && is_dir($this->app->getAppPath() . $module)) { + } elseif (!in_array($module, $this->rule->getConfig('deny_module_list')) && is_dir($this->app->getAppPath() . $module)) { $available = true; - } elseif ($this->router->getConfig('empty_module')) { - $module = $this->router->getConfig('empty_module'); + } elseif ($this->rule->getConfig('empty_module')) { + $module = $this->rule->getConfig('empty_module'); $available = true; } @@ -61,13 +61,13 @@ class Module extends Dispatch } // 是否自动转换控制器和操作名 - $convert = is_bool($this->convert) ? $this->convert : $this->router->getConfig('url_convert'); + $convert = is_bool($this->convert) ? $this->convert : $this->rule->getConfig('url_convert'); // 获取控制器名 - $controller = strip_tags($result[1] ?: $this->router->getConfig('default_controller')); + $controller = strip_tags($result[1] ?: $this->rule->getConfig('default_controller')); $this->controller = $convert ? strtolower($controller) : $controller; // 获取操作名 - $this->actionName = strip_tags($result[2] ?: $this->router->getConfig('default_action')); + $this->actionName = strip_tags($result[2] ?: $this->rule->getConfig('default_action')); // 设置当前请求的控制器、操作 $this->request->controller(Loader::parseName($this->controller, 1))->action($this->actionName); @@ -82,15 +82,15 @@ class Module extends Dispatch // 实例化控制器 try { $instance = $this->app->controller($this->controller, - $this->router->getConfig('url_controller_layer'), - $this->router->getConfig('controller_suffix'), - $this->router->getConfig('empty_controller')); + $this->rule->getConfig('url_controller_layer'), + $this->rule->getConfig('controller_suffix'), + $this->rule->getConfig('empty_controller')); } catch (ClassNotFoundException $e) { throw new HttpException(404, 'controller not exists:' . $e->getClass()); } // 获取当前操作名 - $action = $this->actionName . $this->router->getConfig('action_suffix'); + $action = $this->actionName . $this->rule->getConfig('action_suffix'); if (is_callable([$instance, $action])) { // 执行操作方法 @@ -99,12 +99,12 @@ class Module extends Dispatch // 严格获取当前操作方法名 $reflect = new ReflectionMethod($instance, $action); $methodName = $reflect->getName(); - $suffix = $this->router->getConfig('action_suffix'); + $suffix = $this->rule->getConfig('action_suffix'); $actionName = $suffix ? substr($methodName, 0, -strlen($suffix)) : $methodName; $this->request->action($actionName); // 自动获取请求变量 - $vars = $this->router->getConfig('url_param_type') + $vars = $this->rule->getConfig('url_param_type') ? $this->request->route() : $this->request->param(); } elseif (is_callable([$instance, '_empty'])) { diff --git a/thinkphp/library/think/route/dispatch/Url.php b/thinkphp/library/think/route/dispatch/Url.php index f0241ab2b..8d5c85d69 100644 --- a/thinkphp/library/think/route/dispatch/Url.php +++ b/thinkphp/library/think/route/dispatch/Url.php @@ -20,10 +20,10 @@ class Url extends Dispatch protected function init() { // 解析默认的URL规则 - $depr = $this->router->getConfig('pathinfo_depr'); + $depr = $this->rule->getConfig('pathinfo_depr'); $result = $this->parseUrl($this->dispatch, $depr); - $this->dispatch = new Module($this->request, $this->router, $result); + $this->dispatch = new Module($this->request, $this->rule, $result); } public function exec() @@ -40,7 +40,7 @@ class Url extends Dispatch */ protected function parseUrl($url, $depr) { - $bind = $this->router->getRouter()->getBind(); + $bind = $this->rule->getRouter()->getBind(); if (!empty($bind) && preg_match('/^[a-z]/is', $bind)) { $bind = str_replace('/', $depr, $bind); @@ -54,7 +54,7 @@ class Url extends Dispatch } // 解析模块 - $module = $this->router->getConfig('app_multi_module') ? array_shift($path) : null; + $module = $this->rule->getConfig('app_multi_module') ? array_shift($path) : null; if ($this->param['auto_search']) { $controller = $this->autoFindController($module, $path); } else { @@ -67,7 +67,7 @@ class Url extends Dispatch // 解析额外参数 if ($path) { - if ($this->router->getConfig('url_param_type')) { + if ($this->rule->getConfig('url_param_type')) { $var += $path; } else { preg_replace_callback('/(\w+)\|([^\|]+)/', function ($match) use (&$var) { @@ -115,7 +115,7 @@ class Url extends Dispatch $name2 = strtolower(Loader::parseName($controller, 1) . '/' . $action); } - if ($this->router->getRouter()->getName($name) || $this->router->getRouter()->getName($name2)) { + if ($this->rule->getRouter()->getName($name) || $this->rule->getRouter()->getName($name2)) { return true; } @@ -131,8 +131,8 @@ class Url extends Dispatch */ protected function autoFindController($module, &$path) { - $dir = $this->app->getAppPath() . ($module ? $module . '/' : '') . $this->router->getConfig('url_controller_layer'); - $suffix = $this->app->getSuffix() || $this->router->getConfig('controller_suffix') ? ucfirst($this->router->getConfig('url_controller_layer')) : ''; + $dir = $this->app->getAppPath() . ($module ? $module . '/' : '') . $this->rule->getConfig('url_controller_layer'); + $suffix = $this->app->getSuffix() || $this->rule->getConfig('controller_suffix') ? ucfirst($this->rule->getConfig('url_controller_layer')) : ''; $item = []; $find = false; diff --git a/vendor/autoload.php b/vendor/autoload.php index 92b10d195..16d2c4774 100644 --- a/vendor/autoload.php +++ b/vendor/autoload.php @@ -4,4 +4,4 @@ require_once __DIR__ . '/composer/autoload_real.php'; -return ComposerAutoloaderInit513ee155225f84554dcc21f55f596f8f::getLoader(); +return ComposerAutoloaderInitf87766a7411e551cf24d607cb3736291::getLoader(); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php index 6490e3de6..278e7debf 100644 --- a/vendor/composer/autoload_real.php +++ b/vendor/composer/autoload_real.php @@ -2,7 +2,7 @@ // autoload_real.php @generated by Composer -class ComposerAutoloaderInit513ee155225f84554dcc21f55f596f8f +class ComposerAutoloaderInitf87766a7411e551cf24d607cb3736291 { private static $loader; @@ -19,15 +19,15 @@ class ComposerAutoloaderInit513ee155225f84554dcc21f55f596f8f return self::$loader; } - spl_autoload_register(array('ComposerAutoloaderInit513ee155225f84554dcc21f55f596f8f', 'loadClassLoader'), true, true); + spl_autoload_register(array('ComposerAutoloaderInitf87766a7411e551cf24d607cb3736291', 'loadClassLoader'), true, true); self::$loader = $loader = new \Composer\Autoload\ClassLoader(); - spl_autoload_unregister(array('ComposerAutoloaderInit513ee155225f84554dcc21f55f596f8f', 'loadClassLoader')); + spl_autoload_unregister(array('ComposerAutoloaderInitf87766a7411e551cf24d607cb3736291', 'loadClassLoader')); $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); if ($useStaticLoader) { require_once __DIR__ . '/autoload_static.php'; - call_user_func(\Composer\Autoload\ComposerStaticInit513ee155225f84554dcc21f55f596f8f::getInitializer($loader)); + call_user_func(\Composer\Autoload\ComposerStaticInitf87766a7411e551cf24d607cb3736291::getInitializer($loader)); } else { $map = require __DIR__ . '/autoload_namespaces.php'; foreach ($map as $namespace => $path) { @@ -48,19 +48,19 @@ class ComposerAutoloaderInit513ee155225f84554dcc21f55f596f8f $loader->register(true); if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit513ee155225f84554dcc21f55f596f8f::$files; + $includeFiles = Composer\Autoload\ComposerStaticInitf87766a7411e551cf24d607cb3736291::$files; } else { $includeFiles = require __DIR__ . '/autoload_files.php'; } foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire513ee155225f84554dcc21f55f596f8f($fileIdentifier, $file); + composerRequiref87766a7411e551cf24d607cb3736291($fileIdentifier, $file); } return $loader; } } -function composerRequire513ee155225f84554dcc21f55f596f8f($fileIdentifier, $file) +function composerRequiref87766a7411e551cf24d607cb3736291($fileIdentifier, $file) { if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { require $file; diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index c23c8bca3..a9ed920c2 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -4,7 +4,7 @@ namespace Composer\Autoload; -class ComposerStaticInit513ee155225f84554dcc21f55f596f8f +class ComposerStaticInitf87766a7411e551cf24d607cb3736291 { public static $files = array ( '1cfd2761b63b0a29ed23657ea394cb2d' => __DIR__ . '/..' . '/topthink/think-captcha/src/helper.php', @@ -287,9 +287,9 @@ class ComposerStaticInit513ee155225f84554dcc21f55f596f8f public static function getInitializer(ClassLoader $loader) { return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit513ee155225f84554dcc21f55f596f8f::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit513ee155225f84554dcc21f55f596f8f::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit513ee155225f84554dcc21f55f596f8f::$classMap; + $loader->prefixLengthsPsr4 = ComposerStaticInitf87766a7411e551cf24d607cb3736291::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitf87766a7411e551cf24d607cb3736291::$prefixDirsPsr4; + $loader->classMap = ComposerStaticInitf87766a7411e551cf24d607cb3736291::$classMap; }, null, ClassLoader::class); } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index dd5cbaeb6..d82d817a6 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -80,17 +80,17 @@ }, { "name": "zoujingli/wechat-developer", - "version": "v1.1.6", - "version_normalized": "1.1.6.0", + "version": "v1.1.7", + "version_normalized": "1.1.7.0", "source": { "type": "git", "url": "https://github.com/zoujingli/WeChatDeveloper.git", - "reference": "095471bdc61e3389135f69b1849069c19d439f22" + "reference": "f01ac5dafc85cb408fd3e0bafc462437785ae178" }, "dist": { "type": "zip", - "url": "https://files.phpcomposer.com/files/zoujingli/WeChatDeveloper/095471bdc61e3389135f69b1849069c19d439f22.zip", - "reference": "095471bdc61e3389135f69b1849069c19d439f22", + "url": "https://files.phpcomposer.com/files/zoujingli/WeChatDeveloper/f01ac5dafc85cb408fd3e0bafc462437785ae178.zip", + "reference": "f01ac5dafc85cb408fd3e0bafc462437785ae178", "shasum": "" }, "require": { @@ -98,7 +98,7 @@ "ext-openssl": "*", "php": ">=5.4" }, - "time": "2018-05-11T09:54:48+00:00", + "time": "2018-05-16T05:48:16+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -183,12 +183,12 @@ "source": { "type": "git", "url": "https://github.com/top-think/framework.git", - "reference": "1adc81f2d59cd99e69d38c058527cd759531e8a8" + "reference": "6448c4b42599d58125ba1307aa6d3defa044aeb9" }, "dist": { "type": "zip", - "url": "https://files.phpcomposer.com/files/top-think/framework/1adc81f2d59cd99e69d38c058527cd759531e8a8.zip", - "reference": "1adc81f2d59cd99e69d38c058527cd759531e8a8", + "url": "https://files.phpcomposer.com/files/top-think/framework/6448c4b42599d58125ba1307aa6d3defa044aeb9.zip", + "reference": "6448c4b42599d58125ba1307aa6d3defa044aeb9", "shasum": "" }, "require": { @@ -204,7 +204,7 @@ "sebastian/phpcpd": "2.*", "squizlabs/php_codesniffer": "2.*" }, - "time": "2018-05-19T04:16:33+00:00", + "time": "2018-05-19T13:37:11+00:00", "type": "think-framework", "installation-source": "dist", "notification-url": "https://packagist.org/downloads/", diff --git a/vendor/zoujingli/wechat-developer/Test/pay-transfers-create.php b/vendor/zoujingli/wechat-developer/Test/pay-transfers-create.php index 7e4735c9d..77d70b026 100644 --- a/vendor/zoujingli/wechat-developer/Test/pay-transfers-create.php +++ b/vendor/zoujingli/wechat-developer/Test/pay-transfers-create.php @@ -35,6 +35,8 @@ try { $result = $wechat->createTransfers($options); echo '
'; var_export($result); + $result = $wechat->queryTransfers($options['partner_trade_no']); + var_export($result); } catch (Exception $e) { diff --git a/vendor/zoujingli/wechat-developer/WeChat/Contracts/Tools.php b/vendor/zoujingli/wechat-developer/WeChat/Contracts/Tools.php index 4cfe9b83e..a9bf0a9ba 100644 --- a/vendor/zoujingli/wechat-developer/WeChat/Contracts/Tools.php +++ b/vendor/zoujingli/wechat-developer/WeChat/Contracts/Tools.php @@ -155,7 +155,7 @@ class Tools { return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function ($matches) { return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE"); - }, json_encode($data)); + }, ($jsonData = json_encode($data)) == '[]' ? '{}' : $jsonData); } /** diff --git a/vendor/zoujingli/wechat-developer/WeChat/Pay.php b/vendor/zoujingli/wechat-developer/WeChat/Pay.php index 5af341637..3f40508be 100644 --- a/vendor/zoujingli/wechat-developer/WeChat/Pay.php +++ b/vendor/zoujingli/wechat-developer/WeChat/Pay.php @@ -202,14 +202,23 @@ class Pay /** * 下载对账单 - * @param array $options - * @return array + * @param array $options 静音参数 + * @param null|string $outType 输出类型 + * @return bool|string * @throws InvalidResponseException */ - public function billDownload(array $options) + public function billDownload(array $options, $outType = null) { - $url = 'https://api.mch.weixin.qq.com/pay/downloadbill'; - return $this->callPostApi($url, $options); + $this->params->set('sign_type', 'MD5'); + $params = $this->params->merge($options); + $params['sign'] = $this->getPaySign($params, 'MD5'); + $result = Tools::post('https://api.mch.weixin.qq.com/pay/downloadbill', Tools::arr2xml($params)); + if (($jsonData = Tools::xml2arr($result))) { + if ($jsonData['return_code'] !== 'SUCCESS') { + throw new InvalidResponseException($jsonData['return_msg'], '0'); + } + } + return is_null($outType) ? $result : $outType($result); } @@ -250,6 +259,10 @@ class Pay public function queryTransfers($partner_trade_no) { $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo'; + $this->params->set('appid', $this->config->get('appid')); + $this->params->set('mch_id', $this->config->get('mch_id')); + $this->params->offsetUnset('mchid'); + $this->params->offsetUnset('mch_appid'); return $this->callPostApi($url, ['partner_trade_no' => $partner_trade_no], true, 'MD5', false); } @@ -297,6 +310,7 @@ class Pay */ public function queryTransFresBank($partner_trade_no) { + $this->params->offsetUnset('appid'); $url = 'https://api.mch.weixin.qq.com/mmpaysptrans/query_bank'; return $this->callPostApi($url, ['partner_trade_no' => $partner_trade_no], true, 'MD5', false); }