前端在授权微信登录时需要获取用户的微信信息,比如 openId ,头像等信息.
微信网页授权文档 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842
前端在获取 code 后需要将 code 返回给开发者的服务器,开发者的服务器通过前端返回的 code 去微信服务器换取 access_token ,然后开发者服务器利用 access_token 和用户的 openid 拿到用户信息.
socialiteproviders 为 Laravel Socialite 提供了更多的第三方登录方式,基本上你需要的,都能在这里找到.
我们可以利用 微信的 Provider 实现我们的需求.
1. 安装微信 Provider
composer require socialiteproviders/weixin
2. 配置
app/Providers/EventServiceProvider.php
.
.
protected $listen = [
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
// add your listeners (aka providers) here
'SocialiteProviders\Weixin\WeixinExtendSocialite@handle'
],
];
.
.
config/services.php
'weixin' => [
'client_id' => env('WEIXIN_KEY'),
'client_secret' => env('WEIXIN_SECRET'),
'redirect' => env('WEIXIN_REDIRECT_URI')
],
.env
# 微信
WEIXIN_KEY=wxbde46abaa8d3xx
WEIXIN_SECRET=ae0059ed19c9367xxxx
WEIXIN_REDIRECT_URI=http://larxxx
3.使用示例
3.1 通过 code 获取微信用户信息
# 测试路由
Route::get('test', function () {
$code = '081euRI705A3iF1MmoF70TNQI70euRIt';
$driver = Socialite::driver('weixin');
$response = $driver->getAccessTokenResponse($code);
$driver->setOpenId($response['openid']);
$oauthUser = $driver->userFromToken($response['access_token']);
dd($oauthUser);
});
3.2 通过 access_token 和 open_id 获取微信用户信息
这种方法时不建议使用.
$accessToken = 'ACCESS_TOKEN';
$openID = 'OPEN_ID';
$driver = Socialite::driver('weixin');
$driver->setOpenId($openID);
$oauthUser = $driver->userFromToken($accessToken);