请先阅读 2021年2月份 最新有关调整。《小程序登录、用户信息相关接口调整说明》
安装依赖
1 | composer require overtrue/wechat:~4.0 |
获取用户信息我们需要通过 button 拿到 iv
、encryptedData
,而则两个却是密文的,我们需要通过 wx.login 拿到 code
去兑换到 session_key
来做一个解密。
2020.03.30 更新:
之前由于为了方便整合成了一个接口,即 iv
、encryptedData
、code
通过一个接口传过来然后兑换到 session_key
在去解密其他,这个过程中会有低概率遇到解密失败,错误信息 The given payload is invalid.
。
为了避免这个错误我们需要分成两个接口,第一个接口实现通过 code
兑换到 session_key
和 openid
,下发一个临时鉴权令牌来识别身份。第二个接口需要加入路由中间价鉴权,对临时令牌进行验证后通过 iv
、encryptedData
和前面接口拿到的 session_key
进行解密,然后保存用户信息到数据库,同时下发正式鉴权令牌。为了避免复杂性这边不区分临时和正式鉴权令牌。
数据库设计
database\migrations\2014_10_12_000000_create_users_table.php
1 | <?php |
鉴权控制器
app\Http\Controllers\AuthController.php
1 | <?php |
辅助函数
app\helpers.php
1 | <?php |
辅助函数自动加载
composer.json
1 | "autoload": { |
1 | composer du |
鉴权中间件
app\Http\Middleware\WechatMiddleware.php
1 | <?php |
中间件注册
app\Http\Kernel.php
1 | protected $routeMiddleware = [ |
路由
routes\web.php
1 | Route::post('auth/code', 'AuthController@code'); |
POST 请求会触发 CSRF
验证,这里把它关了
app\Http\Middleware\VerifyCsrfToken.php
1 | protected $except = [ |
小程序示例
index.wxml
1 | <view class="container"> |
index.js
1 | Page({ |