zoukankan      html  css  js  c++  java
  • 微信登录

    前台调用:
     
    后台接口:
    //微信登录
    public function wxlogin(){
    $code = input('code');
    // $code = '021FTdCd1wHSHs0LuWBd1d8jCd1FTdCc';
    if(!empty($code)){
    //获取access_token
    $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appId.'&secret='.$this->appSecret.'&code='.$code.'&grant_type=authorization_code';
     
    $cont = file_get_contents($url);
    $request = json_decode($cont,true);
    if(isset($request['errcode']) || !empty($request['errcode'])){
    print_r($request['errmsg']);die;
    }
    $access_token = $request['access_token'];
    $expires_in = $request['expires_in'];
    $refresh_token = $request['refresh_token'];
    $openid = $request['openid'];
    $unionid = $request['unionid'];
     
    //刷新access_token值
    $url = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid='.$this->appId.'&grant_type=refresh_token&refresh_token='.$refresh_token;
    $cont = file_get_contents($url);
    $request = json_decode($cont,true);
    if(isset($request['errcode']) || !empty($request['errcode'])){
    print_r($request['errmsg']);die;
    }
    // echo '<pre/>';print_r($request);die;
    // 获取用户个人信息(UnionID机制)
    $url = 'https://api.weixin.qq.com/sns/userinfo?access_token='.$request['access_token'].'&openid='.$request['openid'];
     
    $cont = file_get_contents($url);
    $request = json_decode($cont,true);
    if(isset($request['errcode']) || !empty($request['errcode'])){
    print_r($request['errmsg']);die;
    }
     
    //处理用户信息 如果用户已存在就更改,不存在就添加用户
     
    // echo '<pre/>';print_r($request);die;
     
    $userinfo = $this->wxuserinfo($request);
    // echo '<pre/>';print_r($userinfo);die;
    $userinfo = json_decode($userinfo,true);
     
     
     
    if(!empty($userinfo['errcode'])){
    print_r($userinfo['errmsg']);die;
    }else{
    $ural = 'http://mw1950.2om.cn/index.php/index/index';
     
    header('location:'.$ural);
    }
     
     
    return json(['code' => 200, 'msg' => '登录成功' , 'data' =>$userinfo]);
    }else{
    dump('没有拉取到code信息'); die();
    }
    }
     
     
    //微信用户处理
    public function wxuserinfo($canshu){
     
    if(empty($canshu) || empty($canshu['unionid'])){
    return json_encode(['errcode'=>102,'errmsg'=>'参数不能为空']);
    }
     
    $userdb = db('user');
    $user_opendb = db('user_open');
     
    //判断user_open表是否存在用户信息
    $openinfo = $user_opendb->where("unionid='".$canshu['unionid']."' ")->find();
    // echo '<pre/>';print_r($openinfo);die;
    if(!$openinfo || empty($openinfo['userid'])){
     
    $salt = substr(uniqid(rand()), -6); //安全码
    //添加用户
    $rea = [
    'nickname' => $canshu['nickname'],
    'username' => $canshu['nickname'],
    'face' => $canshu['headimgurl'],
    'country' => $canshu['country'],
    'gender' => $canshu['sex'],
    'language' => $canshu['language'],
    'city' => $canshu['city'],
    'province' => $canshu['province'],
    'salt' => $salt,
    'addtime' => time(),
    'lastlogintime' => time()
     
    ];
     
    $userid = $userdb->insertGetId($rea);
    // die;
     
     
    if(!$userid){
    return json_encode(['errcode'=>102,'errmsg'=>'用户注册失败']);
    }
     
     
    //添加user_open信息
    $data = [
    'userid' => $userid,
    'unionid' => $canshu['unionid'],
    'openid' => $canshu['openid'],
    'appid' => $this->appId,
    'opentype' => 'wechat',
    'addtime' => time()
    ];
    // echo '<pre/>';print_r($data);die;
    $openid = $user_opendb->insert($data);
     
    if(!$openid){
    return json_encode(['errcode'=>102,'errmsg'=>'用户注册失败!']);
    }
     
    $userdata = $userdb->where('userid='.$userid.' and del=0')->find();
    if(!$userdata){
    $user_opendb->where('userid='.$userid)->delete();
    return json_encode(['errcode'=>102,'errmsg'=>'用户注册失败重新注册']);
    }
    $userdatas = json_encode($userdata);
    $userids = $userdata['userid'];
     
    session(null, 'api');
    $token=session_id();
     
    Cookie::set('userdata',$userdatas);
    Cookie::set('userid',$userids);
    Cookie::set('token',$token);
     
    return json_encode(['errcode'=>0,'errmsg'=>'SUCCESS','data'=>['__token'=>$token,'userid'=>$userids,'userdata'=>$userdatas]]);
    }else{
     
    $userdata = $userdb->where('userid='.$openinfo['userid'].' and del=0')->find();
    if(!$userdata){
    $user_opendb->where('userid='.$openinfo['userid'])->delete();
    return json_encode(['errcode'=>'102','errmsg'=>'登录信息异常,请重新登录']);
    }
     
    if($userdata['status'] != 1){
    return json_encode(['errcode'=>102,'errmsg'=>'该用户已被禁止登陆']);
    }
     
    $data = array();
    $data['lastlogintime'] = time();
    $data['nickname'] = $canshu['nickname'];
    $data['username'] = $canshu['nickname'];
    $data['face'] = $canshu['headimgurl'];
     
    $userins = $userdb->where('userid='.$userdata['userid'])->update($data);
    if(!$userins){
    return json_encode(['errcode'=>102,'errmsg'=>'用户信息获取失败']);
    }
    $userdatas = json_encode($userdata);
    $userids = $userdata['userid'];
     
    session(null, 'api');
    $token=session_id();
     
    // echo '<pre/>';print_r($token);die;
     
    Cookie::set('userdata',$userdatas);
    Cookie::set('userid',$userids);
    Cookie::set('token',$token);
     
    return json_encode(['errcode'=>0,'errmsg'=>'SUCCESS','data'=>['__token'=>$token,'userid'=>$userids,'userdata'=>$userdatas]]);
    }
     
    }

  • 相关阅读:
    数组元素按指定的位置排序
    git修改历史提交的备注信息
    js常用遍历理解
    async await和promise的区别,和使用方法
    js检测邮箱格式,正则检测邮箱格式
    前端,es6中的promise异步方法,及用的场景
    JMter 压力测试工具简单使用及介绍
    Vue Config
    vue 文件上传
    Windows Redis集群搭建简单版
  • 原文地址:https://www.cnblogs.com/DevilBoy/p/14087669.html
Copyright © 2011-2022 走看看