微信网页授权 获取用户信息

复制代码
<?php
namespace WeChat\Controller;
use Think\Controller;

class BaseController extends Controller
{
    protected $user_id;

    protected function _initialize(){

        if(empty($_SESSION['user']['id']))
        {
            $code = $_GET['code'];
            if($code){
                $url = "https://api.weixin.qq.com/sns/oauth2/access_token";
            
                $data['appid'] = C('WX_APPID');
                $data['secret'] = C('WX_SECRET');
                $data['code'] = $code;
                $data['grant_type'] = "authorization_code";
                
                $httpstr = http($url, $data, 'GET');
                $steam=json_decode($httpstr);
                $_SESSION['user']['openid'] = $steam->openid;
                $_SESSION['user']['token'] = $steam->access_token;

                $member_model = D('Member');

                $result = $member_model->where(['openid' => $steam->openid])->find();
                
                if(!$result){

                    $member_data = get_wechat_user_info($steam->access_token, $steam->openid);
                    if($member_data->errcode)
                    {
                        echo '用户信息错误,请重新加载';return;
                    }else{
                        $add_wechat_member = $member_model->add([
                            'openid' => $member_data->openid,
                            'user_name' => $member_data->nickname,
                            'sex' => $member_data->sex,
                            'create_time' => time(),
                            'headimgurl' => $member_data->headimgurl
                        ]);

                        $_SESSION['user']['openid'] = $member_data->openid;
                        $_SESSION['user']['id'] = $this->user_id = $add_wechat_member;
                        $_SESSION['user']['user_name'] = $member_data->nickname;
                        $_SESSION['user']['sex'] = $member_data->sex;
                        $_SESSION['user']['headimgurl'] = $member_data->headimgurl;
                        $_SESSION['user']['time'] = time();
                    }
                }else{

                    $_SESSION['user']['openid'] = $result['openid'];
                    $_SESSION['user']['id'] = $this->user_id = $result['id'];
                    $_SESSION['user']['user_name'] = $result['user_name'];
                    $_SESSION['user']['sex'] = $result['sex'];
                    $_SESSION['user']['headimgurl'] = $result['headimgurl'];
                    $_SESSION['user']['time'] = time();
                }

            }else{
                $appid = C('WX_APPID');
                $redirect_uri = "http://pttest.itsumy.com".$_SERVER['REQUEST_URI'];
                $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
                header("Location:".$url);
            }
        }
    }
}
复制代码

 

posted @   不一样的开始  阅读(429)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示