企业微信+esaywechat 扫码授权登录

企业微信+esaywechat 扫码授权登录

相关

  1. 这里用的是 Yii2 框架。
  2. 安装easywechat: composer require overtrue/wechat:~4.0 -vvv
  3. wechat官方文档:https://work.weixin.qq.com/api/doc/90000/90135/90988
  4. easywechat官网文档: https://www.easywechat.com/docs/master/wework/oauth

这里主要用了两个方法,一个是扫码登录,另一个是授权。
主要思路是:session不存在,保存当前方法->跳转到扫码(生成二维码)页->用户扫码授权->根据回调参数redirect_uri跳转->记录登录信息->根据session保存的targetUri跳转到原始方法。
代码如下:
扫码登录方法:

/**
     * 扫码登录
     * @param $uri
     * @return bool|string
     */
    public function actionScanLogin(){
        $session = Yii::$app->session;
        if(empty($_SESSION['targetUri'])){
            echo "源uri参数缺失";return;
        }
        $ip    = $_SERVER["REMOTE_ADDR"];
        $state = md5(sprintf("%s&%s%s", time(), $ip, mt_rand(100, 999)));
        $session->set('wechat_state', $state);
        $config = [
            'appid' => Yii::$app->params['wechat']['corp_id'],
            'agent_id' => Yii::$app->params['wechat']['agent_id'],
            'state' => $state,
            'href' => '',
        ];
        return $this->render('scanLogin', $config);
    }

前端页面:

<?php

$host = \Yii::$app->request->hostInfo;
?>
<script src="http://rescdn.qqmail.com/node/ww/wwopenmng/js/sso/wwLogin-1.0.0.js"></script>
<div class="site-login">
    <div id="wxLogin"></div>
</div>

<script>
    window.WwLogin({
        "id" : "wxLogin",
        "appid" : "<?=$appid;?>",
        "agentid" : "<?=$agent_id;?>",
        "redirect_uri" : "<?php echo urlencode($host.'/test/oauth-callback');?>",
        "state" : "<?=$state;?>",
        "href" : '',
    });
</script>

授权回调方法:

/**
     * 授权回调
     * @return string
     */
    public function actionOauthCallback(){
        $session = Yii::$app->session;
        $get = Yii::$app->request->get();

        $config = [
            'corp_id' => Yii::$app->params['wechat']['corp_id'],
            'secret'   => Yii::$app->params['wechat']['secret'], // 应用的 secret
            'agent_id' => Yii::$app->params['wechat']['agent_id'],
        ];
        $app = Factory::work($config);
        $user = $app->oauth->detailed()->user();

        //用户信息
        $username    = $user->getId(); // 对应企业微信英文名(userid)
        $userInfo    = $user->getOriginal(); // 获取企业微信接口返回的原始信息
        $accessToken = $app->oauth->getAccessToken(trim($get['code']))->getToken();

        $_SESSION['wechatUserInfo']    = $userInfo;
        $_SESSION['wechatAccessToken'] = $accessToken;

        $sessionState = $session->get('wechat_state');
        if($sessionState !== trim($get['state'])){
            echo "非法!";exit;
        }
        return $this->redirect($_SESSION['targetUri']);
    }

使用:

/**
     * 使用
     * @return string|\yii\web\Response
     */
    public function actionIndex(){
        if(empty($_SESSION['wechatUserInfo'])) {
            $session->set('targetUri', '/test/index');
            return $this->redirect('/test/scan-login');
        }else{
            return $this->render('index');
        }
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值