Laravel 是一套简洁、优雅的PHP Web开发框架。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
授权流程说明
1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

在框架中实现(laravel)
Laravel Socialite简介
除了传统的基于表单的登录认证外,Laravel 还可以通过Laravel Socialite 提供 OAuth 认证,目前支持的认证驱动包括 Facebook、Twitter、Google、LinkedIn、GitHub 和 Bitbucket。
安装相关依赖
composer require laravel/socialite
安装weixin-web
composer require socialiteproviders/weixin-web
注意网站实现微信登录需要的依赖包为socialiteproviders/weixin-web,如果是手机端App那么可以用socialiteproviders/weixin。
shanlei@shanlei-Lenovo-ideapad-110-15ISK:/var/www/html/zslm_back$ composer search socialiteproviders/weixin socialiteproviders/weixin Weixin OAuth3 Provider for Laravel Socialite socialiteproviders/weixin-web Weixin-Web OAuth3 Provider for Laravel Socialite socialiteproviders/weixin-web Weixin-Web OAuth3 Provider for Laravel Socialite socialiteproviders/weixin Weixin OAuth3 Provider for Laravel Socialite
相关配置
1. 设置app/config.php
添加providers:
'providers' => [ SocialiteProviders\Manager\ServiceProvider::class, ],
添加aliases:
'aliases' => [ 'Socialite' => Laravel\Socialite\Facades\Socialite::class, ],
2. 配置config/services.php
'weixinweb' => [
'client_id' => env('WEIXIN_KEY'),
'client_secret' => env('WEIXIN_SECRET'),
'redirect' => env('WEIXIN_REDIRECT_URI'),
],3. 设置app/Providers/EventServiceProvider.php
添加事件监听
use SocialiteProviders\Manager\SocialiteWasCalled; protected $listen = [ 'SocialiteProviders\Manager\SocialiteWasCalled' => [ 'SocialiteProviders\WeixinWeb\WeixinWebExtendSocialite@handle', ], ];
4. 添加路由
Route::get('auth/weixin', 'Auto\ThirdLogin\WeixinController@redirectToProvider');
Route::get('auth/weixin/callback','Auto\ThirdLogin\WeixinController@handleProviderCallback');5. 编写WeixinController
redirect();
}
public function handleProviderCallback(Request $request)
{
$user_data = Socialite::with('weixinweb')->stateless()->user();
dd($user_data);
}
}访问auth/weixin,获得返回数据。

常见错误
1. 微信授权回调域不符(redirect_uri不符),参见下面规范:

2. 执行过程中出现一下错误:
exception 'Laravel\Socialite\Two\InvalidStateException'
in /example/vendor/laravel/socialite/src/Two/AbstractProvider.php:161
解决:
通过stateless()方法禁止会话状态验证
Socialite::driver('weixinweb')->stateless()->user()
上一篇:PHP实现简易计算器功能的方法
下一篇:PHP实现简单计算器小程序的示例