一、背景
本篇介绍微信公众号获取用户基本信息的配置步骤。
项目使用 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();
});
});