目前很多的網站中都會存在很多的交互功能,從而降低用戶的操作難度,特此帶來微信的第三方登錄的項目實戰功能開發。對於本實例中的開發內容,就不在使用原生的內容,而是直接使用別人寫好的封裝的類庫。
1. 安裝 laravel/socialite
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', ],
代碼調用
准備工作都完成以后,現在就到了接口對接階段。
//微信一鍵登錄 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
的結果
如果有想過操作問題,想交流工作問題以及代碼可以加入:647617935