1. 安裝 laravel/socialite
1). 直接執行以下命令安裝擴充套件包
composer require laravel/socialite複製程式碼
2). 在你的 config/app.php
檔案中新增以下配置資訊
'providers' => [
Laravel\Socialite\SocialiteServiceProvider::class,
],
'aliases' => [
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
],複製程式碼
2. 安裝 socialiteProviders/weixin
1). 直接執行以下命令安裝擴充套件包
composer require socialiteproviders/weixin複製程式碼
2). 在你的 config/app.php
檔案中新增以下配置資訊
'providers' => [
\SocialiteProviders\Manager\ServiceProvider::class,
],複製程式碼
3). 在你的 app/Providers/EventServiceProvider.php
檔案中新增以下事件處理器
protected $listen = [
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
'SocialiteProviders\Weixin\WeixinExtendSocialite@handle',
],
];
複製程式碼
3. 新增配置
1). 在你的 .env
檔案中新增以下配置
WEIXIN_KEY=你的AppID
WEIXIN_SECRET=你的AppSecret
WEIXIN_REDIRECT_URI=你的回撥地址
複製程式碼
2). 在你的 config/services.php
檔案中新增以下配置
'weixin' => [
'client_id' => env('WEIXIN_KEY'),
'client_secret' => env('WEIXIN_SECRET'),
'redirect' => env('WEIXIN_REDIRECT_URI'),
# 這一行配置非常重要,必須要寫成這個地址。
'auth_base_uri' => 'https://open.weixin.qq.com/connect/qrconnect',
],複製程式碼
程式碼呼叫
準備工作都完成以後,現在就到了介面對接階段。
1). 新增路由
//微信一鍵登入
Route::get('/weixin', 'WeixinController@weixin')->name('weixin');
Route::get('/weixin/callback', 'WeixinController@weixinlogin');複製程式碼
2). 在你的 app/Http/Controllers/WeixinController.php
檔案裡新增以下方法
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use App\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
class WeixinController extends Controller
{
public function weixin(){
return Socialite::with('weixin')->redirect();
}
public function weixinlogin(){
$user = Socialite::driver('weixin')->user();
// dd($user);
$check = User::where('uid', $user->id)->where('provider', 'qq_connect')->first();
if (!$check) {
$customer = User::create([
'uid' => $user->id,
'provider' => 'qq_connect',
'name' => $user->nickname,
'email' => 'qq_connect+' . $user->id . '@example.com',
'password' => bcrypt(Str::random(60)),
'avatar' => $user->avatar
]);
} else {
$customer = $check;
}
Auth::login($customer, true);
return redirect('/');
}
}
複製程式碼
下圖是列印 oauthUser
的結果