微信服务号授权登录

ThinkPhp 发表时间:2018-12-12 10:46:05 作者:梁子亮 浏览次数:1730

1、微信通用的获取openid方法 - 简单版,无需传入$param_string,直接回调后也可以使用I('id')等参数

public function check_openid () {
    // 授权登录
    $weObj = getWechat();
    if ($_GET['code']) {
        $result = $weObj->getOauthAccessToken();
        $openid = $result['openid'];
        $user = M('User')->where(array('openid' => $openid))->find();
        session('user', $user);
    } else {
        $user = session('user');
        if (!$user['openid']) {
            // $url = $weObj->getOauthRedirect('http://'.I('server.HTTP_HOST').I('server.REQUEST_URI'), '', 'snsapi_userinfo'); // 询问授权
            $url = $weObj->getOauthRedirect('http://'.I('server.HTTP_HOST').I('server.REQUEST_URI'), '', 'snsapi_base'); // 静默授权
            redirect($url);
        }
    }
    return $_SESSION['user'];
}

调用方式

$user = $this->check_openid();
$id = I("id"); // 公司的id
$vote_id = I("vote_id");

......

接下来继续写其他逻辑.....

2、微信通用的获取openid方法,且如果是之前关注的用户,数据库没有的话会检查后重新写入数据库,而不再需要重新到微信官网上pull下来

public function check_openid () {
    // 授权登录
    $weObj = $this->wechat?$this->wechat:getWechat();
    if ($_GET['code']) {
        $result = $weObj->getOauthAccessToken();
        $openid = $result['openid'];
        $user = M('User')->where(array('openid' => $openid))->find();
        if ($user) {
            session('user', $user);
        }else{
            // 如果有code都没有user,则是之前关注的旧用户,需要重新写入数据库 - tim
            $info = $weObj->getUserInfo($openid);
            if($info && $info['subscribe'] == 1) {
                // 写入到user表中
                $info['base64_nickname'] = base64_encode($info['nickname']);
                $info['nickname'] = filterEmoji($info['nickname']);
                $return_id = M('User')->add($info);
                $info['id'] = $return_id;
                session('user', $info);
            }
        }
    } else {
        $user = session('user');
        if (!$user['openid']) {
            // $url = $weObj->getOauthRedirect('http://'.I('server.HTTP_HOST').I('server.REQUEST_URI'), '', 'snsapi_userinfo'); // 询问授权
            $url = $weObj->getOauthRedirect('http://'.I('server.HTTP_HOST').I('server.REQUEST_URI'), '', 'snsapi_base'); // 静默授权
            redirect($url);
        }
    }
    /*如果没有关注,则提示去关注 - 业务逻辑,没必要可去除*/
    if ($_SESSION['user']['subscribe'] == 0) {
        // 没有$user表示还未关注,跳到关注提示页面
        redirect('/home/index/concern');
    }
    return $_SESSION['user'];
}


上一篇   js长按事件