PHPackages                             kinsolee/wechat-qrcode-login-lumen - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Authentication &amp; Authorization](/categories/authentication)
4. /
5. kinsolee/wechat-qrcode-login-lumen

ActiveLibrary[Authentication &amp; Authorization](/categories/authentication)

kinsolee/wechat-qrcode-login-lumen
==================================

wechat,login,qrcode,lumen

0836PHP

Since Jul 17Pushed 7y ago2 watchersCompare

[ Source](https://github.com/kinsolee/wechat-qrcode-login-lumen)[ Packagist](https://packagist.org/packages/kinsolee/wechat-qrcode-login-lumen)[ RSS](/packages/kinsolee-wechat-qrcode-login-lumen/feed)WikiDiscussions master Synced yesterday

READMEChangelogDependenciesVersions (1)Used By (0)

wechat-qrcode-login-lumen
=========================

[](#wechat-qrcode-login-lumen)

功能
--

[](#功能)

微信扫码登录模块 使用微信场景值二维码，扫码关注事件实现，采用jwt进行鉴权

安装&amp;使用
---------

[](#安装使用)

1. 项目引入composer包 `composer require kinsolee/wechat-qrcode-login-lumen`
2. 新建类实现`QrcodeLoginHandlerInterface`接口， 例：

```
namespace App\Concretes;

use App\Models\User;
use Forchange\Wechat\QrcodeLogin\QrcodeLoginHandlerInterface;

class QrcodeLoginHandler implements QrcodeLoginHandlerInterface
{

    /**
     * 用户扫码后执行的操作
     * @param $wx_info
     * @return mixed
     */
    public function scanned($wx_info)
    {
        if (isset($wx_info['headimgurl']) && $wx_info['headimgurl'])
            $wx_info['headimgurl'] = str_replace('http://', 'https://', $wx_info['headimgurl']);

        User::updateOrCreate([
            'unionid' => $wx_info['unionid'],
        ], $wx_info);
    }

    /**
     * 添加jwt payload的数据
     * @param $wx_info
     * @return array
     */
    public function generateJwtPayload($wx_info)
    {
        $user = User::where(['unionid' => $wx_info['unionid']])->first();
        return [
            'id'  => $user->id,
            'oid' => $wx_info['openid'],
            'sub' => $wx_info['unionid']
        ];
    }
    public function statusDataAppend($wx_info)
    {
        return [
            'domain' => env('DOMAIN', 'wx.pandateacher.com'),
            'path'   => '/'
        ];
    }
}
```

3. 在wechat配置文件加入`qrcode_login_handler`配置，指定实现`QrcodeLoginHandlerInterface`的类
4. 在触发‘事件消息‘的event类实现`GuardAccessible`接口`getGuard`方法，返回guard对象。
5. 在`EventServiceProvider`里加入`Forchange\Wechat\QrcodeLogin\Listeners\PersistWxInfo::class`来指定步骤4中监听event的listener。
6. 注册路由，路由地址可以自定义：

```
$router->group(['namespace' => '\Forchange\Wechat\QrcodeLogin\Controllers'], function ($router) {
    $router->get('user/login-wechat-qrcode', 'QrcodeLoginController@create');
    $router->get('user/login-wechat-qrcode-status', 'QrcodeLoginController@status');
});
```

接口返回说明： QrcodeLoginController@create返回字段：

字段名说明errcode错误代码data.qrcode\_id二维码IDdata.qrcode\_url二维码urldata.timeout超时时间示例：

```
{
    "errcode":0,
    "data":{
        "qrcode_id":"19e67c69-be5e-4f94-8648-fcd493a4bdc7",
        "qrcode_url":"https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQEy8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxLmNvbS9xLzAybmQtTXNJU1E5c1UxWXdBWGhxMU4AAgRs4-taAwS0AAAA",
        "timeout":180
    }
}
```

QrcodeLoginController@status返回字段：

字段名说明errcode错误代码，data状态数据data.jwt生成的jwterrmsg错误信息> data里如需添加更多字段，可以实现QrcodeLoginHandlerInterface::statusDataAppend

示例：

```
{
    "errcode":0,
    "data":{
        "jwt":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NSwib2lkIjoibzhrVUlzNnllT0RYb0N5RW5YREtpVU9VTE5TVSIsInN1YiI6Im84NkM5c3lHaTRKWmVQUHBfbXdQSU90b2R2d2siLCJhcHAiOiJmZWF0dXJlX3BhbmRhY2xhc3NfYWJjIiwiZXhwIjoxNTI5MDMxMzE4LCJ2ZXIiOiJub2RlIn0.CajzV7hrRS_JlAfEsOK1mmU7OzHX864Y2Ylr1QVxYtQ",
        "domain":"/localhost",
        "path":"/"
    },
    "errmsg":"ok"
}
```

###  Health Score

22

—

LowBetter than 22% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity14

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity40

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/fc4a756f01552bfd88f327fdbfbb23716bdbd80fba7f0e106b4fe0f10bb499f6?d=identicon)[KinsoLee](/maintainers/KinsoLee)

### Embed Badge

![Health badge](/badges/kinsolee-wechat-qrcode-login-lumen/health.svg)

```
[![Health](https://phpackages.com/badges/kinsolee-wechat-qrcode-login-lumen/health.svg)](https://phpackages.com/packages/kinsolee-wechat-qrcode-login-lumen)
```

###  Alternatives

[namshi/jose

JSON Object Signing and Encryption library for PHP.

1.8k99.6M101](/packages/namshi-jose)[league/oauth1-client

OAuth 1.0 Client Library

99698.8M106](/packages/league-oauth1-client)[bezhansalleh/filament-shield

Filament support for `spatie/laravel-permission`.

2.8k2.9M88](/packages/bezhansalleh-filament-shield)[gesdinet/jwt-refresh-token-bundle

Implements a refresh token system over Json Web Tokens in Symfony

70516.4M35](/packages/gesdinet-jwt-refresh-token-bundle)[league/oauth2-google

Google OAuth 2.0 Client Provider for The PHP League OAuth2-Client

41721.2M118](/packages/league-oauth2-google)[illuminate/auth

The Illuminate Auth package.

9327.3M1.0k](/packages/illuminate-auth)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
