Laravel-wechat使用Oauth的时候,提示Scope参数错误或者没有scope权限

公众号是认证服务号,网页登陆配置的回调页面地址为:www.h-p-x.com。跟着教程,操作了好几遍了还是不行,Google了没找到成功的解决方案,有没有遇到同样问题的呢?

.env文件

WECHAT_OAUTH_SCOPES=snsapi_userinfo
WECHAT_OAUTH_CALLBACK=www.h-p-x.com<br></br>

wechat.php配置文件

'wechat_oauth_scopes' => env('WECHAT_OAUTH_SCOPES','your-scopes'),
'wechat_oauth_callback' => env('WECHAT_OAUTH_CALLBACK','your-callback'),<br></br>

route路由文件

Route::group(['middleware' => ['web', 'wechat.oauth']], function () {
    Route::get('/user', function () {
       $user = session('wechat.oauth_user'); // 拿到授权用户资料
       return view('user',compact('user'));
    });
});<br></br>

wechat日记文件

[2016-04-19 22:54:30] easywechat.DEBUG: Current configuration: {"debug":true,"use_laravel_cache":true,"app_id":"wxa2a186a68def0e2c","secret":"5aae87659bae4d59f397b934eb607e0d","token":"wechat","aes_key":"Z1klgyrJGpxLfuc4PS2RR9E55p9kqJWMrYyGSFPY5FV","log":{"level":"debug","file":"/var/www/wechat_riguo/storage/logs/wechat.log"},"wecaht_oauth_scopes":"snsapi_userinfo","wechat_oauth_callback":"www.h-p-x.com"} []
[2016-04-19 22:54:30] easywechat.DEBUG: Request received: {"Method":"POST","URI":"/wechat?signature=8616325fed9505145212c6adb03cf6563f04f820&timestamp=1461077669&nonce=1084037041","Query":"nonce=1084037041&signature=8616325fed9505145212c6adb03cf6563f04f820&timestamp=1461077669","Protocal":"HTTP/1.0","Content":"<xml><ToUserName><![CDATA[gh_55bca6c8addb]]></ToUserName>\n<FromUserName><![CDATA[o7-jmwSIG1S37CM7v9JTQtUmKM1Y]]></FromUserName>\n<CreateTime>1461077669</CreateTime>\n<MsgType><![CDATA[event]]></MsgType>\n<Event><![CDATA[VIEW]]></Event>\n<EventKey><![CDATA[http://h-p-x.com/user]]></EventKey>\n<MenuId>403324681</MenuId>\n</xml>"} []
[2016-04-19 22:54:30] easywechat.DEBUG: Message detail: {"ToUserName":"gh_55bca6c8addb","FromUserName":"o7-jmwSIG1S37CM7v9JTQtUmKM1Y","CreateTime":"1461077669","MsgType":"event","Event":"VIEW","EventKey":"http://h-p-x.com/user","MenuId":"403324681"} []
[2016-04-19 22:54:30] easywechat.DEBUG: Server response created: {"response":"success"} []
[2016-04-19 22:54:30] easywechat.DEBUG: Current configuration: {"debug":true,"use_laravel_cache":true,"app_id":"wxa2a186a68def0e2c","secret":"5aae87659bae4d59f397b934eb607e0d","token":"wechat","aes_key":"Z1klgyrJGpxLfuc4PS2RR9E55p9kqJWMrYyGSFPY5FV","log":{"level":"debug","file":"/var/www/wechat_riguo/storage/logs/wechat.log"},"wecaht_oauth_scopes":"snsapi_userinfo","wechat_oauth_callback":"www.h-p-x.com"} []<br></br>
JellyBool

你之前是做过什么配置么,现在的代码在服务器是最新的么?感觉现在的scope是snsapi_login啊:

https://open.weixin.qq.com/connect/qrconnect?appid=wxa2a186a68def0e2c&redirect_uri=http%3A%2F%2Fwww.h-p-x.com%2Fuser&response_type=code&scope=snsapi_login&state=a99f05c5dc32ddc453ccb0f17829ca9faf59ecf3#wechat_redirect

尝试清除所有的框架缓存试试,保证代码是最新的(到服务器看看)等

zhiqueen

@JellyBool 新建的项目,就在env和wechat.php配置了微信公众账号的一些参数,没有设置过snsapi_login。

WECHAT_APPID
WECHAT_SECRET
WECHAT_TOKEN
WECHAT_AES_KEY

WECHAT_OAUTH_SCOPES
WECHAT_OAUTH_CALLBACK

清除过缓存,代码是最新的,到服务器看没有出现代码不同步。

JellyBool

好吧,你可以尝试直接浏览器访问 www.h-p-x.com/user 你可以看到挑战之后的scope是不对的。

zhiqueen

@JellyBool 恩,跟你的不一样的!好奇怪!

安正超

@JellyBool @zhiqueen 可能原因是scopes配置的问题。其实我的包的默认配置是这样的:

 'oauth' => [
        'scopes'   => array_map('trim', explode(',', env('WECHAT_OAUTH_SCOPES', 'snsapi_userinfo'))),
         'callback' => env('WECHAT_OAUTH_CALLBACK', '/examples/oauth_callback.php'),
  ],

这样就确保了 scopes 永远是一个数组,不过刚才我升级了版本,在中间件里做了兼容处理。所以升级也能解决问题。 😄

zhiqueen

@安正超 恩恩,后来jelly帮我配置了,我对比了一下差异,应该是scope配置,还有回调页面的问题,回调页面应该写成Route:any路由里的url

YiYang

@zhiqueen 如果需要做支付,而且要接收支付后微信的回调请求,记得在VerifyCsrfToken.php里面把回调的uri忽略掉,不然post请求就tokendismatch了。

zhiqueen

@YiYang 谢谢提醒,我还没接触到支付,到时候我留意一下,如果还有不懂,再向你请教哈。

wei_will_win

@zhiqueen 请问你是如何解决这个问题的呢??我也遇到了这个问题。

zhiqueen

@wei_will_win 在.env文件配置
WECHAT_OAUTH_SCOPES=snsapi_userinfo
//下面一行写微信公众平台上开发者配置的URL
WECHAT_OAUTH_CALLBACK=http://www.yuming.com/wechat
然后修改wechat.php,去掉注释
’oauth’ => [
‘scopes’ => array_map(‘trim’, explode(’,’, env(‘WECHAT_OAUTH_SCOPES’, ‘snsapi_userinfo’))),
‘callback’ => env(‘WECHAT_OAUTH_CALLBACK’, ‘/examples/oauth_callback.php’),
],

zhiqueen

@wei_will_win 超哥说更新了版本,貌似解决了问题,不过我没有试,你可以试试。

wei_will_win

@zhiqueen 谢谢啦,原来跟我的问题不一样,不过我已经解决了,谢谢你的回答

py110

楼上的各位,你们怎么解决的,我也碰到这个问题,折腾的好久呀,能贴出相关说明吗