PHP使用EsayWeChat进行微信网页或小程序授权登录

该博客详细介绍了如何使用EasyWeChat SDK实现微信公众号和小程序的用户授权登录流程。通过前端传递code,后端获取access_token和用户信息,创建或更新用户数据,并生成JWT Token。同时提供了解密小程序加密数据的步骤。
摘要由CSDN通过智能技术生成

详情请查看EasyWeChat手册
首先下载SDK(这里是使用composer下载的4.0)

composer require overtrue/wechat:~4.0 -vvv

你还可以去文档中查看在框架中使用这一章节,就是一些拓展,其实就是下载一个配置文件,这一步不是必要的,但这样显得规范一点。

一般的操作是前端传code,后台拿code去请求用户信息

微信公众号登录

/**
     * @param $code
     * @return \think\response\Json
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * 微信用户授权登录
     */
    public function userAuth($code)
    {
        $config = [
            //用户授权配置
            'app_id' => 'appID',
            'secret' => '秘钥',
            // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
            'response_type' => 'array',
        ];//如果下载了拓展包这里就不用配置了

        $app = Factory::officialAccount($config);

        $token = $app->oauth->getAccessToken($code);//获取token
        $user = $app->user->get($token['openid']);//获取用户信息

//这里就已经获取到用户信息了,以下是个人操作,可根据自己的业务进行操作。

        $data['username'] = $user['openid'];
        if (!(empty($user['nickname']))) {
            $data['nickname'] = $user['nickname'];
        } else {
            $data['nickname'] = '忆念'.str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
        }
        //
        if (!empty($user['sex'])) {
            $data['sex'] = $user['sex'];
        } else {
            $data['sex'] = 1;
        }
        //
        if (!empty($user['headingurl'])) {
            $data['avatar'] = $user['headingurl'];
        } else {
            $data['avatar'] = 'uploads/images/20210325\9cc6af08604995ca6cc193267a2bca1.jpg';
        }

        //查看是否为新用户
        if (!(AuthModel::where('username', '=', $user['openid'])->find())) {
            AuthModel::create($data);
        }


        //生成token
        $key = "token";
        $token = [
            "iat" => time(),//签发时间
            "exp" => time()+3600*24*7,//token过期时间
            "username" => $data['username']
        ];
        $jwt =JWT::encode($token, $key, 'HS256');//生成参数

        return success([
            'token' => $jwt,
        ]);
    }

小程序登录

/**
     * @param $code
     * @return \think\response\Json
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidConfigException
     * 微信用户授权登录
     */
    public function userAuth()
    {

		//下面的参数都是前端传过来的
        $code = $this->request->param('code');//前端传过来的code
        $nickname = $this->request->param('nickname');
        $avatar = $this->request->param('avatar');
        $iv = $this->request->param('iv');
        $encryptedData = $this->request->param('encryptedData');

        $config = [
            //用户授权配置
            'app_id' => 'appID',
            'secret' => '秘钥',
            // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
            'response_type' => 'array',
        ];

        $app = Factory::miniProgram($config);

        $user = $app->auth->session($code);//获取openID

        $decryptedData = $app->encryptor->decryptData($user['session_key'], $iv, $encryptedData);//解密电话

//以下是个人操作,可根据自己的业务逻辑进行操作
        
        $data = [
            'openid' => $user['openid'],
            'nickname' => $nickname,
            'avatar' => $avatar,
            'phone' => $decryptedData['phoneNumber']
        ];

        //查看是否为新用户
        if (!(UserModel::where('openid', '=', $user['openid'])->find())) {
            UserModel::create($data);
        }


        //生成token
        $key = "token";
        $token = [
            "iat" => time(),//签发时间
            "exp" => time()+3600*24*7,//token过期时间
            "openid" => $data['openid']
        ];
        $jwt =JWT::encode($token, $key, 'HS256');//生成参数

        return success([
            'token' => $jwt,
        ]);
    }

(做的笔记,自己看的)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值