Skip to content

当配置中的response type设置为collection的时候会导致三方平台收取ticket异常 #224

Closed
@symoo

Description

@symoo

PHP 7.1
Laravel 5.5
laravel-wechat 4.0.9

wechat.php中的配置:

return [
    'defaults' => [
        /*
         * 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
         */
        'response_type' => 'collection',
    ],

报错信息

Type error: Argument 1 passed to Overtrue\LaravelWeChat\Events\OpenPlatform\OpenPlatformEvent::__construct() must be of the type array, object given, called in /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/laravel-wechat/src/Controllers/OpenPlatformController.php on line 42 {"exception":"[object] (Symfony\\Component\\Debug\\Exception\\FatalThrowableError(code: 0): Type error: Argument 1 passed to Overtrue\\LaravelWeChat\\Events\\OpenPlatform\\OpenPlatformEvent::__construct() must be of the type array, object given, called in /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/laravel-wechat/src/Controllers/OpenPlatformController.php on line 42 at /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/laravel-wechat/src/Events/OpenPlatform/OpenPlatformEvent.php:26)
[stacktrace]
#0 /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/laravel-wechat/src/Controllers/OpenPlatformController.php(42): Overtrue\\LaravelWeChat\\Events\\OpenPlatform\\OpenPlatformEvent->__construct(Object(EasyWeChat\\Kernel\\Support\\Collection))
#1 /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/wechat/src/Kernel/Traits/Observable.php(148): Overtrue\\LaravelWeChat\\Controllers\\OpenPlatformController->Overtrue\\LaravelWeChat\\Controllers\\{closure}(Object(EasyWeChat\\Kernel\\Support\\Collection))
#2 /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/wechat/src/Kernel/Traits/Observable.php(112): EasyWeChat\\Kernel\\ServerGuard->callHandler(Object(Closure), Object(EasyWeChat\\Kernel\\Support\\Collection))
#3 /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/wechat/src/Kernel/Traits/Observable.php(96): EasyWeChat\\Kernel\\ServerGuard->notify('component_verif...', Object(EasyWeChat\\Kernel\\Support\\Collection))
#4 /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/wechat/src/OpenPlatform/Server/Guard.php(43): EasyWeChat\\Kernel\\ServerGuard->dispatch('component_verif...', Object(EasyWeChat\\Kernel\\Support\\Collection))
#5 /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/wechat/src/Kernel/ServerGuard.php(105): EasyWeChat\\OpenPlatform\\Server\\Guard->resolve()
#6 /var/lib/jenkins/workspace/sxwk-web-server/vendor/overtrue/laravel-wechat/src/Controllers/OpenPlatformController.php(45): EasyWeChat\\Kernel\\ServerGuard->serve()
#7 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(48): Overtrue\\LaravelWeChat\\Controllers\\OpenPlatformController->__invoke(Object(EasyWeChat\\OpenPlatform\\Application))
#8 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212): Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route), Object(Overtrue\\LaravelWeChat\\Controllers\\OpenPlatformController), '__invoke')
#9 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Route.php(169): Illuminate\\Routing\\Route->runController()
#10 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\\Routing\\Route->run()
#11 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#12 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#13 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(660): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#14 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(635): Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route), Object(Illuminate\\Http\\Request))
#15 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(601): Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request), Object(Illuminate\\Routing\\Route))
#16 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(590): Illuminate\\Routing\\Router->dispatchToRoute(Object(Illuminate\\Http\\Request))
#17 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\\Routing\\Router->dispatch(Object(Illuminate\\Http\\Request))
#18 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
#19 /var/lib/jenkins/workspace/sxwk-web-server/app/Http/Middleware/ApiResponse.php(21): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#20 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): App\\Http\\Middleware\\ApiResponse->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#21 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#22 /var/lib/jenkins/workspace/sxwk-web-server/vendor/fideloper/proxy/src/TrustProxies.php(56): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#23 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Fideloper\\Proxy\\TrustProxies->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#24 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#25 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#26 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#27 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#28 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#29 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#30 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#31 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#32 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#33 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#34 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#35 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#36 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#37 /var/lib/jenkins/workspace/sxwk-web-server/vendor/itsgoingd/clockwork/Clockwork/Support/Laravel/ClockworkMiddleware.php(28): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#38 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Clockwork\\Support\\Laravel\\ClockworkMiddleware->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#39 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#40 /var/lib/jenkins/workspace/sxwk-web-server/vendor/barryvdh/laravel-cors/src/HandlePreflight.php(35): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#41 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(149): Barryvdh\\Cors\\HandlePreflight->handle(Object(Illuminate\\Http\\Request), Object(Closure))
#42 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
#43 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
#44 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
#45 /var/lib/jenkins/workspace/sxwk-web-server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter(Object(Illuminate\\Http\\Request))
#46 /var/lib/jenkins/workspace/sxwk-web-server/public/index.php(55): Illuminate\\Foundation\\Http\\Kernel->handle(Object(Illuminate\\Http\\Request))
#47 {main}
"}

应该是如下控制器的42行的构造器应该接受一个array作为参数而实际上传了一个collection类的实例

class OpenPlatformController extends Controller
{
    /**
     * Register for open platform.
     *
     * @param \EasyWeChat\OpenPlatform\Application $application
     *
     * @return \Symfony\Component\HttpFoundation\Response
     */
    public function __invoke(Application $application)
    {
        $server = $application->server;

        $server->on(Guard::EVENT_AUTHORIZED, function ($payload) {
            Event::fire(new Events\Authorized($payload));
        });
        $server->on(Guard::EVENT_UNAUTHORIZED, function ($payload) {
            Event::fire(new Events\Unauthorized($payload));
        });
        $server->on(Guard::EVENT_UPDATE_AUTHORIZED, function ($payload) {
            Event::fire(new Events\UpdateAuthorized($payload));
        });
        $server->on(Guard::EVENT_COMPONENT_VERIFY_TICKET, function ($payload) {
//  这一行 >>>            Event::fire(new Events\VerifyTicketRefreshed($payload));
        });

        return $server->serve();
    }
}

抽象类的构造函数

abstract class OpenPlatformEvent
{
    /**
     * @var array
     */
    public $payload;

    /**
     * Create a new event instance.
     *
     * @param array $payload
     */
    public function __construct(array $payload)
    {
        $this->payload = $payload;
    }

    public function __call($name, $args)
    {
        return $this->payload[substr($name, 3)] ?? null;
    }
}

由于这个不太方便调试, 由log判断似乎是这个问题

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions