Laravel 微信公众号获取用户授权登录信息

一、背景

本篇介绍微信公众号获取用户基本信息的配置步骤。

项目使用 Laravel5.8 框架,关于微信的使用上,组件使用 easywechat。

 

二、使用

1、进入网站根目录,下载 easywechat 组件

composer require "overtrue/laravel-wechat:~5.0"

 
2、创建 easywechat 组件的配置文件

php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider"

该步会在 /config 下生成一个名为 wechat.php 的文件。

 
3、修改 easywechat 组件的参数(/config/wechat.php)

打开 official_account 中的 default 和 oauth。

 
4、修改 .env文件的配置参数

添加如下代码:

#微信公众号配置
WECHAT_OFFICIAL_ACCOUNT_APPID = wx094e1dki96s46c4a
WECHAT_OFFICIAL_ACCOUNT_SECRET = db60f637df72f0d8b0aikse52ed8c712
WECHAT_OFFICIAL_ACCOUNT_TOKEN = 'haveyb'
WECHAT_OFFICIAL_ACCOUNT_AES_KEY = ''

这里,填写你自己的 APPID 和 SECRET 以及 TOKEN。

注:上一个文件里的参数读的就是这里设置的,当然也可以直接在上一个文件写死,不过并不推荐。

 
5、定义路由,并测试

// 微信公众号测试
Route::group(['middleware' => ['wechat.oauth']], function () {
    Route::get('/user', function () {
        // 拿到授权用户资料
        $user = session('wechat.oauth_user.default');
        dd($user);
    });
});

这里,直接输出获取的用户信息,得到的结果如下:

获取到的数据是一个对象,获取open_id也很简单,直接 $user->id 。

 
6、注意点(如果报错的话,可以尝试看下此步,不报错不用看)

由于laravel的session存储原因,所以可能导致如果中间件中没有添加上 web 中间件,可能会报错,有的报错,有的不报错。

这是因为 web中间件组中有一个session中间件,而我们路由中间件组没有添加session中间件,使得session无法正常存储。

解决方案:

修改路由的中间件组

Route::group(['middleware' => ['web', 'wechat.oauth']], function () {
    Route::get('/user', function () {
        // 拿到授权用户资料
        $user = session('wechat.oauth_user.default');
        echo "<pre>";
        print_r($user);
        exit();
    });
});

注:easywechat官网