kinsolee / wechat-qrcode-login-lumen by KinsoLee

wechat,login,qrcode,lumen
836
0
3
Package Data
Maintainer Username: KinsoLee
Maintainer Contact: kinso@kinso.in (kinso)
Package Create Date: 2018-05-17
Package Last Update: 2018-07-17
Language: PHP
License: Unknown
Last Refreshed: 2024-05-03 15:16:01
Package Statistics
Total Downloads: 836
Monthly Downloads: 0
Daily Downloads: 0
Total Stars: 0
Total Watchers: 3
Total Forks: 0
Total Open Issues: 0

wechat-qrcode-login-lumen

功能

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

安装&使用

  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'   => '/'
        ];
    }
}
  1. 在wechat配置文件加入qrcode_login_handler配置,指定实现QrcodeLoginHandlerInterface的类

  2. 在触发‘事件消息‘的event类实现GuardAccessible接口getGuard方法,返回guard对象。

  3. EventServiceProvider里加入Forchange\Wechat\QrcodeLogin\Listeners\PersistWxInfo::class来指定步骤4中监听event的listener。

  4. 注册路由,路由地址可以自定义:

$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|二维码ID| |data.qrcode_url|二维码url| |data.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|生成的jwt| |errmsg|错误信息|

data里如需添加更多字段,可以实现QrcodeLoginHandlerInterface::statusDataAppend

示例:

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