https://laravel-china.org/topics/2451/laravel51-implementation-of-the-third-party-login-authentication-tutorial-wechat-login
前言
近期开发了 PHPHub 的网站应用微信登录,因此编写此文记录开发的过程,希望能帮助到有同样需求的同学。
文章概览
- 准备工作;
- 集成 Package;
- 代码调用。
接下来是详细解说。
准备工作
首先到微信开放平台申请相关的 网站应用
,用以获取接口所需的 AppID 和 AppSecret。
一般来说需要花费 3 – 5 个工作日。
集成 Package
我们使用 laravel/socialite 扩展包来进行 OAuth 认证,它提供了完整且上手毫无难度的 OAuth 解决方案。
在此基础上使用其 Driver 扩展 socialiteProviders/weixin 来完成微信的 OAuth 认证流程。
1. 安装 laravel/socialite
如果你已经安装过此 Package,则可以跳过此步骤。
1). 直接运行以下命令安装扩展包
composer require laravel/socialite
2). 在你的 config/app.php
文件中添加以下配置信息
'providers' => [
...
// 注意:下文中要集成 Socialite Driver 扩展,因此将会删除此行配置。
Laravel\Socialite\SocialiteServiceProvider::class,
],
'aliases' => [
...
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
],
2. 安装 socialiteProviders/weixin
1). 直接运行以下命令安装扩展包
composer require socialiteproviders/weixin
2). 在你的 config/app.php
文件中添加以下配置信息
'providers' => [
...
# 注意:如果你之前已经安装了 laravel/socialite,则务必删除掉下面的配置
// 删除这行配置 Laravel\Socialite\SocialiteServiceProvider::class,
# 新增配置
\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=你的回调地址
# 例如
WEIXIN_KEY=wxba52fab0726b9023
WEIXIN_SECRET=xxxxxxxxxxxxxxxxxx
WEIXIN_REDIRECT_URI=https://laravel-china.org/auth/callback?driver=wechat
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('/auth/oauth', 'Auth\AuthController@oauth');
# 微信接口回调地址
Route::get('/auth/callback', 'Auth\AuthController@callback');
2). 在你的 app/Http/Controllers/Auth/AuthController.php
文件里添加以下方法
# 用户点击微信登录按钮后,调用此方法请求微信接口
public function oauth(Request $request)
{
return \Socialite::with('weixin')->redirect();
}
# 微信的回调地址
public function callback(Request $request)
{
$oauthUser = \Socialite::with('weixin')->user();
// 在这里可以获取到用户在微信的资料
dd($oauthUser);
// 接下来处理相关的业务逻辑
...
}
下图是打印 oauthUser
的结果,供大家参考
至此,已经能获取到用户的微信资料了,接下来你们就可以根据此数据处理自己的相关业务逻辑了。
在这里值得一提的是,我们通过微信的 unionid 来记录用户的信息,而不是 openid。因为针对一个微信开放平台帐号下的应用,同一用户的 unionid 是相同的,这样方便我们以后做多站点的用户数据统一。
附录
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/113045.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...