微信网页扫码登录的实现

链接:https://www.cnblogs.com/jiangjunli/p/7436110.html
注意事件:用户按确定后,如何获取用户信息到页面上;(以laravel为例)
步骤1:在后获取用户uid后用Cookie保存起来,并且带uid返回上一页面,如:

 public function weixindenglu(){

      $redirect_uri="http://www.5201314xf.com/index/codeinfo";
      $redirect_uri=urlencode($redirect_uri);//该回调需要url编码
      $appID="wx9f42591d9b70388f";
      $scope="snsapi_login";//写死,微信暂时只支持这个值
      //准备向微信发请求
$url = "https://open.weixin.qq.com/connect/qrconnect?appid=" . $appID."&redirect_uri=".$redirect_uri."&response_type=code&scope=".$scope."&state=STATE#wechat_redirect";
      //请求返回的结果(实际上是个html的字符串)

      $result = file_get_contents($url);


      //替换图片的src才能显示二维码
      $result = str_replace("/connect/qrcode/", "https://open.weixin.qq.com/connect/qrcode/", $result);

      return response()->json($result); //返回页面
    }

    public function codeinfo(){

        $code = $_GET["code"];

        $appid = "wx9f42591d9b70388f";
        $secret = "82e68a2c42cd2eb80950365304644c09";
        if (!empty($code))  //有code
        {

           //通过code获得 access_token + openid
           $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid. "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";

            $jsonResult = file_get_contents($url);

            $resultArray = json_decode($jsonResult, true);

            $access_token = $resultArray["access_token"];
            $openid = $resultArray["openid"];


            //通过access_token + openid 获得用户所有信息,结果全部存储在$infoArray里,后面再写自己的代码逻辑
            $infoUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" . $access_token . "&openid=" . $openid;
            $infoResult = file_get_contents($infoUrl);
            $infoArray = json_decode($infoResult, true);

            $user = DB::table('third_users')->where('wxUnionId',$infoArray['unionid'])->first();
            if($user){
             $userid= $user['userId'];
             
            }
            else{

              $data['userName']=$infoArray['nickname'];
              $data['userPhoto']=$infoArray['headimgurl'];
              $data['createTime']=date('Y-m-d H:i:s',time());
              if($infoArray['sex']==1){
                $data['userSex']=1;
              }
              else{
                $data['userSex']=0;
              }
              $insert_user= DB::table('users')->insert($data);

              $user_id= DB::table('users')->where('userName',$infoArray['nickname'])->first();
              $where['userId']=$user_id['userId'];
              $where['wxUnionId']=$infoArray['unionid'];
              $where['createTime']=date('Y-m-d H:i:s',time());
              $insert_third_user= DB::table('third_users')->insert($where);
              $userid=$where['userId'];
            }

            
            Cookie::queue('uid', $userid, 60);//保存uid

            
            return back()->with('userid',$userid);//带数据uid返回
        }


    }

步骤2:前端获取返回的uid,把它放在input里面;如:

   <input type="hidden" class="uid" value="{{session('userid')}}">

步骤3:判断class="uid"是否含有uid

  //微信登陆
         var uid=$('.uid').val();
         console.log(uid);
         if(uid!=""){
          $.ajax({

                   url:"/index/weixinlogin",
                   dataType:"json",
                   data:{_token:_csrf,uid:uid},
                   type:"POST",
                  
                    success:function(res){
                      
                        var html='';
                            if(res){
                             html+='<div class="denglu_img">';
                             html+='<img src="'+res['userPhoto']+'"/>';
                             html+='</div>';
                             html+='<div class="username">';
                             html+=res['userName'];
                             html+='</div>';
                  
                            }
                            
                            
                            $('.logins').empty(); 
                             
                            $(".logins").html(html);
                            
                         },
                  
                    })

           var loginnames=$('.loginname').val();
     console.log(loginnames);
       if(loginnames==""){
       $('.theme-popover-mask').fadeIn(100);
      
          $('.zhuce').slideDown(200);
       }



         }

步骤4:后台访问:

 public function weixinlogin(){
      $uid=$_POST['uid'];
      $result= DB::table('users')->where('userId',$uid)->first();
      if($result){
        return $result;
      }
    }

步骤5:用一个异步判断是否登陆:


      //检测是否登陆
          $.ajax({

                   url:"/index/like",
                   dataType:"json",
                   data:{_token:_csrf},
                   type:"POST",
                    async : false,
                    cache : false,
                    success:function(res){
                      console.log(res);
                        var messages='';
                            if(res.length==0){
                               messages+='<div class="denglu">';
                               messages+='<a class="theme-login" style="color:#fff;" href="javascript:void();">登录</a>';
                               messages+='</div>';
                              
                            }else{
                              
                            $('.uid').val(res['userId']);
                            $('.loginname').val(res['loginName']);
                            }
                            
                            
                            $('.logins').empty(); 
                             
                            $(".logins").html(messages);
                            
                        },
                       
                    })

大概步骤已经完成,注意:微信扫描登陆操作要在公共页面去操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值