pc端微信扫码登录

1.先去微信开发平台注册
然后开通网站应用
成功后是这样的
在这里插入图片描述注意这里写的是顶级域名,其他的不行
在这里插入图片描述现在去写前端 前端写个js就可以请求微信了

    // 微信授权登录
      $('.login-tip-btn').click(function(){
          var obj = new WxLogin({
                    self_redirect: false,
                    id: "login_container",
                    appid: "wxda88e44dfcab312d",
                    scope: "snsapi_login",
                    //redirect_uri 这里可以写回调到哪个页面的地址。 但是在配置页面必须写顶级域名地址
                    redirect_uri: encodeURIComponent("https://www.yun-live.com/chat_callback"),
                    // redirect_uri: encodeURIComponent("http://" + window.location.host + "/login.php"), 
                    state: Math.ceil(Math.random() * 1000),
                    style: "black",
                    href: "https://www.yun-live.com/web_pc/css/code_img.css?v=4" //根据自己的css修改二维码样式
                });
          $('.kkcolos_a').show();
          $('.code_img_a').show();
      })


      //关闭微信授权登录

      $('.kkcolos_a').click(function(){
          $('.kkcolos_a').hide();
          $('.code_img_a').hide();
      })

在写给按钮去促发这个js方式请求

这个的login_container是div的di名称

    <!-- 放置二维码的div -->
            <div class="kkcolos_a" style="display: none;"><i class="iconfont colos_a">&#xe844;</i></div>
            <div class="code_img_a" style="display: none;" id="login_container"></div>

前端基本这样就可以方式请求了

现在开始写后端的处理

https://www.yun-live.com/chat_callback这是我发送的地址

<?php

namespace App\Http\Controllers\WebNew;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;


class Pcwechat extends Controller
{

		public function chat_callback()
	{
		session_start();
		$code=Request()->get('code'); //文章ID
		$state=Request()->get('state'); //
		if(empty($code)){
			return ['code'=>'-100','msg'=>'用户拒绝登录,请重新登录!'];
		}
	
		$AppID = 'wxda88e44dfcab3123213d';
		$AppSecret = '827a02300982c37f54edab97752173b22323';
		$url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$AppID.'&secret='.$AppSecret.'&code='.$_GET['code'].'&grant_type=authorization_code';
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		curl_setopt($ch, CURLOPT_URL, $url);
		$json =  curl_exec($ch);
		curl_close($ch);
		$arr=json_decode($json,1);
		//得到 access_token 与 openid
		// print_r($arr);    
		$url='https://api.weixin.qq.com/sns/userinfo?access_token='.$arr['access_token'].'&openid='.$arr['openid'].'&lang=zh_CN';
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		curl_setopt($ch, CURLOPT_URL, $url);
		$json =  curl_exec($ch);
		curl_close($ch);
		$arr=json_decode($json,1);
		// 得到 用户资料
		if(empty($arr['unionid'])){
			return '没有获取到unionid';
		}
		self::redirect_uri($arr);
	}



	// 验证保存和添加
    public function redirect_uri($arr)
    {
        
        session_start();
      	// 判断链接ID是否存在 扫码后登录成功就直接回到原来的位置了
		if (empty($_SESSION["pc_link_id"])) {
			$url='https://www.yun-live.com';
		}else{
			$url='https://www.yun-live.com/meeting_pc/'.$_SESSION["pc_link_id"];
		}

        // 加入缓存
        $ip = request()->ip();
        $time = self::getMsecTime(); //s时间戳转换显示几分钟, //添加时间
        $date = date('Y-m-d H:i:s');
        if(!empty($arr['unionid'])){
            // die(json_encode(array('code'=>'200','msg'=>'获取unionid成功','data'=>$arr['unionid'])));
            // 判断授权表有没有unionId数据。没有是属于新用户,进行添加   平台类型
            $arrayName = array('unionId' =>$arr['unionid']);
            $user =DB::table("users")->where($arrayName)->first(); // 判断授权表有没有unionId数据。没有是属于新用户,进行添加
            $a=json_encode($user);
            $user = json_decode($a, true);
            if(empty($user)){
                $params =array(
                    'unionId' => $arr['unionid'], //主要id
                    'nickname' => $arr['nickname'], //用户昵称
                    'alias' => $arr['nickname'], //用户别名
                    'openid' => $arr['openid'], //用户openId
                    'category' =>'pc', //平台类型
                    'password' => "123456", //用户默认密码
                    'email'    => "", //用户默认邮箱
                    'mobile'   =>'',//手机号
                    'avatar'   => $arr['headimgurl'],//头像
                    'gender'=>$arr['sex'], //性别 1男 2女
                    'created_at'  => $time,//加入时间
                    'updated_at' => $time, //登录时间
                    'created_at_ymd'  => $date,//加入时间
                    'updated_at_ymd' => $date, //登录时间
                    'loginip'   => $ip,     //登录IP
                    'status'    => 1  //状态 1正常的 2冻结
                );


                $GetId=DB::table("users")->insertGetId($params); //添加
    
                    // 加入缓存
                        session([
                            'uid' =>$GetId,
                            'nickname'=>$arr['nickname'],
                            'alias'=>$arr['nickname'],
                            'avatarUrl'=>$arr['headimgurl']
                        ]);
      
                return header('Location:'.$url);
               
            }else{
                if ($user['status']==2) //账号冻结
                {
                    die(json_encode(array('code'=>'dj','msg'=>'账号冻结')));
                }
    

                    $update = array(
                        'nickname' => $arr['nickname'], //用户名 作为真实姓名
                        'avatar'   => $arr['headimgurl'],//头像
                        'updated_at' => $time, //登录时间
                        'updated_at_ymd' => $date, //登录时间
                        'loginip'   => $ip,     //登录IP
                    );

                Db::table('users')->where('id',$user['id'])->update($update);
 
                    // 加入缓存
                        session([
                            'uid' =>$user['id'],
                            'nickname'=>$arr['nickname'],
                            'alias'=>$arr['alias'],
                            'avatarUrl'=>$arr['headimgurl'],
                             'mobile' => $user['mobile'], //手机号
                        ]);

              
              	return header('Location:'.$url);
                  
            }

        }else{
             die(json_encode(array('code'=>'-200','msg'=>'获取unionid失败','data'=>$arr)));
        }
      
         	return header('Location:'.$url);
        
    }

 

               /**
     * 获取毫秒级别的时间戳
     */
    public function getMsecTime()
    {
        list($msec, $sec) = explode(' ', microtime());
        $msectime =  (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000);
        return $msectime;
    }





    




}

这个后端的处理,
大概思路是请求页面的时候判断用户有没有登录,判断就通过这个session的uid存不存在来订,不存在让用户登录,进行扫描,登录成功后存入数据库,在把这个页面刷新,带上uid进可以了