Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Class wechat.official_account.snsapi_userinfo does not exist #365

Closed
new0hand opened this issue Mar 21, 2020 · 2 comments
Closed

Class wechat.official_account.snsapi_userinfo does not exist #365

new0hand opened this issue Mar 21, 2020 · 2 comments

Comments

@new0hand
Copy link

new0hand commented Mar 21, 2020

今天升级了laravel框架到5.8,尝试升级laravel-wechat到5.0,结果报错:

[2020-03-21 20:30:07] local.ERROR: Class wechat.official_account.snsapi_base does not exist {"exception":"[object] (ReflectionException(code: -1): Class wechat.official_account.snsapi_base does not exist at /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Container/Container.php:788)
[stacktrace]
#0 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Container/Container.php(788): ReflectionClass->__construct('wechat.official...')
#1 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Container/Container.php(667): Illuminate\Container\Container->build('wechat.official...')
#2 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Container/Container.php(615): Illuminate\Container\Container->resolve('wechat.official...', Array)
#3 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(767): Illuminate\Container\Container->make('wechat.official...', Array)
#4 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php(121): Illuminate\Foundation\Application->make('wechat.official...', Array)
#5 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/overtrue/laravel-wechat/src/Middleware/OAuthAuthenticate.php(42): app('wechat.official...')
#6 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Overtrue\LaravelWeChat\Middleware\OAuthAuthenticate->handle(Object(Illuminate\Http\Request), Object(Closure), 'snsapi_base')
#7 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#8 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#9 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#10 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#11 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#12 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#13 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#14 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#15 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#16 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#17 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#18 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#19 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#20 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#21 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#22 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#23 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#24 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#25 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(657): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#26 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(623): Illuminate\Routing\Router->runRoute(Object(Illuminate\Http\Request), Object(Illuminate\Routing\Route))
#27 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Router.php(612): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#28 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#29 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#30 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/app/Http/Middleware/Cors.php(19): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#31 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): App\Http\Middleware\Cors->handle(Object(Illuminate\Http\Request), Object(Closure))
#32 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#33 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/fideloper/proxy/src/TrustProxies.php(57): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#34 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Fideloper\Proxy\TrustProxies->handle(Object(Illuminate\Http\Request), Object(Closure))
#35 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#36 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#37 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#38 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#39 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#40 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#41 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#42 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#43 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#44 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#45 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#46 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#47 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#48 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#49 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#50 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#51 /Users/zhuhaofu/Develop/PHP/coach_wechat_server/public/index.php(55): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#52 {main}
"}

确定已经正确安装了扩展,web.php配置如下:
Route::group(['middleware' => ['wechat.oauth:snsapi_userinfo']], function () {
Route::get('/user', function () {
$user = session('wechat.oauth_user.default'); // 拿到授权用户资料
});
});

中间件使用wechat.oauth可以,但是静默授权只能拿到openid
设置为wechat.oauth:snsapi_userinfo、wechat.oauth:snsapi_base、wechat.oauth:default就报Class wechat.official_account.snsapi_userinfo does not exist

@hugomrchau
Copy link

hugomrchau commented May 28, 2020

我也遇上同樣問題,翻查 overtrue/laravel-wechat/src/Middleware/OAuthenticate.php:

public function handle($request, Closure $next, $account = 'default', $scope = null, $type = 'service')
    {
        $isNewSession = false;
        //保证兼容性
        $class = ('work' !== $type) ? 'wechat' : 'work';
        $prefix = ('work' !== $type) ? 'official_account' : 'work';
        $sessionKey = \sprintf($class.'.oauth_user.%s', $account);
        $config = config(\sprintf('wechat.'.$prefix.'.%s', $account), []);
        $officialAccount = app(\sprintf('wechat.'.$prefix.'.%s', $account));
        $scope = $scope ?: Arr::get($config, 'oauth.scopes', ['snsapi_base']);
}

發現 Route::group(['middleware' => ['wechat.oauth:snsapi_userinfo']], function () {} 是指定$account=snsapi_userinfo, $scope是 null 即預設的snsapi_base
需改為Route::group(['middleware' => ['wechat.oauth:default,snsapi_userinfo']], function () {}便可正常指定$scope, README可能需要更改一下

@anyforever
Copy link

中间件需要这样用了
Route::group(['middleware' => ['wechat.oauth:default,snsapi_userinfo']]
与以前版本不一样了
再有就是base请求过,session里有记录,不再重新发起userinfo授权了。。一直拿不到有unionid,你把session清了再重新请求授权。
issues里看到好几条说这个问题的。
#357
#289

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants